mcpField
J
java-springboot

java-springboot

github.com/github開発40.5k21.4k 回インストール今日更新
リポジトリ

java-springboot について

Spring Boot アプリケーション開発の指針となるスキルです。プロジェクト構成、設定、API、データアクセス、テスト、セキュリティの実践方法を開発者向けに示します。

主な機能

  1. 01機能単位のパッケージ構成
  2. 02コンストラクターインジェクション
  3. 03外部化された型安全な設定
  4. 04REST API と検証の指針
  5. 05データアクセスとトランザクション
  6. 06テストとセキュリティの指針

活用シーン

  1. 01Spring Boot プロジェクトの開始
  2. 02アプリケーション構成のレビュー
  3. 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)を防いでください。

コメント