DEV Community

Cover image for Gitを諦めないOpenAPI連携:ファイルベースチームの共同作業術
Akira
Akira

Posted on • Originally published at apidog.com

Gitを諦めないOpenAPI連携:ファイルベースチームの共同作業術

OpenAPI仕様をGitで管理すると、履歴・ブランチ・PRレビューは扱いやすくなります。一方で、QA、フロントエンド、プロダクトマネージャーがAPI設計に参加するための導線は不足しがちです。Gitは仕様の置き場所として適していますが、Gitのレビューツールは基本的にコードレビュー向けであり、API仕様を「ドキュメント」として読む関係者には使いにくい場面があります。

今すぐApidogを試す

すでにOpenAPI仕様をYAMLまたはJSONとしてリポジトリに保存しているチームでは、次のような状態になりやすいです。

  • 仕様はGitでバージョン管理されている
  • PRで差分レビューはできる
  • しかし非エンジニアはStoplightなどのプレビューを見ながらSlackで質問している
  • フロントエンドはバックエンド実装が終わるまで試せない
  • 仕様変更の影響範囲がチームごとに通知されない

「api-spec-as-code」の記事では、GitをOpenAPI仕様の真のソースにする考え方を説明しています。この記事では、その後に残るコラボレーションのギャップと、ApidogのようなツールでGit中心のまま補完する方法を実装寄りに整理します。

Gitだけでは埋められないギャップ

Gitは以下を扱うには非常に強力です。

  • 変更履歴
  • ブランチ
  • Pull Request
  • 差分レビュー
  • CI/CDトリガー

しかし、OpenAPI仕様をチーム全体の作業起点にする場合、Gitだけでは不足する領域があります。

1. 非エンジニアからの設計時コメント

QAエンジニアが openapi.yaml の差分を見て、エラーレスポンスのスキーマ不整合に気づいたとします。

GitHubのPR上では、YAMLの行番号にコメントできます。ただし、API仕様をドキュメントとして読んでいる人にとっては、次のようなレビューのほうが自然です。

  • POST /payments に対してコメントする
  • 422 レスポンスに対して質問する
  • ValidationError スキーマに対して修正依頼する
  • コメントをスレッド化して解決済みにする

つまり、行番号ではなく「仕様要素」に紐付いたレビューが必要です。

2. 現在のブランチに紐付くライブモック

フロントエンド開発者は、バックエンド実装が完了する前にAPIを叩きたいことがよくあります。

Gitに openapi.yaml があるだけでは、モックサーバーは自動では起動しません。たとえば手元で以下を実行する必要があります。

npx @stoplight/prism-cli mock api/openapi.yaml
Enter fullscreen mode Exit fullscreen mode

これはローカル検証には便利ですが、チーム運用では次の課題が残ります。

  • ブランチごとにモックURLを分けたい
  • フロントエンドチーム全員で同じモックを使いたい
  • PRごとに最新仕様のモックを確認したい
  • 本番向けドキュメントのモックURLは安定させたい

3. ロールに応じた通知ルーティング

バックエンドチームが共有仕様に破壊的変更をマージした場合、影響を受けるチームはすぐに知る必要があります。

GitのWebhookでSlack通知はできますが、多くの場合は以下のような粗い通知になります。

api/openapi.yaml が変更されました。

APIチームが必要とするのは、より具体的な通知です。

/payments のレスポンススキーマが変更されました。フロントエンド、モバイル、QAチームは確認してください。

このレベルの通知には、Gitの変更イベントだけでなく、OpenAPIのパス・タグ・スキーマを理解するレイヤーが必要です。

4. ドキュメントのアクセス制御

公開GitHubリポジトリに仕様を置くと、誰でも読めます。プライベートリポジトリにすれば制限できますが、APIドキュメントの読者ごとに細かく出し分けるのは簡単ではありません。

たとえば以下のような制御です。

  • 外部パートナーには公開APIだけ見せる
  • 社内QAには内部APIも見せる
  • 管理系APIは特定チームだけに見せる
  • エンドポイント単位でドキュメントアクセスを分ける

Gitはソースコードのアクセス制御には向いていますが、APIドキュメントのオーディエンス制御をネイティブに提供するものではありません。

コラボレーションレイヤーの役割

実装方針はシンプルです。

Gitを真のソースにしたまま、OpenAPIファイルの上にドキュメント、モック、レビュー、通知、CI/CDレポートを重ねる。

