スキーマ駆動開発
目次
スキーマ駆動開発<読み方:すきーまくどうかいはつ>
システム開発において複数のシステムを結合する際に共通となる標準的なスキーマを用いてインターフェースを設計し開発を進める手法の一つです。
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技術用語集制作チーム