59 lines
3.1 KiB
Markdown
59 lines
3.1 KiB
Markdown
---
|
||
description: 'Spring Bootベースアプリケーション構築のためのガイドライン'
|
||
applyTo: '**/*.java, **/*.kt'
|
||
---
|
||
|
||
# Spring Boot開発
|
||
|
||
## 一般指針
|
||
|
||
- コードレビューの際は、高い信頼性を持つ提案のみを行う。
|
||
- 設計上の決定の理由についてコメントを含む、良好な保守性プラクティスでコードを作成する。
|
||
- エッジケースを処理し、明確な例外処理を書く。
|
||
- ライブラリや外部依存関係については、その使用方法と目的をコメントで言及する。
|
||
|
||
## Spring Boot指針
|
||
|
||
### 依存性注入
|
||
|
||
- すべての必要な依存関係にコンストラクタ注入を使用する。
|
||
- 依存関係フィールドを`private final`として宣言する。
|
||
|
||
### 設定
|
||
|
||
- 外部化された設定にはYAMLファイル(`application.yml`)を使用する。
|
||
- 環境プロファイル:異なる環境(dev、test、prod)にSpringプロファイルを使用する
|
||
- 設定プロパティ:型安全な設定バインディングに@ConfigurationPropertiesを使用する
|
||
- シークレット管理:環境変数やシークレット管理システムを使用してシークレットを外部化する
|
||
|
||
### コード構成
|
||
|
||
- パッケージ構造:レイヤーではなく機能/ドメインごとに整理する
|
||
- 関心の分離:コントローラーは薄く、サービスは集中的に、リポジトリはシンプルに保つ
|
||
- ユーティリティクラス:ユーティリティクラスは`private`コンストラクタでfinalにする
|
||
|
||
### サービス層
|
||
|
||
- ビジネスロジックは`@Service`注釈付きクラスに配置する。
|
||
- サービスはステートレスでテスト可能であるべきです。
|
||
- コンストラクタ経由でリポジトリを注入する。
|
||
- サービスメソッドシグネチャはドメインIDやDTOを使用し、必要でない限りリポジトリエンティティを直接公開しない。
|
||
|
||
### ロギング
|
||
|
||
- すべてのロギングにSLF4Jを使用する(`private static final Logger logger = LoggerFactory.getLogger(MyClass.class);`)。
|
||
- 具体的な実装(Logback、Log4j2)や`System.out.println()`を直接使用しない。
|
||
- パラメータ化されたロギングを使用する:`logger.info("User {} logged in", userId);`。
|
||
|
||
### セキュリティ & 入力処理
|
||
|
||
- パラメータ化クエリを使用する | SQLインジェクションを防ぐため、常にSpring Data JPAまたは`NamedParameterJdbcTemplate`を使用する。
|
||
- JSR-380(`@NotNull`、`@Size`など)注釈と`BindingResult`を使用してリクエストボディとパラメータを検証する
|
||
|
||
## ビルドと検証
|
||
|
||
- コードを追加または変更した後、プロジェクトが正常にビルドし続けることを確認する。
|
||
- プロジェクトでMavenを使用している場合は、`mvn clean install`を実行する。
|
||
- プロジェクトでGradleを使用している場合は、`./gradlew build`(WindowsでS`gradlew.bat build`)を実行する。
|
||
- ビルドの一部としてすべてのテストが成功することを確認する。
|