【ジーアールピーシーウェブ】

gRPC-Web とは?

💡 ブラウザとgRPCの架け橋——翻訳官が間に立つことで、二つの言語が通じるようになる
📌 このページのポイント
gRPC-Web の通信フロー ブラウザ gRPC-Web クライアント プロキシ (Envoy等) 変換 HTTP/1.1→HTTP/2 バックエンド gRPC サービス HTTP/1.1 HTTP/2(gRPC) 両端でProtobuf(バイナリ)を利用
gRPC-Webはプロキシ経由でブラウザとgRPCサービスをつなぐ
ひよこ ひよこ

gRPCってブラウザから使えないの?

ペンギン先生 ペンギン先生

そうなんだよ。gRPCHTTP/2のストリームをフルに使うんだけど、ブラウザセキュリティや仕様の制約HTTP/2gRPCが必要とする形では使えないんだ。そこで生まれたのがgRPC-Webだよ。

ひよこ ひよこ

gRPC-Webはどうやってその問題を解決してるの?

ペンギン先生 ペンギン先生

ブラウザサーバーの間にEnvoyなどのプロキシを置いて、ブラウザからはHTTP/1.1互換の形式で通信し、プロキシがそれを本物のgRPCに変換してバックエンドに転送するんだよ。

ひよこ ひよこ

プロトコルバッファとかProtobufは使えるの?

ペンギン先生 ペンギン先生

使えるよ! gRPC-Webでも.protoファイルからクライアントコードを自動生成できるし、バイナリ形式のProtobufでやり取りできるから、型安全で効率的な通信ができるんだ。RESTJSONより軽量だよ。

ひよこ ひよこ

でも何か制限があるって聞いたけど?

ペンギン先生 ペンギン先生

うん、一方向のunary(1回リクエスト・1回レスポンス)とサーバーストリーミングは使えるけど、クライアントストリーミングや双方向ストリーミングgRPC-Webではまだ完全対応していないんだよ。リアルタイム双方向通信にはWebSocketを組み合わせることが多いね。

ひよこ ひよこ

ConnectっていうものもあるけどgRPC-Webと違うの?

ペンギン先生 ペンギン先生

Connect(Buf社製)はgRPC互換性を持ちつつ、ブラウザNode.jsからもプロキシなしで使えるように設計された新しいプロトコルだよ。gRPC-Webよりシンプルに導入できるから、最近は新規プロジェクトでConnectを選ぶケースも増えているんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
gRPC-Web」って出てきたら「ブラウザからgRPCを使うための仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「gRPC-Web」 = ウェブ向けgRPCプロトコル
💬 gRPCはGoogle Remote Procedure Callの略で、gRPC-WebはそのWeb対応版だよ。ブラウザのHTTP/2制約という壁を越えるために作られたんだよ
← 用語集にもどる