--- 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`)を実行する。 - ビルドの一部としてすべてのテストが成功することを確認する。