java-springboot について
Spring Boot アプリケーション開発の指針となるスキルです。プロジェクト構成、設定、API、データアクセス、テスト、セキュリティの実践方法を開発者向けに示します。
主な機能
- 01機能単位のパッケージ構成
- 02コンストラクターインジェクション
- 03外部化された型安全な設定
- 04REST API と検証の指針
- 05データアクセスとトランザクション
- 06テストとセキュリティの指針
活用シーン
- 01Spring Boot プロジェクトの開始
- 02アプリケーション構成のレビュー
- 03サービスや API のテスト計画
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ github/ awesome-copilot --skill java-springbootインストール後、Claude Code で/java-springbootを入力して読み込まれたか確認します。
詳細
Spring Boot のベストプラクティス
あなたの目標は、確立されたベストプラクティスに従って、高品質な Spring Boot アプリケーションを書く手助けをすることです。
プロジェクトのセットアップと構造
- ビルドツール: 依存関係の管理には Maven (
pom.xml) または Gradle (build.gradle) を使用します。 - スターター: 依存関係の管理を簡素化するために、Spring Boot スターター (例:
spring-boot-starter-web、spring-boot-starter-data-jpa) を使用します。 - パッケージ構造: コードはレイヤー (例:
com.example.app.controller、com.example.app.service) ではなく、機能/ドメイン (例:com.example.app.order、com.example.app.user) ごとに整理します。
依存関係の注入とコンポーネント
- コンストラクタインジェクション: 必須の依存関係には、常にコンストラクタベースのインジェクションを使用します。これにより、コンポーネントがテストしやすくなり、依存関係が明示的になります。
- 不変性: 依存関係のフィールドは
private finalとして宣言します。 - コンポーネントのステレオタイプ: Bean を定義するために、
@Component、@Service、@Repository、および@Controller/@RestControllerアノテーションを適切に使用します。
設定
- 外部化された設定: 設定には
application.yml(またはapplication.properties) を使用します。YAML は可読性と階層構造の点で好まれることがよくあります。 - 型安全なプロパティ:
@ConfigurationPropertiesを使用して、設定を強く型付けされた Java オブジェクトにバインドします。 - プロファイル: 環境固有の設定を管理するために、Spring プロファイル (
application-dev.yml、application-prod.yml) を使用します。 - シークレットの管理: シークレットをハードコードしないでください。環境変数、または HashiCorp Vault や AWS Secrets Manager のような専用のシークレット管理ツールを使用します。
Web レイヤー (コントローラー)
- RESTful API: 明確で一貫性のある RESTful エンドポイントを設計します。
- DTO (データ転送オブジェクト): API レイヤーでデータを公開および消費するために DTO を使用します。JPA エンティティをクライアントに直接公開しないでください。
- バリデーション: リクエストペイロードを検証するために、DTO にアノテーション (
@Valid、@NotNull、@Size) を付けて Java Bean Validation (JSR 380) を使用します。 - エラー処理: 一貫性のあるエラーレスポンスを提供するために、
@ControllerAdviceと@ExceptionHandlerを使用してグローバル例外ハンドラーを実装します。
サービスレイヤー
- ビジネスロジック: すべてのビジネスロジックを
@Serviceクラス内にカプセル化します。 - ステートレス性: サービスはステートレスであるべきです。
- トランザクション管理: データベーストランザクションを宣言的に管理するために、サービスメソッドに
@Transactionalを使用します。必要最小限の粒度で適用します。
データレイヤー (リポジトリ)
- Spring Data JPA: 標準的なデータベース操作には、
JpaRepositoryまたはCrudRepositoryを拡張して Spring Data JPA リポジトリを使用します。 - カスタムクエリ: 複雑なクエリには、
@Queryまたは JPA Criteria API を使用します。 - プロジェクション: データベースから必要なデータのみを取得するために、DTO プロジェクションを使用します。
ロギング
- SLF4J: ロギングには SLF4J API を使用します。
- ロガーの宣言:
private static final Logger logger = LoggerFactory.getLogger(MyClass.class); - パラメータ化されたロギング: パフォーマンスを向上させるために、文字列連結の代わりにパラメータ化されたメッセージ (
logger.info("Processing user {}...", userId);) を使用します。
テスト
- 単体テスト: JUnit 5 と Mockito のようなモッキングフレームワークを使用して、サービスとコンポーネントの単体テストを書きます。
- 統合テスト: Spring アプリケーションコンテキストをロードする統合テストには
@SpringBootTestを使用します。 - テストスライス: アプリケーションの特定の部分を分離してテストするために、
@WebMvcTest(コントローラー用) や@DataJpaTest(リポジトリ用) のようなテストスライスアノテーションを使用します。 - Testcontainers: 実際のデータベース、メッセージブローカーなどを用いた信頼性の高い統合テストには、Testcontainers の使用を検討します。
セキュリティ
- Spring Security: 認証と認可には Spring Security を使用してください。
- パスワードエンコーディング: パスワードは常に BCrypt のような強力なハッシュアルゴリズムを使用してエンコードしてください。
- 入力のサニタイズ: Spring Data JPA またはパラメータ化クエリを使用して SQL インジェクションを防いでください。出力を適切にエンコードしてクロスサイトスクリプティング(XSS)を防いでください。
コメント
Markdown 対応