♟️
OpenAPIを使用したスキーマ駆動開発
Agenda
- はじめに
- スキーマ駆動開発で解決したい問題
- スキーマ駆動開発の仕組み
- 課題
- まとめ
はじめに
今回は Magic Moment で実施している OpenAPI によるスキーマ駆動開発についてご紹介致します。
スキーマ駆動開発で解決したい問題
開発を始めた当初は、小規模なチームだったためフロントエンドとバックエンド間での認識のズレが少なかったのですが、チームの規模が大きくなりコミュニケーションコストが高くなったことでズレが生じるようになり、以下のような問題が発生しました。
- API ドキュメントが存在しなかったため、コードを見ないと API の実装がわからなかった。
- バックエンドを実装しながらインターフェースも考えていたため、 バックエンドの実装が終わらないとフロントエンドの開発ができなかった。
- フロントエンド・バックエンド両方で同じインターフェースのオブジェクトを作っていたため、API に変更があった時に反映漏れなどがあり、都度認識合わせのコミュケーションが発生した。
スキーマ駆動開発の仕組み
Magic Moment では、OpenAPI 用の Repository に OpenAPI の定義を PUSH するとフロントエンドとバックエンドのコードが生成される仕組みになっており、生成したコードを各サービスの submodule としてマウントすることで、スキーマ駆動開発を実現しています。
使用している Generator
Client
- Typescript
- typescript-axios
- https://openapi-generator.tech/docs/generators/typescript-axios
Server
- Go
- oapi-codegen
- https://github.com/deepmap/oapi-codegen
- Typescript(Node.js + Express)
- Generator が見つからず、自作の Generator を利用している
課題
- 導入以前のコードについては、以下理由により generate されたコードへの差し替えがなかなか進まない
- 影響範囲が広い場合が多く、開発スケジュールとの兼ね合い上、手が出せない場合がある
- テストがない箇所が多く、うかつに手をだせない
まとめ
既存のコードを書き換えていく課題はあるものの、新機能開発に関しては、フロントエンドとバックエンドの認識のズレがなくなり、以前に比べスムーズに開発が進められ、導入した価値があったと感じています。
最後に
弊社 Magic Moment では、フロントエンド・バックエンドにかかわらず全方位的にエンジニアを募集中です!Magic Momentに少しでも興味を持っていただけたら是非エントリーください!
8/30にはFindy様主催のイベントにMagic Momentから石田さんが登壇されます!
よろしければぜひご視聴ください!
さらに、こちらのイベントも8/29開催予定です!こちらはオンラインイベントです。Magic Momentの開発がどんなものか興味を持っていただいた方は是非ご参加ください!
Discussion