この「コラボレーションレイヤー」を追加すると、Gitを置き換えずにチーム全体の作業体験を改善できます。

カテゴリ 強み Gitの上に加えるもの
ホスト型仕様プラットフォーム Stoplight, SwaggerHub 洗練されたUI、コメント、アクセス制御 独自の仕様コピーを保持。Gitはオプション
ファイルネイティブなコラボレーションレイヤー Apidog Spec-Firstモード(ベータ版), Redocly コミットされたファイルから作業。Gitの権威性を維持 コラボレーション、モック、CIをファイルの上に追加
GitネイティブAPIクライアント Bruno, Insomnia ファイル同期、コレクション管理 リクエスト実行が中心。ドキュメント、モック、レポートは別途必要

ツールを選ぶときは、「Git連携があるか」だけで判断しないほうが安全です。次の観点で確認します。

  • OpenAPIファイルを真のソースとして扱えるか
  • 独自コピーとの二重管理にならないか
  • ブランチごとにモックを作れるか
  • コメントが仕様要素に紐付くか
  • CI/CDでコントラクトテストを実行できるか
  • 通知をパスやタグ単位でルーティングできるか
  • ドキュメントアクセスをロールごとに制御できるか

BrunoのGit連携は強力だが、リクエストレイヤーで止まる

BrunoはファイルネイティブなAPIクライアントとして強力です。特にBruno Ultimateは、以下のような機能を備えています。

  • ファイルベースのコレクション管理
  • Git統合
  • SSO
  • SCIM
  • シークレットマネージャーフック
  • 監査ログ

主なニーズが「別途管理しているOpenAPI仕様やAPIに対してリクエストを実行すること」であれば、BrunoのGit機能は堅牢です。

ただし、Brunoの中心はリクエストレイヤーです。次のような機能は、別の仕組みが必要になります。

  • コミットされたOpenAPIファイルからAPIドキュメントを自動生成する
  • ブランチごとのモックサーバーを生成する
  • 仕様パスの変更に応じて通知先を分ける
  • ドキュメントのアクセス制御を行う
  • コントラクトテストやレポートと仕様レビューを統合する

たとえば、すでにStoplightでドキュメントとモックを運用しているチームにBrunoを導入する場合、Stoplightを置き換えるのではなく、Brunoを並行追加する構成になります。それが適切な場合もありますが、役割分担は明確にしておくべきです。

ApidogのSpec-Firstモードでギャップを埋める

ApidogのSpec-Firstモード(現在ベータ版)は、GitにコミットされたOpenAPIファイルを権威あるソースとして扱い、その上にコラボレーション機能を重ねるためのモードです。

openapi.yaml をGitにコミットすると、Apidogはそのファイルを読み込み、仕様を独自データベースにフォークするのではなく、ファイルベースのワークフローに接続します。

実装フローは次のようになります。

ステップ1:Gitリポジトリをリンクする

Apidogでプロジェクトを作成し、GitHub、GitLab、またはBitbucketリポジトリに接続します。その後、OpenAPIファイルのパスを指定します。

接続手順は apidog-git-integration-sync ガイドで確認できます。

例として、リポジトリに次のファイルを置きます。

# api/openapi.yaml
openapi: "3.1.0"
info:
  title: 決済API
  version: "2.4.0"

paths:
  /payments:
    post:
      summary: 決済を作成
      operationId: createPayment
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/PaymentRequest"
      responses:
        "201":
          description: 決済が作成されました
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PaymentResponse"
        "422":
          description: バリデーションエラー
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ValidationError"

components:
  schemas:
    PaymentRequest:
      type: object
      required: [amount, currency, source]
      properties:
        amount:
          type: integer
          description: 最小通貨単位での金額(例:セント)
        currency:
          type: string
          enum: [usd, eur, gbp]
        source:
          type: string
          description: 決済方法トークン

    PaymentResponse:
      type: object
      properties:
        id:
          type: string
        status:
          type: string
          enum: [pending, completed, failed]

    ValidationError:
      type: object
      properties:
        code:
          type: string
        message:
          type: string
Enter fullscreen mode Exit fullscreen mode

この状態で、Git側では通常どおりPRレビューを行えます。

git checkout -b feature/payment-v2
git add api/openapi.yaml
git commit -m "Update payment API schema"
git push origin feature/payment-v2
Enter fullscreen mode Exit fullscreen mode

ステップ2:差分ではなく仕様要素にコメントする

