【じーあーるぴーしー】

gRPC とは?

最終更新:
💡 サービスの定義から通信コードを作り、遠隔のメソッドを呼ぶ

遠隔のサービスのメソッドを、呼び出し用コードを通じて利用するRPCフレームワーク。標準ではProtocol Buffersを使ってサービスやメッセージを定義し、HTTP/2による通信やストリーミングを扱う。

📌 このページのポイント
定義から通信コードを作り、遠隔で呼ぶ .proto 定義 サービス / メッセージの型 例:GetUser / User 生成 生成 クライアント スタブ 呼び出し用コード アプリから利用 サーバー 基盤コード +実処理を実装 メソッドを実行 要求 → ← 応答 標準:Protocol Buffers + HTTP/2 ブラウザ対応やストリーミングの種類は実装で確認
上の矢印は.protoからのコード生成。下の矢印はUnary呼び出しの要求と応答。サーバーの実処理は別途実装する。
ひよこ ひよこ
gRPCではどんな通信をするの?
ペンギン先生 ペンギン先生
遠隔のサービスのメソッドを、クライアントの呼び出しコードから利用するよ。標準ではProtocol Buffersで定義したメッセージをHTTP/2で送る。データ形式やコード生成が特徴だけれど、ほかのAPIより必ず高速、何倍速い、とは一律に言えない。実際のデータや処理、環境で測る必要があるんだ。
ひよこ ひよこ
Protocol Buffersの定義から何が作られるの?
ペンギン先生 ペンギン先生
.protoファイルにメッセージの型やサービスのメソッドを書くと、対応言語のデータ用コードやクライアントのスタブ、サーバー側の基盤コードを生成できるよ。サーバーが実際に行う処理は開発者が実装する。型の定義だけで、値の妥当性の確認や権限チェックまで完成するわけではないんだ。
ひよこ ひよこ
ペンギン先生 ペンギン先生
単発のUnaryは1リクエストと1レスポンス。Server streamingは1リクエストに複数レスポンス、Client streamingは複数リクエストに1レスポンス。Bidirectional streamingは両側が独立してメッセージ列を送る方式だよ。各方向の順序は保たれるけれど、送受信が必ず交互になるわけではないんだ。
ひよこ ひよこ
ブラウザからも同じように使える?
ペンギン先生 ペンギン先生
ブラウザではgRPC-Webなどの対応が必要になるよ。公式gRPC-Web実装はプロキシを通じてgRPCサービスへ接続する。対応するのはUnaryと一部の形式のServer streamingで、Client streamingとBidirectional streamingには対応していない。使う実装が必要な通信方式に対応しているか確認しよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「gRPC」って出てきたら「サービスの定義を共有して遠隔のメソッドを呼ぶ通信フレームワーク」と思えればだいたいOK!
📖 おまけ:英語の意味
「gRPC Remote Procedure Calls」 = gRPCリモートプロシージャコール
💬 RPCは遠隔手続き呼び出し。公式FAQではgRPC Remote Procedure Callsという、名前自身を含む再帰的な表現で説明しているよ

参考資料

← 用語集にもどる