[Day 1: B-8] Rails meets Protocol Buffers - For Schema First Development


yhirano55
yhirano55 commented 5 months

登壇者: 株式会社ディー・エヌ・エー 越智 琢正

フロントエンドとバックエンドのチームが分かれて開発する場合、チーム間のインターフェースであるAPIの情報共有は、正確性や効率性の点で難しい場合があります。そして、一般的なWebアプリケーションの開発だけではなく、ゲームのバックエンドの開発においても同様の課題が存在します。

このセッションでは、このような課題に対してのSchema First Developmentの有用性、および、ゲーム開発への適用の一例として、Rails と Protocol Buffers を組み合わせた開発手法を紹介します。


  • このセッションに関する質問を募集中です
  • 事前に聞きたいことがあれば、何でも書き込んでください。
  • 質問への回答はお約束できません。あらかじめご了承ください

Like(0)

Questions and feedbacks (6)

aeroastro
aeroastro commented 5 months

命名変更以外の非互換 schema 変更を伴う場合の対応はどのように行っていますか?(versioning?)

まず、APIの出力に対して、新しい field を追加するという場合は、スキーマとしての互換性は失われますが、SDKを利用するコードに修正は必要無いため、そのまま追加を行います。

次に、APIの入力に対して、新しい field を増やすという場合は、スキーマとしての互換性は失われますが、バックエンド側で初期値を与えてあげることで、旧スキーマを参照する SDK からのアクセスも同一エンドポイントでハンドリング可能であるため、そのまま追加を行う場合が多いです。

fieldの削除等、 schema だけでなく、 SDK I/F としても互換性が失われるものについては、開発フェーズや、利用度合い等、様々な事情を考えた上で、様々な策が取られます。(詳しく説明すると非常に長くなってしまうので、すみませんが、今回は割愛させてください。)

これらが不適切となる運用段階での大幅な変更(大幅なschema変更や内部ロジック変更等)がある場合には、エンドポイントベースでの versioning を行 う場合があります。schemaから生成されるコードと、SDKの外部I/Fの間に層が存在することによって、SDK I/F としては同一のままになる場合もあります。また、APIの特性によっては、ロジックやデータのバージョンを示す field をスキーマ内に持つことで、新・旧の互換性を保持しているものもあります。

Like(0)

aeroastro
aeroastro commented 5 months

gRPCの利用は検討されたのでしょうか?

はい。検討しました。 しかし、プロジェクト当初は、RESTfulを選択することによる恩恵が大きいということで、開発者の意向として RESTful が選択されました。

これらの背景をより詳しく見ていくと以下のようになります。

  • RPC or RESTful という文脈においては、特に Rails においては、 RESTful を利用することによる生産性向上が大きかった。
  • そもそも、検討時における gRPC は、エコシステムも含め、今のように成熟したものではなかった。

また、SDK において開発者に使いやすい I/F を提供したいという都合上、カスタムのコードジェネレータを設計・実装する必要があるという部分は 、当時、仮にgRPCを導入していた世界線であっても、あまり楽にはならなかったのではないかと推測されます。

Like(0)

aeroastro
aeroastro commented 5 months

モックのAPIやAPIドキュメントを作る作業はフロントエンドチームとバックエンドチームが共同で作る体制でしょうか?

はい。案件ごとの差はありますが、共同で作る体制が多いです。 例えば、満たすべき要件に対して両者で話し合いながら概念設計を進め、その結果をスキーマに反映し、モックのAPIやAPIドキュメントを作っていきます。バックエンドチーム、フロントエンドチームが、それぞれの得意な領域から、設計に対してフィードバックしていきます。設計の為のたたき台を作ったりする部分や、設計結果をスキーマに落とし込み、APIとして利用できるようにする部分はバックエンドチームが担当する場合が多いです。

APIの規模や難易度が大きくなるほど、よりスキーマ確定前の設計時の共同作業に比重が置かれる傾向があります。

Like(0)

hshimoyama
hshimoyama commented 5 months

命名変更以外の非互換 schema 変更を伴う場合の対応はどのように行っていますか?(versioning?)

Like(0)

katsuma
katsuma commented 5 months

gRPCの利用は検討されたのでしょうか?

Like(0)

bake0937
bake0937 commented 5 months

モックのAPIやAPIドキュメントを作る作業はフロントエンドチームとバックエンドチームが共同で作る体制でしょうか?

Like(0)

Create Comment

Please sign in to comment.

Sign in with GitHub
This software is available as open source under the terms of the MIT License.
Copyright © 2018 Yoshiyuki Hirano