spring-mvc-webflux-api-builder について
spring-mvc-webflux-api-builder は、リポジトリの Spring スタックに合った API コードを生成するスキルです。Kotlin 開発者向けに、契約設計、DTO、バリデーション、コントローラー、エラー処理、Web 層テストを支援します。
主な機能
- 01MVC または WebFlux の規約を確認
- 02エンドポイントとエラー契約の定義
- 03DTO とバリデーションの生成
- 04コントローラーとサービス境界の作成
- 05例外マッピングと Web テストの追加
活用シーン
- 01既存の Spring モジュール向け Kotlin エンドポイントの構築
- 02適切な Kotlin アノテーションターゲットでのバリデーション追加
- 03互換性のあるリクエストとレスポンス契約の策定
- 04Web 層での成功・失敗動作のテスト
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ jetbrains/ skills --skill spring-mvc-webflux-api-builderインストール後、Claude Code で/spring-mvc-webflux-api-builderを入力して読み込まれたか確認します。
同梱ファイルagents/openai.yaml
詳細
Spring MVC WebFlux API ビルダー
ソースマッピング:Kotlin_Spring_Developer_Pipeline.md(SK-06)から派生した Tier 1 の重要スキルです。
ミッション
リポジトリで実際に使用されている Spring スタックに対して、もっともらしいだけでなく正しい API コードを生成します。 エンドポイント、DTO、バリデーション、テストのひな形を、まとまりのある一式として生成します。
まずスタックを判断する
- モジュールが Spring MVC か WebFlux かを確認します。
- コントローラーがブロッキング方式、コルーチン方式、Reactor 方式のいずれかを確認します。
- プロジェクトで既に採用されているエラー形式、シリアライズ規則、OpenAPI のアプローチを確認します。
- これらの事実が
project-context-ingestionの出力で既に明らかになっている場合は、それを再利用します。
コードを書く前にコントラクトを設計する
- エンドポイントのパス、メソッド、認証要件、冪等性のルール、ステータスコードを定義します。
- リクエストとレスポンスの DTO の境界を定義します。エンティティを直接公開しないでください。
- バリデーション失敗、ビジネス上の競合、未検出、予期しないエラーに対するエラーモデルを定義します。
- 該当する場合は、ページネーション、ソート、相関 ID の動作を定義します。
- null、未指定、デフォルト値が設定されたフィールドの意味を区別するかどうかを定義します。
次の順序で生成する
- リクエストとレスポンスの DTO。
- 正しい Kotlin の
@field:使用サイトターゲットを使ったバリデーションアノテーション。 - コントローラーのシグネチャ。
- サービスインターフェースまたはユースケースの境界。
- トランスポートモデルとドメインモデル間のマッピングまたは変換コード。
@ControllerAdviceまたはプロジェクトで相当する仕組みによるエラー処理。- コントラクトを実証する、対象を絞った Web レイヤーのテストを1つ。
Kotlin 固有のルール
- コンストラクタープロパティの Jakarta Bean Validation アノテーションには、
@field:ターゲットを使用します。 - null 許容フィールドと必須フィールドを明示します。
- 特に PATCH に相当する動作では、
nullと未指定の違いをコントラクト上の決定事項として扱います。 - Kotlin のコンストラクターのデフォルト値に依存する前に、
jackson-module-kotlinまたは同等のシリアライズサポートを確認します。 - プロジェクトで明確に異なるパターンが使われていない限り、
valプロパティを持つ不変 DTO を優先します。
MVC と WebFlux のルール
- リポジトリで意図的に既に混在させている場合を除き、生成する同じエンドポイント内で MVC と WebFlux のスタイルを混在させないでください。
- MVC では、通常の戻り値型とブロッキング方式のサービス境界を優先します。
- コルーチンを使用する WebFlux では、ストリーミングが必要な場合に
suspend関数とFlow<T>を優先します。 - Reactor 方式のコードでは、独自のハイブリッドスタイルを考案せず、プロジェクトで既に使われている
MonoとFluxの規約に従います。
高度なコントラクト上の判断
- 人間が読むメッセージが変わっても安定するよう、ペイロードには機械可読なエラーコードを含めることを優先します。
400と422のどちらを使うかは慎重に決めます。バリデーションや不正な入力は、ドメインルール違反とは異なります。- 作成エンドポイントでは、
Locationを伴う201 Createdがコントラクトに含まれるかを決めます。簡単だからという理由だけで200をデフォルトにしないでください。 - 更新エンドポイントでは、同時編集が問題になる場合、バージョンフィールドや
ETag、If-Matchなどの楽観的同時実行制御のシグナルを検討します。 - PATCH のセマンティクスでは、必要に応じて「未指定」「値を指定」「null を指定」の3つの状態を明示的にモデル化します。Kotlin の通常の null 許容フィールドでは、常にこの3つすべてを表現できるとは限りません。
- サービスですでにその方針が標準化されている場合を除き、
Pageのような Spring 固有のトランスポート型を公開 API のコントラクトとして直接公開することは避けます。 - 日時、列挙型、値クラスのシリアライズを明示します。シリアライザーのデフォルト動作は、バージョンやクライアントによって変わることがよくあります。
- ストリーミングエンドポイントでは、メソッドシグネチャだけでなく、キャンセル、バックプレッシャー、部分書き込み時の動作も検討します。
エキスパートのヒューリスティクス
- コントローラーのコードを書く前に、エラーの契約とバリデーションの契約を設計します。後から追加すると、API に最も大きな変更が生じます。
- トランスポート DTO は範囲を絞り、明示的にします。内部のドメインモデルを再利用すると、最初は時間を節約できますが、その後はずっと余計な時間がかかります。
- サービスが公開されている、または長期にわたって運用される場合は、後方互換性のある契約の進化を優先します。フィールドの追加、安定したコード、計画的な非推奨化を心がけます。
- 可能な場合は、相関 ID の伝播を個々のコントローラーメソッドではなく、フィルターやインターセプターに実装します。
出力の契約
すぐに適用できるパッチ計画、または以下を含む具体的なファイルやコードブロックを返します。
- リクエスト DTO
- レスポンス DTO
- コントローラー
- サービスインターフェースまたはユースケースのエントリーポイント
- 例外マッピングまたはアドバイスの更新
- Web レイヤーのテスト
また、互換性に大きく影響する API 契約上の判断について、簡潔な説明も返します。
ガードレール
- API エラーに内部の例外詳細を漏らさないでください。
- Kotlin で誤ったターゲットにバリデーションアノテーションを使用しないでください。
- 永続化エンティティを公開しないでください。
- 契約を確認せずに、デフォルトの HTTP ステータスコードを前提としないでください。
- モジュールが WebFlux の場合に MVC を選んだり、その逆を行ったりしないでください。
検証チェックリスト
- エンドポイントが、リポジトリで実際に使用されている Spring スタックに対してコンパイルできる。
- 無効な入力に対してバリデーションが実行され、期待される形式のエラーが返る。
- 成功ケースと少なくとも 1 つの失敗ケースが、Web レイヤーのテストでカバーされている。
- シリアライズのルールが、既存のプロジェクト規約に沿っている。
品質基準
このスキルを適切に実行すると、コンパイル、バリデーション、シリアライズが行われ、一貫したエラー処理ができるエンドポイントが得られます。 不適切に実行すると、フレームワークを混在させたり、Kotlin のバリデーションを誤ったり、サービスの他の部分で使われていないエラーモデルを独自に作ったりします。
コメント
Markdown 対応