Gitにリンクされると、ApidogはOpenAPI仕様をインタラクティブなドキュメントとして表示します。

これにより、QAやフロントエンドのメンバーは、YAMLの行番号ではなく以下の単位でコメントできます。

  • エンドポイント
  • リクエストボディ
  • レスポンス
  • スキーマ
  • サンプル値
  • 説明文

たとえばQAエンジニアは、POST /payments を確認しながら次のような指摘を残せます。

idempotency-key ヘッダーが必要ではありませんか?二重決済防止のため、仕様に追加してください。

エンジニアは指摘を受けて openapi.yaml を更新し、コミットします。変更がApidog側に反映されると、会話は行番号ではなく仕様要素に紐付いたまま残ります。

ステップ3:ブランチ固有のモックを生成する

Spec-Firstモードでは、仕様のブランチごとにモックサーバーを分けられます。

たとえば以下のように運用できます。

ブランチ 用途 モック
main 安定版仕様 QAやステージング確認用
feature/payment-v2 決済API改修 フロントエンド先行開発用
feature/admin-api 管理API追加 内部チーム検証用

これにより、フロントエンド開発者はバックエンド実装を待たずに、対象ブランチの仕様に基づくモックURLを使えます。

ローカルで毎回以下を実行する必要もありません。

npx @stoplight/prism-cli mock api/openapi.yaml
Enter fullscreen mode Exit fullscreen mode

ステップ4:適切なチームに通知をルーティングする

仕様内のパスやスキーマが変更されたら、影響するチームだけに通知を送ります。

例:

変更対象 通知先
/payments フロントエンド、モバイル、QA
/admin 内部管理ツールチーム
ValidationError バックエンド、QA
認証ヘッダー 全API利用チーム

SlackやMicrosoft Teamsに通知する場合は、各プラットフォームのWebhook設定を使います。

Apidog側では、通知チャンネルをエンドポイントタグやパスプレフィックスに紐付けます。

トライアル時には、特に以下を確認してください。

  • タグ単位で通知できるか
  • パス単位で通知できるか
  • 破壊的変更だけ通知できるか
  • ドキュメントのアクセス制御とチームロールを対応付けられるか

CI/CDに接続する

コラボレーションレイヤーは、チャット通知だけでなくCI/CDに接続すると実用性が上がります。

基本構成は次のとおりです。

  1. PRでOpenAPIファイルを変更する
  2. CIでOpenAPI仕様をLintする
  3. コントラクトテストを実行する
  4. 失敗したらPRをブロックする
  5. 成功したらレビューとマージに進む

仕様のLintには SpectralRedocly CLI を利用できます。Apidog CLIを組み合わせると、コントラクトテストもCIステップに含められます。

GitHub Actionsの例です。

# .github/workflows/api-spec.yml
name: API仕様の検証とテスト

on: [push, pull_request]

jobs:
  validate-and-test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: OpenAPI仕様の検証 (Spectral)
        run: |
          npm install -g @stoplight/spectral-cli
          spectral lint api/openapi.yaml --ruleset .spectral.yaml

      - name: Apidogコントラクトテストの実行
        env:
          APIDOG_TOKEN: ${{ secrets.APIDOG_TOKEN }}
        run: |
          npx apidog-cli run \
            --project-id ${{ vars.APIDOG_PROJECT_ID }} \
            --test-suite "決済APIスモークテスト" \
            --environment staging
Enter fullscreen mode Exit fullscreen mode

OpenAPI仕様は、APIが約束する内容の標準的なリファレンスです。コミットされた仕様に対してコントラクトテストを実行すれば、実装が仕様から逸脱した場合にCIで検出できます。

GitネイティブなAPIワークフロー全体については、git-native-api-workflow でエンドツーエンドの構成を確認できます。

ファイルベースチーム向けの比較

ファイルベースでOpenAPIを管理する場合、主要な比較軸は「Gitを真のソースにできるか」です。

機能 Stoplight SwaggerHub Apidog Spec-First(ベータ版)
Gitを権威あるソースとする オプション(デフォルトで独自コピー) オプション はい
設計時コメント はい はい はい
ブランチ固有のモック はい 部分的 はい
ロールベースのドキュメントアクセス はい はい トライアルで確認
プロジェクト横断的なスキーマ再利用 はい はい トライアルで確認
CI/CDコントラクトテスト Prism経由 限定的 はい(Apidog CLI)
カスタムLintルール Spectral経由 限定的 トライアルで確認
SSO/SCIM 有料プラン エンタープライズ トライアルで確認
通知ルーティング Webhook経由 限定的 はい
ファイルネイティブ(二重コピーなし) いいえ いいえ はい(Spec-First)

