TL;DR
Google が 2015 年に OSS 化した、RPC のためのプロトコル。データ形式に Protocol Buffers、通信に HTTP/2 を使う。
なぜ必要か
データをバイナリにシリアライズして送るので、送信するデータ量が減り、高速に通信できる。型付きのデータをやり取りでき、特定の言語やプラットフォームにも依存しない。そのため、次のような場面に向いている。
- マイクロサービス間の通信: 複数の言語やプラットフォームで構成されることがある。バックエンドどうしであれば、gRPC の恩恵を多く受けられる
- モバイルのユーザが使うサービス: 通信量を減らせるので、通信容量の制限にかかりにくい
- 通信速度が求められる場面
仕組み
Protocol Buffers は IDL の役割を持ち、定義からサーバとクライアントに必要なコードを自動生成できる。開発は Schema first で進める。
- Protocol Buffers のファイル(proto ファイル)を書く
- proto ファイルをコンパイルして、サーバとクライアントのコードを生成する
- 生成されたコードを使って、機能を実装する
公式に対応している言語は C#(.NET)、C++、Dart、Go、Java、Kotlin、Node.js、Objective-C、PHP、Python、Ruby である。