こんにちは!プロダクト開発の現場で、APIの仕様変更のすれ違いに頭を悩ませたことはありませんか?
「フロントエンドチームが使いたいAPIのレスポンスが、バックエンドチームの勝手な変更で消えていた」
「ドキュメントが古いまま放置されていて、誰も本当の仕様を把握していない」
マイクロサービス化が進み、複数のチームが1つのプロダクトに関わるようになると、こうしたコミュニケーションロスや「仕様の崩壊」は日常茶飯事になります。これを根絶するために生まれたのが、「Swagger(OpenAPI)」を用いたGitOpsによるスキーマファースト開発です。
今回は、初心者の方でも今日から実践できるように、OpenAPIの基本から、複数チームで破綻せずに運用するための仕組みづくりまで、優しく、しかし現場のリアルな知見を交えて徹底解説します。これをマスターすれば、チーム間の無駄なコンフリクトや確認作業が劇的に減りますよ!
—
1. Swagger (OpenAPI) とは何か?なぜ今必要なのか?
まず言葉の整理をしておきましょう。
- OpenAPI Specification (OAS):RESTful APIの構造を機械可読なかたちで記述するための「世界標準フォーマット(仕様)」のことです(YAMLやJSONで書きます)。
- Swagger:元々その仕様を策定したツール群の名前であり、現在ではOpenAPIドキュメントを視覚的に表示するUIツール(Swagger UI)などの総称として親しまれています。
「コードファースト」の罠
多くの開発現場では、まずプログラム(コード)を書き、そこからドキュメントを自動生成する「コードファースト」で開発しがちです。しかし、これだと「コード変更=ドキュメントの更新」を人間が都度忘れ、すぐに形骸化します。
私たちが目指す「スキーマファースト」
一方で、「まずAPIの設計図(OpenAPI定義)をチーム全員で合意してから実装を始める」のがスキーマファーストです。この設計図を「Gitで厳格にバージョン管理し、自動テストやモックサーバーの生成までを仕組み化する」のが、今回お伝えするGitOps運用の極意です。
—
2. 環境構築:最小にして最強のセットアップ
難解なインストールは必要ありません。VS Codeさえあれば、今日から最高のAPI開発環境が手に入ります。
必要なツール
1. Visual Studio Code (VS Code)
2. 拡張機能: Swagger Viewer または OpenAPI (Swagger) Editor
最初のプロジェクト構造を作る
まずは、次のようなシンプルなディレクトリ構成でGitリポジトリを一つ作成してください(これがAPI仕様書専用の「APIリポジトリ」になります)。
my-api-specs/
┣ .github/
┃ ┗ workflows/
┃ ┗ api-lint.yml # 後述する自動チェック用
┗ openapi.yaml # APIの設計図本体
—
3. HelloWorld的・精度の高いOpenAPI定義の作成
それでは、最初の「設計図」を作ってみましょう。
`openapi.yaml`というファイルを開き、以下のコードを貼り付けてみてください。ただのテキストですが、これがチーム全員の「共通言語」になります。
openapi: 3.0.3
info:
title: ユーザー管理API
description: |
複数チームで安全に共有するためのユーザー管理API仕様書です。
この仕様書をベースに、モックやフロント・バックの実装を進めます。
version: 1.0.0
paths:
/users:
get:
summary: ユーザー一覧取得
description: 登録されているユーザーの一覧を返します。
responses:
‘200’:
description: 成功時のレスポンス
content:
application/json:
schema:
type: array
items:
$ref: ‘#/components/schemas/User’
components:
schemas:
User:
type: object
required:
- id
- name
properties:
id:
type: integer
example: 1
name:
type: string
example: “山田 太郎”
email:
type: string
format: email
example: “yamada@example.com”
これの何がすごいのか?
VS Codeの拡張機能を入れていると、このファイルをプレビュー(視覚的なドキュメント画面)で確認できます。さらに、このファイルが1つあれば、以下のことが自動でできるようになります。
1. モックサーバーの起動(バックエンドが未完成でも、フロントエンドが開発を始められる)
2. クライアントSDKの自動生成(TypeScriptやJavaなどの型安全なコードが一瞬でできる)
—
4. 大規模開発で破綻しない!複数チーム間でのGitOps運用ルール
ここからが本題です。複数のチーム(フロントエンド、バックエンド、QA)がこの1つの `openapi.yaml` を触るようになると、確実にカオスが訪れます。
それを防ぐための「3つの鉄則」を授けます。
鉄則①:API仕様書専用の「単一のGitリポジトリ」を切り、PR駆動で変更する
コードのリポジトリとは別に、API定義専用の独立したGitリポジトリ(例:`company-api-specs`)を作成します。
誰もが勝手に `main` ブランチへ直接ファイルをプッシュしてはいけません。必ずブランチを切り、Pull Request(PR)を作成して、関係者全員のレビューを通すフローを強制します。
鉄則②:GitHub Actionsで「構文チェック」と「破壊的変更の検知」を自動化する
人間はうっかりミスをします。「必須パラメータを消してしまった」「型の定義を間違えた」といったミスをCI(継続的インテグレーション)で弾きましょう。
以下は、GitHub Actionsを使ってPR時に自動でAPIの品質をチェックする設定ファイルです。
.github/workflows/api-lint.yml
name: Validate OpenAPI Schema
on:
pull_request:
paths:
- ‘openapi.yaml’
jobs:
validate:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
# 1. 構文エラーがないかSpectral(有名なLinter)でチェック
- name: Lint OpenAPI file
uses: stoplightio/spectral-action@v5
with:
file_format: yaml
# 2. 破壊的変更(Breaking Changes)が混ざっていないかチェック
- name: Check Breaking Changes against main branch
uses: oasdiff/oasdiff-action@main
with:
base: ‘origin/main:openapi.yaml’
revision: ‘openapi.yaml’
task: ‘breaking’
このCIが防いでくれる恐ろしい事故
上の設定に含まれる `oasdiff` というツールは、「既存のAPIエンドポイントを削除していないか」「既存のフィールドの型を勝手に変更していないか(例: stringからintegerへ)」といった、クライアント側をクラッシュさせる「破壊的変更」を検知し、PRをマージ不可能にしてくれます。これが現場を救う最強の盾となります。
鉄則③:変更の承認フロー(レビュアーの指定)
GitHubの `CODEOWNERS` 機能などを使用し、`openapi.yaml` が変更された際は、フロントエンド代表とバックエンド代表の両方の承認(Approve)がないとマージできない仕組みを作ります。これにより、片側のチームが勝手に仕様を変えることが物理的に不可能になります。
—
まとめ:今日から始める第一歩
いかがでしたでしょうか?
Swagger (OpenAPI) と聞くと、「綺麗なドキュメントが作れるツール」という印象にとどまりがちですが、本質は「複数チームが安全に、高速に開発するための契約書(コントラクト)」を管理する仕組みです。
1. まずはリポジトリを一つ作り、`openapi.yaml` を置いてみる。
2. VS Codeでプレビューしながら書いてみる。
3. 小さくてもいいので、GitHub ActionsでLinterを動かしてみる。
このステップを踏むだけで、チーム間の無駄なSlackのやり取りや、「聞いてないよ!」という絶叫は劇的に減ります。ぜひ、次のスプリントからあなたのチームにも導入してみてください。毎日の開発が驚くほどスムーズになりますよ!