362 文字
2 分
gRPCはどこが嬉しいのか
gRPC は、Google が公開している RPC(Remote Procedure Call)フレームワークです。スキーマ定義から各言語のクライアント/サーバーコードを自動生成し、HTTP/2 の上で Protocol Buffers(バイナリ形式)を流す、というのが大まかな仕組みです。
何がいいのか
- スキーマ駆動:
.protoファイルにメソッドとメッセージを定義すると、各言語のスタブが自動生成されます。「インターフェースが先にある」ので、フロント/バック両方の実装ミスが減ります。 - バイナリで小さく速い:JSONより転送量が少なく、エンコード/デコードのコストも軽いです。
- HTTP/2 のフル活用:多重化されたストリームを使えるので、サーバーストリーミング・クライアントストリーミング・双方向ストリーミングが素直に書けます。
- タイムアウト・デッドライン・キャンセルが組み込み:分散システムを書くときに地味に効きます。
苦手なこと
- ブラウザから直接叩きにくい:HTTP/2 のトレーラーを使うため、素のブラウザJSからは叩けず、
gRPC-Webなどのブリッジが必要です。 - デバッグが手で叩きにくい:
curlでサクッと、というわけにはいきません。grpcurlなどのツール頼みになります。 - ヒューマンリーダブルでない:ペイロードがバイナリなので、ログを覗いて中身を読む、といった運用がしにくいです。
RESTとの使い分け
- 外向き/公開API、ブラウザクライアント → REST(あるいは GraphQL)
- 内部サービス間の高頻度通信、低レイテンシが効くところ → gRPC
「外はREST、中はgRPC」という棲み分けがマイクロサービスでは定番です。