「OpenAPI first」という開発スタイルを半年ほど実践してみた。結論、万能ではないが特定の条件下では非常に有効。
OpenAPI firstとは
コードを書く前にOpenAPI仕様(YAML/JSON)を書く。そこからフロント・バック両方のコードを生成する。
# openapi.yaml
paths:
/articles:
get:
operationId: listArticles
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ArticlesResponse'
実際に使ったツールチェーン
- バックエンド(Go): oapi-codegen(型定義・ハンドラインターフェース生成)
- フロントエンド(TypeScript): orval + TanStack Query
- 別解(Go): ogen(oapi-codegenより厳密なバリデーション付きコード生成)
- フロント側バリデーション: zodとの連携(orvalが対応)
メリット
1. 型の一貫性
フロントとバックで型がズレない。これが最大の価値。
2. AIとの相性が良い
Claude Codeに「このOpenAPI仕様に従ってエンドポイント実装して」と言えば、かなり正確なコードが出る。
3. ドキュメントが常に最新
Swagger UIやRedocで自動生成されるドキュメントは嘘をつかない。
デメリット
1. 初期学習コスト
OpenAPI仕様自体が複雑。特にoneOf、anyOfあたりは挙動がツールによって異なる。
2. 柔軟性の低下
「ちょっとだけ仕様変えたい」が重い。YAMLを変更→生成→両方の実装修正、のサイクルが発生。
3. 生成コードの品質差
ツールによって生成されるコードの質が全然違う。orvalは優秀だが、他はイマイチなものも多い。
向いているケース
- チーム開発(2人以上)
- フロント・バックが別チーム
- 長期運用が前提
向いていないケース
- 個人開発で高速にイテレーションしたい
- プロトタイプ段階
- GraphQL使うなら最初からGraphQL
おわり
OpenAPI firstは銀の弾丸ではない。ただ、「仕様書とコードの乖離」という古典的問題に対する現実解の一つではある。