SwaggerHubを含むより広い比較は、swaggerhub-vs-apidog-collaboration を参照してください。

よくある質問

ApidogのコメントとGitのPRレビューは併用できますか?

はい。用途が異なります。

  • GitのPRレビュー:YAML変更を確認するエンジニア向け
  • Apidogのコメント:仕様をドキュメントとして確認するQA、フロントエンド、PM向け

コミットされたOpenAPIファイルは、どちらのフローでも単一の真のソースとして扱えます。

Apidog上で仕様を編集した場合はどうなりますか?

Spec-Firstモードでは、Apidogインターフェースで行った編集をGitにコミットとしてプッシュバックできます。

典型的な流れは以下です。

  1. Apidog UIで仕様を編集する
  2. ブランチにコミットする
  3. GitでPRを作成する
  4. エンジニアがレビューする
  5. マージする

ただし、チームによって「GitからApidogへ同期するだけにする」のか「ApidogからGitへも書き戻す」のかは運用方針が変わります。導入前に確認してください。

Spec-Firstモードの詳しい手順は、spec-first-mode-apidog-beta-walkthrough で確認できます。

複数のOpenAPIファイルを持つモノリポでも使えますか?

モノリポでは、サービスごとに複数のOpenAPIファイルを持つ構成が一般的です。

例:

apps/
  payments/
    api/openapi.yaml
  users/
    api/openapi.yaml
  admin/
    api/openapi.yaml
Enter fullscreen mode Exit fullscreen mode

Apidogは複数プロジェクトをサポートしており、それぞれ異なるファイルパスにリンクできます。

ただし、次の点はリポジトリ構成に依存するため、トライアルで確認してください。

  • 単一Apidogプロジェクトに複数仕様ファイルをマッピングできるか
  • 共通スキーマを複数プロジェクトで再利用できるか
  • カスタムLintルールを横断的に共有できるか
  • ブランチごとのモックURLをサービス単位で分けられるか

Redoclyとはどう比較されますか?

Redocly CLI は、OpenAPIファイルのLint、バンドル、ドキュメント生成に強いツールです。Redoclyのホスト型プラットフォームでは、レビューやチーム機能も追加されます。

ApidogのSpec-Firstモードとの比較では、次の点を確認するとよいです。

  • コミット済みファイルを真のソースとして扱えるか
  • モック、コントラクトテスト、通知、ドキュメントを同じワークフローで扱えるか
  • チームメンバーが仕様要素にコメントできるか
  • Git上のPRレビューと競合しないか

OpenAPI Initiativeのツールはどうですか?

OpenAPI Initiative はOpenAPI仕様そのものを公開しており、コラボレーションプラットフォームを提供しているわけではありません。

ツールを選ぶ際は、利用しているOpenAPIバージョンに対応しているかを確認してください。特にOpenAPI 3.1を使う場合は、各ツールで OpenAPI 3.1 のサポート状況を検証する必要があります。

まとめ

OpenAPI仕様をGitに保存しているなら、ファイル管理の問題は解決しています。しかし、チームコラボレーションの問題はまだ残ります。

必要になるのは、Gitを置き換えるツールではなく、Gitにある仕様ファイルの上に次の機能を重ねるレイヤーです。

  • 仕様要素に紐付くコメント
  • ブランチごとのモック
  • パスやタグに応じた通知ルーティング
  • ドキュメントアクセス制御
  • CI/CDでのLintとコントラクトテスト
  • 非エンジニアも参加できるレビューUI

現在、Gitで仕様を管理し、Stoplightや共有ドキュメントでコラボレーションを補っているなら、それは Apidog Spec-Firstモード が統合しやすい構成です。

Spec-Firstモードはまだベータ版のため、本格導入前に以下を重点的に検証してください。

  • ドキュメントのアクセス制御
  • プロジェクト横断的なスキーマ再利用
  • 通知ルーティングの粒度
  • Gitとの同期方向
  • CI/CDでのコントラクトテスト
  • 既存PRレビューとの共存

Apidogをダウンロードし、既存のOpenAPI仕様リポジトリのブランチに接続して、Git中心のままコラボレーションレイヤーを追加できるか確認してください。

Top comments (0)