スキーマ駆動開発
読み方: すきーまくどうかいはつ
スキーマ駆動開発とは
システム開発において複数のシステムを結合する際に共通となる標準的なスキーマを用いてインターフェースを設計し開発を進める手法の一つです。
WebAPIの定義記述においてはOpenAPI、プロトコルとしてGraphQL, gRPCなどが存在します。
スキーマ駆動開発の特徴
- 標準化
OpenAPIやGraphQL, gRPC等はそれぞれ標準的なフォーマットと処理系が定められており、そのフォーマットに従うことで異なるシステムの相互運用が可能となります。 - コード自動生成
OpenAPI定義やGraphQLスキーマなどからコードの自動生成が可能で、事前にインターフェースを定めることなくスキーマさえ定義されればインターフェースやサーバコード、クライアントコードの自動生成が出来ます。 - 実装とドキュメントの一致
システム開発においてドキュメントと実装が一致しないことは多々あり、異なるシステム間の結合において最も問題になりやすい箇所ですが、スキーマ自体でテストを行いスキーマからドキュメントを生成することで実装とドキュメントが分離することを防ぐことが出来ます。
スキーマファーストに注目があつまった経緯
HTTP APIにおけるRESTやSOAP、JSON, XMLなどシステム間のRPCにおけるレスポンスフォーマットやリクエストフォーマットは、様々ものが存在し標準化が難航していました。
REST/JSONの事実上の標準化に伴いリクエスト/レスポンスbodyのフォーマットが定まったことから近年標準化が一段階推し進みドキュメント記述方法の標準化(OpenAPI)やランタイムやクエリも含めたプロトコル(GraphQL, gRPC)が開発されスキーマからサーバコード、クライアントコード、ドキュメントまで自動生成が可能になる土壌が生まれ、スキーマファーストでの開発に注目が集まりました。
現場の声
OpenAPIはWebAPI仕様記述において事実上のデファクトとなっており、周辺エコシステムの発達具合から、今後も標準的な位置であることが予想されます。
GraphQL, gRPCはサーバランタイムとクエリレベルにおけるプロトコルのため必ずしも全てのユースケースに使用出来るわけではないが、Microservicesにおける複数のサービスのように、異なるシステム間を結合するためのアプローチとして有力な選択肢となりうるでしょう。
<執筆・監修>
アルサーガパートナーズ株式会社 DX技術用語集制作チーム サーバーサイドdiv.