背景
#120 [Sprint 0 Readiness] のクローズ時(2026-05-22)に、api/openapi.yaml の構文・規約準拠を CI で自動検証する仕組みが存在しない ことが判明した。#120 の受け入れ条件 2(OpenAPI lint 無警告)は、手元に検証ツール(spectral / yq / pip3 等)が無い状況では確認手段がなく、claude-automation-review が PR ごとに目視チェックする運用に依存していた状態。
実害として、以下のリスクが恒常的にある:
$ref 切れ、未定義スキーマ参照、循環参照などの構文エラーが merge まで気付かれない可能性
- 設計規約(レスポンスコード列挙順序、命名規約、description 必須など)違反が PR レビューの粒度に依存
- クライアントコード生成 / API ドキュメント公開を始めた段階で初めて問題が顕在化するリスク
Sprint 0 本体(#121)着手前 〜 着手直後に CI 検証を整備し、以降の OpenAPI 変更を CI で恒常的にガードする。
対応内容
1. 検証ツールの選定
候補:
| ツール |
強み |
弱み |
Spectral(@stoplight/spectral-cli) |
OAS 3.1 対応、カスタムルール記述可、規約準拠まで検証可能 |
Node.js 依存、初期セットアップが必要 |
| openapi-spec-validator |
軽量、Python 製、$ref 解決まで検証 |
規約準拠(命名・description 等)はチェック不可 |
| swagger-cli validate |
軽量、構文・$ref をチェック |
カスタムルール不可、OAS 3.1 サポート要確認 |
| Redocly CLI |
OAS 3.1 対応、規約準拠も検証可 |
Node.js 依存、Spectral と機能重複 |
第一候補: Spectral(OAS 3.1 + カスタムルール対応の総合力で他候補を上回る)。代替候補: Redocly CLI。
2. CI workflow への組み込み
.github/workflows/ 配下に新規 workflow(または既存に追加)で以下を実装:
- トリガ:
api/openapi.yaml を変更する PR、または定期実行
- 実行内容:
- Node.js setup
- Spectral CLI を
npx または npm install で導入
spectral lint api/openapi.yaml を実行
- 警告 / エラーがあれば CI fail で merge ブロック
3. Spectral 設定ファイル(.spectral.yaml)
最初は extends: spectral:oas のデフォルトルールから開始。設計規約 §2 の項目を順次カスタムルール化する候補:
ただし 初期は最小ルールから開始し、運用しながら追加する方針が現実的(過剰なルールで merge 不能になる事故を避ける)。
4. ローカル実行手段の整備
開発者がローカルで CI と同じ lint を回せるよう、README または docs/specs/開発計画書.md に手順を記載:
# 例
npx -y @stoplight/spectral-cli@latest lint api/openapi.yaml
受け入れ条件
想定スコープ外(別 Issue 候補)
- 設計規約準拠の カスタムルール 整備(本 Issue ではデフォルトルールまで)
- 基本設計書・要件定義書と OpenAPI の整合性チェック自動化(別レベル / 別ツール)
- API ドキュメント公開フロー(Swagger UI / Redoc ホスティング)
関連
備考
- task-type:
task-type:impl(CI workflow の追加)
- 優先度:
priority/p2(本体実装ブロッカではないが、Sprint 0 実装中に整備推奨)
- area:
area/ci + area/openapi
背景
#120 [Sprint 0 Readiness] のクローズ時(2026-05-22)に、
api/openapi.yamlの構文・規約準拠を CI で自動検証する仕組みが存在しない ことが判明した。#120 の受け入れ条件 2(OpenAPI lint 無警告)は、手元に検証ツール(spectral / yq / pip3 等)が無い状況では確認手段がなく、claude-automation-review が PR ごとに目視チェックする運用に依存していた状態。実害として、以下のリスクが恒常的にある:
$ref切れ、未定義スキーマ参照、循環参照などの構文エラーが merge まで気付かれない可能性Sprint 0 本体(#121)着手前 〜 着手直後に CI 検証を整備し、以降の OpenAPI 変更を CI で恒常的にガードする。
対応内容
1. 検証ツールの選定
候補:
@stoplight/spectral-cli)第一候補: Spectral(OAS 3.1 + カスタムルール対応の総合力で他候補を上回る)。代替候補: Redocly CLI。
2. CI workflow への組み込み
.github/workflows/配下に新規 workflow(または既存に追加)で以下を実装:api/openapi.yamlを変更する PR、または定期実行npxまたはnpm installで導入spectral lint api/openapi.yamlを実行3. Spectral 設定ファイル(
.spectral.yaml)最初は
extends: spectral:oasのデフォルトルールから開始。設計規約 §2 の項目を順次カスタムルール化する候補:ただし 初期は最小ルールから開始し、運用しながら追加する方針が現実的(過剰なルールで merge 不能になる事故を避ける)。
4. ローカル実行手段の整備
開発者がローカルで CI と同じ lint を回せるよう、README または
docs/specs/開発計画書.mdに手順を記載:# 例 npx -y @stoplight/spectral-cli@latest lint api/openapi.yaml受け入れ条件
api/openapi.yamlの lint ジョブが追加され、PR で自動実行される.spectral.yaml(または相当の設定ファイル)がリポジトリにコミットされているapi/openapi.yamlがデフォルトルールセットで lint 無警告であることを確認(警告があれば事前に修正する別 PR を切る)想定スコープ外(別 Issue 候補)
関連
docs/specs/設計規約.md(OpenAPI ファースト方針)$ref+ sibling description のツール互換性検証)— Sprint 0 実装フェーズで対応予定備考
task-type:impl(CI workflow の追加)priority/p2(本体実装ブロッカではないが、Sprint 0 実装中に整備推奨)area/ci+area/openapi