openapi について
openapiは、API開発者向けのOpenAPI 3.1仕様ガイドです。APIコントラクトやJSON Schemaとの互換性、型生成、仕様上のよくある問題を扱います。
主な機能
- 01HTTP APIコントラクトの定義
- 02エンドポイント、スキーマ、認証の記述
- 03JSON Schema互換性の利用
- 04型生成とドキュメント作成の指針
- 05仕様上のよくある誤りの確認
活用シーン
- 01REST APIの設計
- 02TypeScript、Python、Goのクライアント型生成
- 03リクエストとレスポンスの検証
- 04コントラクト優先のAPI開発
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ oakoss/ agent-skills --skill openapiインストール後、Claude Code で/openapiを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/code-generation.mddata-types.mddocumentation.mdschema-design.md詳細
OpenAPI
概要
OpenAPI Specification(OAS)3.1は、HTTP APIを記述するための業界標準です。エンドポイント、リクエスト/レスポンスのスキーマ、認証、エラー形式を網羅する、機械可読な契約を定義します。OpenAPI 3.1はJSON Schema Draft 2020-12の厳密なスーパーセットであり、データ検証や型生成においてJSON Schemaとの完全な互換性を実現します。
使用する場面: REST APIの設計、型付きクライアント(TypeScript、Python、Go)の生成、インタラクティブなドキュメントの作成、リクエスト/レスポンスのペイロードの検証、契約ファーストのAPI開発、APIゲートウェイの設定。
使用しない場面: GraphQL API(GraphQLスキーマを使用)、gRPCサービス(Protocol Buffersを使用)、WebSocket専用プロトコル、ネットワーク境界を越えることのない内部関数呼び出し。
クイックリファレンス
| パターン | 要素 | 主なポイント |
|---|---|---|
| ドキュメントのルート | openapi、info、paths | 最上位にopenapi: '3.1.0'が必要 |
| パス項目 | /resources/{id} | パスパラメーターには波括弧を使用 |
| オペレーション | get、post、put、delete、patch | 各オペレーションにoperationIdとresponsesが必要 |
| パラメーター | in: path|query|header|cookie | パスパラメーターは常にrequired: true |
| リクエストボディ | requestBody.content | メディアタイプ(application/json)をキーとして指定 |
| レスポンス | responses.200.content | 各オペレーションに少なくとも1つのレスポンスが必要 |
| コンポーネント参照 | $ref: '#/components/schemas/Name' | スキーマ、パラメーター、レスポンスを再利用 |
| スキーマの型 | type: string|number|integer|boolean|array|object | 3.1では配列でtype: ["string", "null"]をサポート |
| 合成 | oneOf、anyOf、allOf | 多相性と共通部分型をモデル化 |
| 識別子 | discriminator.propertyName | oneOf/anyOfを使うコードジェネレーター向けのヒント |
| セキュリティ | securitySchemes + 最上位のsecurity | Bearer、APIキー、OAuth2、OpenID Connect |
| タグ | オペレーションのtags | ドキュメント内でオペレーションをグループ化 |
| 型生成 | openapi-typescript | 実行時依存のない、仕様からのTypeScript型生成 |
| 型付きfetch | openapi-fetch | 生成された型を使う、型安全なHTTPクライアント |
| React Query | openapi-react-query | 仕様から生成される、型安全なReact Queryフック |
| スキーマファースト | zod-openapi | ZodスキーマからOpenAPIドキュメントを生成 |
よくある間違い
| 間違い | 正しいパターン |
|---|---|
3.1 で nullable: true を使用する | type: ["string", "null"] を使用します(3.0 の構文は廃止されています) |
オペレーションに operationId がない | コード生成のため、必ず一意の operationId を設定します |
パスパラメーターが required に含まれていない | パスパラメーターは常に必須です(required: true) |
| あらゆる場所でインラインスキーマを使用する | components/schemas に切り出し、$ref を使用します |
required フィールドが競合する allOf | required 配列を統合します。allOf はそれらを結合します |
| 共通プロパティなしでディスクリミネーターを使用する | oneOf/anyOf 内のすべてのスキーマに、ディスクリミネーターのプロパティを含める必要があります |
レスポンスの description が空である | すべてのレスポンスに意味のある description が必要です |
properties なしで type: object を使用する | 必ず properties を定義するか、additionalProperties を使用します |
循環する $ref チェーン | 遅延解決で循環を断つか、スキーマを再構成します |
| 3.0 と 3.1 の構文を混在させる | どちらか一方のバージョンを選びます。3.1 では nullable が廃止され、exclusiveMinimum が数値に変更されています |
委任
- API 設計レビュー:
Taskエージェントを使用して、仕様の完全性と一貫性を監査します - 型生成:
Exploreエージェントを使用して、プロジェクト固有の OpenAPI ツール設定を探します - コードレビュー:生成されたクライアントの使用パターンを
code-reviewerエージェントに委任します
typescript-patternsスキルを利用できる場合は、高度な TypeScript の型付けに関する質問を委任します。
参考資料
コメント
Markdown 対応