OpenAPIのLinter導入してPRで指摘するしくみを作った話(Spectral × reviewdog)
はじめに
こんにちは。株式会社ペライチ バックエンドエンジニアの船橋です。
当社では OpenAPI を使用して API 仕様書を管理していますが、チーム規模の拡大に伴い、仕様書の品質維持が課題となっていました。今回は、OpenAPI の Lint ツールである Spectral と、GitHub 上でコードレビューコメントを自動でつけてくれる reviewdog を組み合わせて、PR作成時に自動でAPI仕様の指摘を出すしくみを構築した経験を紹介します。
🧩 なぜこのしくみが必要だったのか?
OpenAPI を使って API 仕様書を管理している中で、以下のような具体的な課題に直面していました。
- エンドポイントやパラメータの命名ルールが人によってばらつく
 - 重要な項目(
operationIdやdescription)の記述漏れが頻発 - レスポンス例の形式が開発者によって不統一
 - PR レビュー時に、細かいルールまでチェックする工数が膨大
 
これらの課題により、API 仕様書の品質低下やレビュー工数の増大が発生していました。そこで、PR時に自動で指摘してくれるしくみを導入し、レビューの効率と品質を向上させることを目指しました。
🛠 使用したツール
- 
Spectral
OpenAPI 仕様書に対してルールベースで Lint をかけるツール。- YAML ファイルでカスタムルールを定義可能
 - 豊富な組込みルールセット
 - エラーレベルの柔軟な設定(error/warning/off)
 
 - 
reviewdog
Lint 結果を GitHub の PR に自動でコメントしてくれるツール。- 差分に対してのみコメントが可能
 - 複数の Lint ツールに対応
 - GitHub Actions との親和性が高い
 
 
⚙️ 実装の流れ
 1. .spectral.yaml の用意(Lintルールの定義)
extends: ["spectral:oas"]
rules:
  # 必須項目のチェック
  operation-description: error  # API 操作の説明必須
  operation-operationId: error # operationId の設定必須
  
  # カスタムルール
  custom-response-example:
    description: "レスポンスに例が含まれている必要があります"
    given: "$.paths[*][*].responses[*].content['application/json']"
    then:
      field: examples
      function: truthy
2. GitHub Actions ワークフローの作成
.github/workflows/openapi-lint.yml
name: Lint OpenAPI
on:
  pull_request:
    paths:
      - "openapi/swagger.yaml"  # OpenAPI 定義ファイルの変更時のみ実行
jobs:
  spectral-lint:
    runs-on: ubuntu-latest
    steps:
      - name: checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0  # 差分比較のため完全な history が必要
      - name: install spectral
        run: npm install -g @stoplight/spectral-cli
      - name: setup reviewdog
        uses: reviewdog/action-setup@v1
      - name: spectral lint
        run: |
          spectral lint openapi/swagger.yaml --ruleset .spectral.yaml -f text | reviewdog -efm="%f:%l:%c %t%*[^ ] %m" -name="spectral" -filter-mode=diff_context -reporter=github-pr-review
        env:
          REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
このワークフローにより、以下の自動化が実現されました。
- OpenAPI 定義ファイルが変更された PR を検知
 - Spectral による仕様書の Lint チェック実行
 - reviewdog による Lint 結果の PR コメント投稿
 
✅ 導入後の効果
- 
記述ルールの統一と品質向上
- 
operationIdやdescriptionの記述漏れが激減 - 命名規則の統一性が向上
 - レスポンス例の形式が標準化
 
 - 
 - 
レビュー工数の削減
- 形式的なチェックを自動化することで、レビュアーの負担の削減
 - 本質的な設計議論により多くの時間を割けるように
 
 
📝 まとめ
Spectral と reviewdog の組み合わせにより、以下の成果を達成できました。
- API 仕様書の品質を自動的にチェック・維持
 - レビュー工数の削減と効率化
 - チーム全体のドキュメント品質の向上
 
特に、PR 上での即時フィードバックという形式が、開発者の学習とチームの品質向上に大きく貢献しています。
「API 仕様のレビューに時間がかかる」「人によって書き方がバラバラ」という課題をお持ちの方は、ぜひこのしくみを検討してみてください。
※最近では、Devin や Cline など生成 AI の導入が進んでおり、
以前は reviewdog が担っていたルールベースの指摘も、AI が自然にカバーできるようになってきました。
Discussion