

高岡智則
年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)
grpc-webとは何か
grpc-webとはウェブブラウザとサーバー間の通信を gRPC の形で行えるようにする技術です。grpc-web はブラウザとバックエンドの窓口として機能し、従来の REST と比べて高速な通信やストリーミングの能力を提供します。小学生でも分かるポイントは「ブラウザから直接 gRPC を使えるわけではないが、grpc-web を使えば gRPC の良さをウェブでも使える」という点です。
なぜ grpc-web が必要なのかというと、ウェブアプリは主に HTTP/1.1 や HTTP/2 の技術を使いますが、gRPC は本来独自の二進法のフォーマットとプロトコルを使います。これをそのままブラウザに渡してしまうと動作しません。そこで grpc-web が中間役を果たし、ブラウザのリクエストを gRPC の呼び出しへ翻訳します。通常はエンジニアが用意したサーバー側の backing サービスと、Envoy などの中間のプロキシを組み合わせて使います。
仕組みと動作のイメージ
実際の動作は次のようなイメージです。ブラウザの JavaScript アプリは grpc-web ライブラリを使ってリクエストを作成します。リクエストは通常の HTTP/1.1 または HTTP/2 経由で中間のプロキシへ送られます。プロキシは gRPC の形式に翻訳してバックエンドのサービスへ転送します。バックエンドは再びプロキシを通してレスポンスを返し、プロキシが grpc-web の形式へ戻してブラウザへ返します。これにより「ウェブの安全性と gRPC の高速性」が両立します。
この仕組みを動かすためにはいくつかの前提があります。まず前提として 認証と CORS の設定を正しく行う必要があります。グラフのような大規模なサービスであっても、クライアントとサーバーの間に正しいヘッダや証明書がないと通信は拒否されます。また、サーバー側とクライアント側でデータのシリアライズ形式を揃えること、つまり protobuf を使ったメッセージ定義を共有することが大切です。
導入の基本ステップ
| ステップ | フロントエンドに grpc-web ライブラリを導入する |
|---|---|
| ステップ | バックエンドには gRPC サービスを準備する |
| ステップ | Envoy などのプロキシを設定して grpc-web に対応させる |
| ステップ | CORS と認証の設定を整える |
grpc-web のメリットと注意点
| メリット | 高速な通信とストリーミングのサポートをウェブで利用できる |
|---|---|
| デメリット | 設定が複雑になることがある、 Envoy など中間ソフトウェアが必要になる場合が多い |
まとめとして、grpc-web を使うことでウェブアプリとバックエンドの gRPC サービスを効率よく結ぶことができます。導入にはネットワークの設定やセキュリティの考慮が伴いますが、正しく設定すればクライアント側の開発生産性が高まり、データ通信の品質も安定します。初心者の方はまず公式ドキュメントの導入ガイドから手順を追い、ローカル環境で動かしてみるのがおすすめです。
学習のポイントとしては、まず grpc-web を使うための用語を押さえることです。gRPC の基本概念、ストリーミングの仕組み、protobuf の定義ファイルの意味を理解すると入り口が見えてきます。
よくある質問として「ブラウザだけで完結しますか」「エンドポイントはどこに置くべきですか」などがあります。前者は基本的にはバックエンドのサービスとプロキシが必要であることを理解すること、後者はセキュリティとアクセス権限の適切な設定が求められることを覚えておくとよいでしょう。
最終的に、grpc-web はウェブと gRPC の良さを結ぶ強力な技術です。正しく設定すれば軽快な通信と柔軟な API 設計を両立できます。
この技術を学ぶ上での次のステップとしては、公式ドキュメントの導入ガイドを読み、ローカル環境でのミニアプリを作ってみることです。実際に動かしてみると、リクエストとレスポンスがどのように流れているのかが体感できます。
さらに深掘りしたい人には、 protobuf の定義ファイルの設計方法、エラー処理の設計、認証とセキュリティの強化、そしてパフォーマンスの最適化などのテーマがおすすめです。これらを順番に学ぶことで、grpc-web を活用した堅牢なウェブAPIを作れるようになります。
grpc-webの同意語
- gRPC-Web
- ブラウザから直接gRPCを利用できるようにするための規格・プロトコル。WebクライアントとgRPCサーバーを結ぶ橋渡しをします。
- gRPC Web
- 同じ概念の別表記。ブラウザ環境でのgRPC通信を可能にする技術です。
- grpc-web
- 小文字の表記の同義語。WebブラウザとgRPCサーバーをつなぐ通信仕様。
- gRPC for the Web
- ウェブ上でgRPCを動かすことを指す表現。Web向けの実装・仕様全般を指します。
- Web向けgRPC
- Web(ブラウザ)環境で使えるようにするgRPCのこと。フロントエンドとバックエンドをgRPCで結ぶ方法。
- ブラウザ用gRPC
- WebブラウザからgRPCを呼び出せるようにする仕組み。
- Webブラウザ対応gRPC
- Webブラウザをクライアントとして使うためのgRPC対応技術のこと。
- gRPC-Webプロトコル
- grpc-webで定義された通信プロトコルの名称。HTTP/1.1ベースのブリッジ規格を含みます。
- grpc-webプロトコル
- 同様にgrpc-webで使われるプロトコルの表記。
grpc-webの対義語・反対語
- REST API
- HTTP/1.1を前提としたリソース指向のウェブAPI。リクエストごとにURLリソースを操作し、主にJSONやXMLでデータをやりとりします。grpc-webのバイナリRPC・ストリーミング設計とは性質が異なる、初心者にも広く使われている対照的な実装例です。
- SOAP Webサービス
- XMLベースのRPCスタイルで、WSDLに基づく契約を重視します。HTTP上で動作しますが、重厚な仕様とエコシステムを持ち、学習コストが高い一方で企業向けの信頼性が豊富です。
- XML-RPC
- XMLを用いたシンプルなRPC形式。HTTPでリクエストとレスポンスを送るだけの軽量な仕組みで、テキストベースのRPCの代表格です。
- JSON-RPC
- JSONを用いたRPC形式。HTTPを介してリクエストとレスポンスをやりとりする、テキストベースのRPCで、REST寄りの使い方もできます。
- GraphQL API
- クライアントが必要なデータを指定するクエリ言語。データ取得の柔軟性が高い一方で、gRPCのような型安全なRPC契約とは異なる設計思想です。
- HTTP/1.1ベースAPI
- HTTP/1.1を前提にしたAPI設計。HTTP/2の特徴(多重化・ヘッダ圧縮・サーバー推送)を積極的には活用しないケースが多く、gRPC-webの高速通信とは一線を画します。
- テキストベースRPC
- データ交換にテキストフォーマット(JSON/XML)を使うRPC。Protobufのバイナリ形式とは異なり、可読性は高いがデータ量が大きくなることがあります。
- ストリーム非対応のリクエスト-レスポンスAPI
- 1回のリクエストに対して1回のレスポンスを返す従来型のAPI。gRPCのストリーミング機能(双方向・サーバー/クライアントストリーミング)には対応していません。
- WebSocket/長時間接続RPC
- 長時間開いた常時接続を前提とするRPC。リアルタイム性には適しますが、gRPC-webのHTTP/2ベースの設計とは異なる通信モデルです。
- 従来型エンドポイント指向API
- エンドポイントごとに個別の操作を行う従来型のWeb API。設計が直感的で初心者向けですが、gRPCの契約型・バイナリRPCとは異なるアーキテクチャです。
grpc-webの共起語
- gRPC
- Google が開発した高性能な RPC フレームワーク。多言語対応・ストリーミングが特徴。
- grpc-web
- ブラウザから gRPC サーバーへ接続するためのウェブ向けプロトコル。通常は Envoy などのプロキシを介して gRPC に変換します。
- HTTP/2
- gRPC の通信基盤となる軽量なプロトコル。ストリーミング機能をネイティブにサポートします。
- HTTP/1.1
- grpc-web が HTTP/1.1 やプロキシ経由で動作するケースがあり、ブラウザの制約を回避する役割を果たします。
- Protobuf
- Protocol Buffers の略。データのシリアライズ形式で、メッセージを効率的に送受信します。
- Protocol Buffers
- 同義語。Google が開発したデータ定義・シリアライズ形式。
- protoファイル
- サービス定義を記述するファイル。サービス名・メソッド・リクエスト/レスポンス型を定義します。
- protoc
- Protocol Buffers のコンパイラ。proto ファイルから各言語のコードを生成します。
- protoc-gen-grpc-web
- grpc-web 用のコード生成プラグイン。クライアント側のスタブを生成します。
- Content-Type: application/grpc-web
- grpc-web でよく使われるコンテンツ種別。
- Content-Type: application/grpc-web-text
- grpc-web のテキスト版(base64 でエンコード)で使われる Content-Type。
- Content-Type: application/grpc
- 通常の gRPC(HTTP/2)で使われる Content-Type。
- grpcwebproxy
- grpc-web と gRPC の橋渡しをするプロキシツール。HTTP/1.1 での変換を行います。
- Envoy
- Envoy Proxy は grpc-web の翻訳をサポートするリバースプロキシ。ブラウザと gRPC サーバの間をつなぐ役割。
- NGINX
- NGINX でも grpc-web を扱える設定があり、プロキシとして利用されます。
- CORS
- クロスオリジンリソース共有。ブラウザから grpc-web を呼び出す際に設定が必要な場合があります。
- クロスオリジンリソース共有
- 同義語。別ドメイン間の通信を許可する設定。
- Webブラウザ
- クライアントとして grpc-web を利用する環境。
- JavaScript
- ブラウザ側のクライアント実装で主に使われる言語。
- TypeScript
- JavaScript に型情報を追加する言語。grpc-web のコード生成でもよく使われます。
- Fetch API
- ブラウザからサーバへ非同期通信を行う標準 API。grpc-web の実装で使われることがあります。
- XMLHttpRequest (XHR)
- 古くからあるブラウザの通信手段。grpc-web の一部実装で利用されることがあります。
- google-protobuf
- JavaScript 用の Protobuf ライブラリ。grpc-web でデータの入出力に使われます。
- Protobuf.js
- JavaScript 用の Protobuf 実装ライブラリ。protobuf の操作を行います。
- サーバーサイド
- バックエンド側の gRPC サーバ実装(Go, Java, C++, C# など)。
- クライアントサイド
- ブラウザ側の grpc-web クライアント実装。
- 単一リクエスト/レスポンス (Unary)
- gRPC の基本形で、1 回のリクエストに対して 1 回のレスポンスを返します。
- サーバーストリーミング
- サーバーが連続してデータを返すストリーミング形式。
- クライアントストリーミング
- クライアントが連続してデータを送信し、最終的にサーバーから1つのレスポンスを受け取る形式。
- 双方向ストリーミング
- クライアントとサーバーが同時にデータを送受信する形式。
- gRPC-Gateway
- gRPC と REST/HTTP のブリッジ。grpc-web とは別の用途。
- Cloud Endpoints / Endpoints
- Google Cloud の API ゲートウェイ。gRPC の公開にも利用されます。
- Istio / Linkerd
- サービスメッシュ。gRPC/grpc-web のトラフィック管理をサポートします。
- Load balancing
- トラフィックを複数のバックエンドに分散させる機能。
- TLS / HTTPS
- 通信の暗号化。gRPC/web は TLS を前提とするケースが多いです。
- JWT / OAuth2
- 認証・認可のトークンを用いたセキュリティ手法。grpc-web でも利用されます。
- grpcurl
- GRPC サービスをコマンドラインから叩くツール。grpc-web 対応もあることがあります。
- BloomRPC / Insomnia / Postman
- gRPC クライアントを試すツール。grpc-web の対応状況はツールに依存します。
- proto3
- Protobuf の最新仕様バージョン。フィールドのデフォルト値などが定義されています。
grpc-webの関連用語
- grpc-web
- ブラウザから gRPC を呼び出すためのブリッジ規格とクライアントライブラリ群。ゲートウェイ経由でバックエンドの gRPC サーバへ変換します。
- gRPC
- Google が開発した高性能 RPC フレームワーク。HTTP/2 上で動作し Protobuf をデフォルトの IDL とシリアライズ形式として使用します。
- Protocol Buffers (Protobuf)
- Google が開発したデータのバイナリシリアライズ形式。 proto ファイルでメッセージとサービスを定義します。
- proto ファイル
- Protobuf の定義ファイル。メッセージ型とサービス RPC の定義を記述します。
- Unary RPC
- 1 回のリクエストに対して 1 回のレスポンスを返す通信パターンです。
- Server Streaming RPC
- 1 回のリクエストに対してサーバが複数のレスポンスをストリームで返します。
- Client Streaming RPC
- クライアントが複数のリクエストをストリームとして送信し、サーバが1 回のレスポンスを返します。
- Bidirectional Streaming RPC
- クライアントとサーバが双方向にストリームで通信します。
- HTTP/2
- gRPC の主な通信プロトコル。ヘッダ圧縮や複数ストリームが同時並行で動作します。
- HTTP/1.1
- 一部の gRPC Web 実装やゲートウェイで使われることがある通信形態です。
- gRPC-Web プロトコル
- ブラウザとバックエンド gRPC 間をつなぐ規約。外側は HTTP/1.1 や Web サーバ経由で gRPC へ変換します。
- grpcwebproxy
- gRPC Web をネイティブな gRPC に変換するオープンソースのプロキシです。
- Envoy
- 高機能なリバースプロキシで gRPC Web のゲートウェイとしてよく使われます。
- Nginx
- 設定次第で gRPC Web の受け口として利用できるリバースプロキシです。
- protoc
- Protocol Buffers のコード生成ツール。proto から各言語用のコードを生成します。
- protoc-gen-grpc-web
- grpc-web 用のコード生成プラグイン。JavaScript/TypeScript クライアントコードを生成します。
- protoc-gen-go
- Go 言語用の Protobuf/GRPC コード生成プラグインです。
- protoc-gen-grpc-java
- Java 用の GRPC コード生成プラグインです。
- grpc-web JavaScript
- ブラウザ向けの grpc-web クライアントライブラリ群の総称です。
- grpc-web TypeScript definitions
- TypeScript で使う型定義です。型安全に grpc-web を利用できます。
- Metadata
- RPC 呼び出し時の追加情報を含むメタデータ。認証トークンなどを送るのに使います。
- Deadline / Timeout
- リクエストの有効期限を設定します。遅延時のタイムアウトとして利用します。
- TLS / mTLS
- 通信を TLS で暗号化すること TLS は基本 機。mTLS は双方認証を行います。
- CORS
- クロスオリジンリソース共有。ブラウザからの grpc-web 呼び出しには適切な CORS 設定が必要です。
- Content-Type: application/grpc-web
- gRPC‑Web のバイナリ用コンテンツタイプです。
- Content-Type: application/grpc-web-text
- gRPC‑Web のテキスト用コンテンツタイプです(Base64 など)。
- Content-Type: application/grpc
- ネイティブな gRPC 通信のコンテンツタイプです。
- Service
- proto ファイル内で定義される RPC の集合であるサービスのことです。
- Message
- proto ファイル内で定義されるデータ型のことです。
- RPC
- サービス内のリモート手続きの呼び出し単位です。
- gRPC サーバ
- gRPC のリモート手続きを提供するサーバの実装です。
- Client stubs
- クライアント側の呼び出しコードでリモート RPC を呼ぶための代理です。
- Server stubs
- サーバ側の受け口実装に対応するコードです。
- Interceptors
- リクエスト・レスポンスの前後に共通処理を挟む機能です(認証・ロギングなど)。
- Transcoding
- REST HTTP API と gRPC の間でデータを変換する技術です。
- gRPC-Gateway
- REST/HTTP API を gRPC に変換するゲートウェイの一つの実装です。
- Load balancing
- 複数バックエンドへリクエストを分散する仕組みです。gRPC でも重要です。
- xDS
- 動的なサービスディスカバリとロードバランシングを実現する通信プロトコル/API群です。
- Istio
- サービスメッシュの代表的な実装。gRPC コミュニケーションの管理にも対応します。
- Reflection
- サーバが提供するサービス情報を動的に照会できる機能です。
- grpclb
- gRPC のロードバランサ機能の名称や実装の総称です。
- proto3
- Protobuf の現代的な仕様でデフォルトは proto3 の文法を用います。
- Protobuf vs JSON
- Protobuf はバイナリ形式で高速・省容量、JSON はテキスト形式で人間が読みやすいという違いです。



















