Skip to main content

api-designer

REST API の設計・OpenAPI 仕様生成・既存仕様レビューを支援する。「APIを設計して」「OpenAPIを作って」「REST APIのエンドポイントを決めて」「ドメインモデルからAPIを設計して」「既存のOpenAPI仕様を見直して」「実装コードからOpenAPIを生成して」「APIのバージョニング戦略を決めて」などで必ず使う。

Source facts

Repository
ynitto/sandbox
Last source activity
November 3, 2026 at 12:08
Detected SKILL.md language
Japanese
Stars
1
Forks
0

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
6 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
api-designer
description
REST API の設計・OpenAPI 仕様生成・既存仕様レビューを支援する。「APIを設計して」「OpenAPIを作って」「REST APIのエンドポイントを決めて」「ドメインモデルからAPIを設計して」「既存のOpenAPI仕様を見直して」「実装コードからOpenAPIを生成して」「APIのバージョニング戦略を決めて」などで必ず使う。
metadata
{"version":"2.1.0","tier":"stable","category":"design","tags":["api","openapi","rest"]}
# API Designer REST API の設計から OpenAPI スキーマ生成まで一貫して支援するスキル。 ドメインモデル・既存 OpenAPI 仕様・実装コードを入力として受け取り、それぞれの制約に応じた最適なインターフェースを決定する。 ## 前後の工程 - **前工程**: ドメインモデル設計、既存 API 仕様・実装コードの収集 - **後工程(フロントエンド)**: 生成した OpenAPI スキーマをフロントエンド I/F 設計のインプットとして渡す - **後工程(DB)**: エンドポイント設計と DB アクセスパターンを整合させる --- ## 実行ルール(必須) - 各 Step は **入力確認 → 実施 → 出力** の順で進める - Step 1 の入力収集はユーザーと対話しながら行う - Step 2 の制約分析は入力の種類によって判断基準が異なる。必ずテンプレートに従い明示する - 互換性ポリシー(breaking / non-breaking / deprecation)は Step 3 と Step 6 の両方で確認する - **REST 原則への違反は入力・設計・レビューのあらゆる段階で検出し、必ずユーザーに警告する**(既存インターフェースでも例外なし) - Step 6 のセキュリティ最小チェックと OpenAPI ドキュメント品質チェックは省略しない --- ## API 設計フロー ### Step 1: 入力収集とインプット確認 以下の入力を**ユーザーと対話しながら**確認・収集する。複数受け付けてよい。 #### 確認する入力(優先順位順) 1. **openapi_spec** — 既存の OpenAPI 仕様ファイル(YAML/JSON) 2. **implementation_code** — 既存の実装コード(ルーティング定義、コントローラ等) 3. **domain_model** — ドメインモデル(Mermaid classDiagram 等) 4. **api_description** — 上記がない場合のフォールバック(API の目的・概要) 入力が揃ったら追加確認(「未定」で可): ``` 1. API の利用者(SPA / モバイル / サードパーティ / 社内システム) 2. 認証・認可方式(JWT / OAuth2 / API Key / Session など) 3. バージョニング方針(新規 / 既存バージョン継続 / メジャー更新) 4. PII・機微情報の有無(氏名、メール、決済情報など) 5. レートリミット・SLA 要件(あれば) ``` **Step 1 の出力**: `収集した入力サマリー`(種類・内容・有無) --- ### Step 2: 入力分析と制約判断 #### 入力種別ごとの制約ルール | 入力種別 | インターフェース制約 | 品質チェック | |----------|-------------------|------------| | openapi_spec | **原則変更不可**(パス・メソッド・構造を維持。追加は可。削除・変更は breaking change としてユーザー承認を得る) | **必須**(境界条件・エラーポリシー・矛盾・曖昧さ・REST 原則をチェックしてフィードバック) | | implementation_code | **コスト考慮**(変更量が大きい場合はユーザーに確認) | **必須**(openapi_spec との矛盾・未定義エラー・境界条件の漏れをチェック) | | domain_model | **自由設計**(RESTful インターフェースへ具体化。命名・構造はドメイン用語に従う) | — | | api_description のみ | **自由設計**(ベストプラクティスに従い新規設計) | — | > インターフェース制約と品質チェックは独立して扱う。openapi_spec の構造は変えないが、品質上の問題はフィードバックして修正を促す。 複合入力時の優先順位: `openapi_spec > implementation_code > domain_model > api_description` #### openapi_spec の品質チェック項目(必須) **境界条件**: パスパラメータの形式制約・クエリパラメータの範囲・リクエストボディの制約・ページネーション上限 **エラーポリシー**: 各 operation の 4xx/5xx の網羅性・operation 間のステータスコード一貫性・エラースキーマ統一・401/403 の使い分け **矛盾**: パスパラメータの定義一致・required フィールドと example の整合・security 上書き漏れ・$ref 参照切れ **曖昧さ**: description 省略・operation 間のフィールド名揺れ・nullable/optional の一貫性 **REST 原則**: パスの動詞使用・リソース複数形・メソッドの意味論的正確性・ステータスコード慣習・ネスト深さ (→ 詳細チェック項目と警告フォーマット: [references/rest-design-guide.md](references/rest-design-guide.md)) #### implementation_code との照合(openapi_spec + implementation_code が両方ある場合) - 実装に存在するエンドポイントが openapi_spec に定義されているか(未文書エンドポイントの検出) - 実装が返すエラーコード・ステータスが openapi_spec の responses と一致しているか - 実装のバリデーションロジックと openapi_spec のスキーマ制約が一致しているか - 実装の認証・認可の分岐が openapi_spec の security 定義に反映されているか #### フィードバックテンプレート(必須) ```markdown ## OpenAPI 品質チェック結果 ### 境界条件の欠落 | 対象 | 問題 | 推奨対応 | |------|------|---------| ### エラーポリシーの問題 | 対象 | 問題 | 推奨対応 | |------|------|---------| ### 矛盾 | 対象 | 問題 | 推奨対応 | |------|------|---------| ### 曖昧さ・REST 原則違反 | 対象 | 問題 | 推奨対応 | |------|------|---------| 上記の問題を修正してから OpenAPI を生成します。修正不要なものがあれば教えてください。 ``` #### 制約分析テンプレート(必須) ```markdown ## 制約分析サマリー - openapi_spec: あり / なし → [あり: 既存パス一覧 + 品質チェック結果] - implementation_code: あり / なし → [あり: 変更コスト見積もり + 照合チェック結果] - domain_model: あり / なし → [あり: RESTful 具体化の方針] ## 変更制約マップ | 対象 | 変更可否 | 備考 | |------|---------|------| | (パス / スキーマ / 操作ごとに記載)| 維持 / 追加可 / 要承認 | | ## 設計方針サマリー - 固定するインターフェース: - 新規追加するインターフェース: - 変更提案(ユーザー承認が必要なもの): - 品質改善(ユーザー確認後に反映): ``` **Step 2 の出力**: `制約分析サマリー` + `OpenAPI 品質チェック結果`(openapi_spec がある場合) --- ### Step 3: エンドポイント設計 Step 2 の制約に従いエンドポイントを設計する。 #### REST 命名規約 ``` GET /users # 一覧 POST /users # 作成 GET /users/{id} # 取得 PUT /users/{id} # 全体更新 PATCH /users/{id} # 部分更新 DELETE /users/{id} # 削除 # ネストは 2 階層まで GET /users/{userId}/orders/{orderId} # アクションは動詞サブリソースで表現 POST /orders/{id}/cancel ``` #### REST 原則チェック(必須) [references/rest-design-guide.md](references/rest-design-guide.md) のチェック表に従い全エンドポイントを検証する。 違反があれば同ファイルの警告フォーマットに従いユーザーに提示する。 #### バージョニング・互換性ポリシー 推奨: **URL パス方式**(`/v1/users`) - **non-breaking**: 省略可能フィールド追加・新規エンドポイント追加 - **breaking**: 必須フィールド追加・フィールド削除/型変更・パス変更 - **deprecation**: 非推奨告知 → 併存期間明示(例: 90日)→ 利用状況モニタリング → 廃止 **Step 3 の出力**: `エンドポイント一覧(メソッド・パス・説明・認証)` + `互換性方針メモ` --- ### Step 4: リクエスト / レスポンス設計 詳細ガイド: [references/rest-design-guide.md](references/rest-design-guide.md) #### 標準レスポンス構造 ```json // 成功(単一リソース) { "data": { "id": "123", "name": "Alice" }, "meta": { "requestId": "abc-xyz" } } // 成功(コレクション) { "data": [...], "pagination": { "cursor": "...", "hasNext": true, "total": 500 } } ``` #### エラーレスポンス(RFC 7807 Problem Details) ```json { "type": "https://api.example.com/errors/validation-error", "title": "Validation Error", "status": 422, "detail": "The request body contains invalid fields.", "instance": "/users/register", "errors": [{ "field": "email", "message": "Invalid email format" }] } ``` **Step 4 の出力**: `リクエスト/レスポンス仕様` + `エラーコード定義表` --- ### Step 5: OpenAPI スキーマ生成 [references/openapi-guide.md](references/openapi-guide.md) を読み込み、OpenAPI 3.0 YAML を生成する。 #### 生成品質要件(必須) | 要件 | 内容 | |------|------| | description | 全 operation・全パスパラメータ・主要スキーマフィールドに記載(制約・認可条件・注意事項を含む) | | example | 全スキーマにスキーマレベルの example を定義 | | エラーレスポンス網羅 | 各 operation の発生しうる 4xx/5xx を全パターン列挙 | | エラー examples | 401/403/404/422/429 にシナリオ別 examples(複数)を定義 | | $ref 共通化 | 繰り返しスキーマは components で共通化 | **Step 5 の出力**: `OpenAPI 3.0 YAML`(descriptions・examples・error responses を全て含む) --- ### Step 6: レビューと調整 #### REST 原則レビュー(必須) 生成した OpenAPI 全体を再確認する。新たな違反があれば警告を提示する。 openapi_spec 由来の既存違反には仕様書内(description または `x-rest-warning`)に注記を追記する。 #### 互換性レビュー(必須) - breaking 変更の有無を判定する - breaking なら、メジャーバージョン更新または deprecation 手順を適用する #### セキュリティ最小チェック(必須) 1. **認可境界**: 誰がどのリソース/フィールドを操作できるか明確か 2. **PII 保護**: 収集最小化、マスキング、出力制御、保存方針が定義されているか 3. **監査ログ**: 認証/認可失敗・更新系操作を追跡可能か 4. **レート制御**: 乱用対策(IP/トークン単位制限、429設計)があるか 5. **情報露出**: エラーメッセージやレスポンスに内部情報を含めていないか #### OpenAPI ドキュメント品質チェック(必須) | チェック項目 | 基準 | |-------------|------| | operation description | 全 operation に記載されているか | | parameter description | 全パスパラメータ・クエリパラメータに記載されているか | | example | 全 schema に example が定義されているか | | エラーレスポンス網羅 | 各 operation の発生しうる 4xx/5xx が列挙されているか | | エラー examples | 401/403/404/422/429 にシナリオ別 example があるか | | components 共通化 | 繰り返しスキーマが $ref で共通化されているか | #### Step 2 品質チェック結果の再確認(openapi_spec がある場合) Step 2 の未対応指摘があれば再度提示し、対応方針を確認する。 **Step 6 の出力**: `レビュー結果(REST 原則 / 互換性 / セキュリティ / ドキュメント品質)` + `修正アクション一覧` --- ## 成果物テンプレート ### 出力フォーマット(必須) 1. `収集した入力サマリー` 2. `制約分析サマリー`(入力種別ごとの制約と設計方針) 3. `OpenAPI 品質チェック結果`(openapi_spec がある場合。ユーザー確認後に次へ) 4. `エンドポイント一覧`(メソッド・パス・説明・認証) 5. `互換性ポリシー`(breaking/non-breaking/deprecation) 6. `OpenAPI 3.0 YAML`(解説・スキーマ例・エラーバリエーション含む) 7. `セキュリティ最小チェック結果` 8. `DoD 判定` 9. `次工程ハンドオフ` ### エンドポイント一覧表 ```markdown | メソッド | パス | 説明 | 認証 | |--------|------|------|------| | GET | /v1/users | ユーザー一覧取得 | JWT | | POST | /v1/users | ユーザー作成 | JWT | | GET | /v1/users/{id} | ユーザー取得 | JWT | | PUT | /v1/users/{id} | ユーザー更新 | JWT(本人/管理者) | | DELETE | /v1/users/{id} | ユーザー削除 | JWT(管理者) | ``` ### エラーコード定義表 ```markdown | コード | HTTP ステータス | 発生条件 | 説明 | |--------|----------------|---------|------| | USER_NOT_FOUND | 404 | 指定 ID のユーザーが存在しない | ユーザーが見つかりません | | EMAIL_ALREADY_EXISTS | 409 | 同一メールアドレスが登録済み | メールアドレスが既に使用中 | | INVALID_TOKEN | 401 | JWT が無効または期限切れ | 認証トークンが無効です | | INSUFFICIENT_PERMISSION | 403 | 操作に必要なロールがない | 権限が不足しています | | VALIDATION_ERROR | 422 | リクエストボディのバリデーション失敗 | 入力値が不正です | | RATE_LIMIT_EXCEEDED | 429 | レートリミット超過 | リクエスト上限を超えました | ``` ### Definition of Done(DoD)チェックリスト(必須) ```markdown - [ ] 入力を収集し制約分析を完了した - [ ] openapi_spec がある場合、品質チェック(境界条件・エラーポリシー・矛盾・曖昧さ・REST 原則)を実施しフィードバックした - [ ] 制約マップに従いエンドポイントを設計した(openapi_spec の既存インターフェースは維持) - [ ] 品質チェックの指摘事項をユーザーと確認し、対応方針が決まっている - [ ] REST 原則の違反をチェックし、違反があればユーザーに警告した - [ ] 既存 IF の REST 原則違反には仕様書内に注記を追記した - [ ] 互換性ポリシー(breaking/non-breaking/deprecation)が明記されている - [ ] 全 operation に description が記載されている - [ ] 全 schema に example が定義されている - [ ] 全 operation の 4xx/5xx エラーレスポンスが列挙されている - [ ] エラーレスポンスにシナリオ別 example がある - [ ] セキュリティ最小チェック5項目が全て確認済み - [ ] OpenAPI lint を通過している(validate_openapi.py) - [ ] フロントエンド / DB へのハンドオフ項目が整理されている ``` ### 次工程ハンドオフ項目(必須) ```markdown ## フロントエンド向け - 利用エンドポイント一覧: - 認証方式・必要スコープ: - エラーコードと UI ハンドリング方針: - 互換性注意点(deprecation 期限含む): ## バックエンド / DB 向け - 想定アクセスパターン(一覧・検索・集計): - インデックス/キャッシュ検討ポイント: - 監査ログ保存要件: - PII 取り扱いポリシー: ``` --- ## 補助スクリプト - **validate_openapi.py** — OpenAPI 3.x YAML / JSON ファイルのスキーマバリデーション ```bash python scripts/validate_openapi.py openapi.yaml python scripts/validate_openapi.py --strict openapi.yaml # 警告も表示 python scripts/validate_openapi.py --json openapi.yaml # CI 連携用 ``` 終了コード: 0 = 通過 / 1 = エラーあり / 2 = ファイル不在・パースエラー --- ## リファレンス - [references/openapi-guide.md](references/openapi-guide.md) — OpenAPI 3.0 スニペット集(descriptions・examples・error responses テンプレート) - [references/rest-design-guide.md](references/rest-design-guide.md) — REST 原則チェック表・HTTP ステータスコード・ページネーション・認証設計
View on GitHub