🐡

gRPCの定義ファイルprotoをどう管理するか

2021/09/02に公開

gRPCの定義ファイルである、.protoファイルは複数のリポジトリで参照する必要があるので管理方法にどういう戦略があるのか調べることにした。

例えば、web clientから、backendのgRPCメソッドをcallするとき、web client側でも.protoファイルからインターフェース周りのコードを自動生成したい。

モチベーションは以下と全く同じ。

gRPCはプロトコル定義ファイル(.proto)から生成したプログラムをもとにサーバとクライアントに分かれ実装していくことになる。Microservicesではサーバとクライアントが別レポジトリに分かれ開発を行うことが多い。それぞれのレポジトリではマスタの.protoファイルを何処に置いて参照すれば良いだろうか。この課題は言語が違うクライアントとサーバ間でも同じことが言えるだろう。

https://blog.soushi.me/entry/2017/07/06/122307/

https://suzan2go.hatenablog.com/entry/2018/03/19/092509

いろんなサイト

https://speakerdeck.com/line_developers/starting-grpc?slide=49

https://medium.com/stackpulse/grpc-in-practice-directory-structure-linting-and-more-d4d438ac4f86

https://qiita.com/nakaryooo/items/d71d2cb5f5cd44b052ee

proto ファイルは一つの GitHub リポジトリ上で管理していて、他のサービスのものも一元管理されています。
proto ファイル用のリポジトリに PR を作成し、push されたら各種言語の protbuf モジュールが生成される仕組みになっています。

https://engineering.mercari.com/blog/entry/2018-07-11-180500/

protodepというツールがあるらしい

https://github.com/stormcat24/protodep

モチベーションのところにこう書いてある。

In building Microservices architecture, gRPC with Protocol Buffers is effective. When using gRPC, your application will depend on many remote services.
If you manage proto files in a git repository, what will you do? Most remote services are managed by git and they will be versioned. We need to control which dependency service version that application uses.

https://soichisumi.net/2019/05/managing-proto-files-with-protodep/

Discussion