コンピューターサイエンス:アルゴリズム / OS / ネットワーク / DB
gRPC と HTTP/2 利用
gRPC と HTTP/2 利用
このレッスンで分かること
- gRPC は HTTP/2 + Protocol Buffers のバイナリ RPC で、マイクロサービス間通信のデファクト
- Unary・Server Streaming・Client Streaming・Bidirectional の 4 パターンを 1 接続で多重化
- REST は「外向き API」、gRPC は「内向き API」と棲み分けるのが今のところ無難な選択
gRPC と HTTP/2 利用 とは
Protocol Buffers と HTTP/2 を使う gRPC の特徴を学びます。本レッスンでは、gRPC と HTTP/2 利用 の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。
REST vs gRPC 早見表
| 観点 | REST | gRPC |
|---|---|---|
| 表現形式 | JSON (テキスト) | Protocol Buffers (バイナリ) |
| トランスポート | HTTP/1.1 や HTTP/2 | HTTP/2 (HTTP/3 対応進行中) |
| スキーマ | OpenAPI (任意) | .proto (必須) |
| 型安全 | 弱い (OpenAPI で補強可) | 強い (生成コード) |
| 通信パターン | 主に Unary | Unary / Server / Client / Bidirectional Streaming |
| ブラウザ対応 | 容易 | gRPC-Web 経由が必要 |
| デバッグ | curl で簡単 | grpcurl など専用ツール |
| 主な適用 | 外向き API | 内部マイクロサービス、モバイル ⇄ サーバー |
このレッスンで学ぶこと
Google が開発したバイナリ RPC フレームワーク gRPC の仕組みと、なぜマイクロサービス間通信で人気なのかを学びます。
gRPC とは
gRPC は Google が開発した RPC (Remote Procedure Call) フレームワークで、現在は CNCF (Cloud Native Computing Foundation) のプロジェクトです。
特徴は次のとおりです。
- Protocol Buffers (Protobuf) でスキーマ定義 — IDL からクライアント / サーバーのコードを自動生成
- HTTP/2 ベース — 多重化、ヘッダー圧縮の恩恵
- バイナリ転送 — JSON より高速・コンパクト
- 4 種類の通信パターン — Unary, Server Streaming, Client Streaming, Bidirectional Streaming
- 多言語対応 — Go, Java, Python, JS, Rust など主要言語をカバー
RPC とは
RPC はリモートにある関数を、ローカル関数のように呼び出す抽象化です。クライアントから見ると、ネットワーク越しのサーバーの関数を「普通の関数呼び出し」のように使えます。
REST と比べると、関数呼び出しのモデルの方が直感的で、メソッド名やパラメータが自然に決まるという利点があります。
Protocol Buffers (Protobuf)
gRPC のスキーマ言語は Protobuf です。.proto ファイルでメッセージとサービスを定義します。
プレーンテキスト
syntax = "proto3";
message User {
string id = 1;
string name = 2;
int32 age = 3;
}
service UserService {
rpc GetUser (GetUserRequest) returns (User);
}
message GetUserRequest {
string id = 1;
}このファイルから protoc で各言語向けのクライアント / サーバーコードを生成。クライアントは生成されたメソッドを呼ぶだけで、リクエストの送信・レスポンスの受信が完結します。
4 つの通信パターン
| パターン | リクエスト | レスポンス | 用途 |
|---|---|---|---|
| Unary | 1 | 1 | 普通の呼び出し |
| Server Streaming | 1 | N | サーバーから連続でデータを返す (リアルタイム配信) |
| Client Streaming | N | 1 | クライアントから連続でアップロード (大量データ送信) |
| Bidirectional | N | N | 双方向ストリーミング (チャットなど) |
HTTP/2 のストリーム多重化のおかげで、これらが 1 接続上で実現します。
gRPC のストリーミングと WebSocket
gRPC の双方向ストリーミングは WebSocket と近い使い方ができます。サーバー間で型安全な双方向通信を組みたいときは gRPC、ブラウザから直接使いたいときは WebSocket、と棲み分けています。
REST vs gRPC
| 観点 | REST | gRPC |
|---|---|---|
| 表現形式 | JSON | バイナリ (Protobuf) |
| 速度 | 中 | 高 |
| 型安全 | 弱い (OpenAPI を使えば強くなる) | 強い (生成コード) |
| ブラウザ対応 | 容易 | gRPC-Web を経由する必要あり |
| デバッグしやすさ | 容易 (curl OK) | やや難しい (grpcurl など) |
| マルチランゲージ対応 | OK | OK |
REST はクライアントが多種多様 (ブラウザ・curl・任意の HTTP クライアント) で開発しやすい。gRPC は内部マイクロサービス間通信や、モバイル⇄サーバーの効率重視通信で輝きます。
gRPC-Web
ブラウザは生 HTTP/2 のトレーラやストリーミング機能を直接使えません。そこで Envoy などのプロキシが gRPC-Web を gRPC に変換し、ブラウザから gRPC サービスを使えるようにします。
ただし制約 (双方向ストリーミング不可など) があるため、ブラウザ向け API は REST or GraphQL のままで、内部だけ gRPC、という構成が今も多いです。
エラーモデルとステータスコード
gRPC は独自のステータスコードを使います。
- OK
- CANCELLED
- INVALID_ARGUMENT
- DEADLINE_EXCEEDED
- NOT_FOUND
- PERMISSION_DENIED
- INTERNAL
- UNAVAILABLE
HTTP のステータスコードとは別体系なので、HTTP リバースプロキシを経由する場合はマッピングを意識する必要があります。
Connect プロトコル
Buf 社が開発した Connect は gRPC、gRPC-Web、HTTP/JSON を同じインターフェースで扱えるようにする新しいプロトコル群です。ブラウザ・モバイル・サーバー間で同じスキーマを使いたいときに採用が進んでいます。
まとめ
このレッスンの要点は、Protobuf スキーマと生成コード / 4 つのストリーミング / gRPC-Web の制約 の 3 点です。実務でこれらを切り分けて説明できるようになると、設計レビューや障害対応の精度が一段上がります。
理解度チェック
Q. gRPC が REST より優れている主要なメリットはどれ?
- ブラウザから直接呼びやすい
- 型安全な自動生成コードと、HTTP/2 を活かしたバイナリ多重通信が可能
- curl で簡単にデバッグできる
- 認証機能が組み込まれている
答えを見る
正解は 2。gRPC の強みは .proto からの型安全な生成コードと、HTTP/2 多重化 + Protobuf バイナリによる高速通信。一方、ブラウザ直接呼び出しやデバッグ容易性は REST の方が上です。
出典 (References)
最終更新: 2026-05-28
関連レッスン
よくある質問
Q. GET と POST はどう使い分けますか?
A. 「取得して副作用がない」なら GET、「作成・更新など状態を変える」なら POST が原則です。GET は URL にパラメータが入りキャッシュも効きますが、POST はボディに乗せられ大きなデータも送れます。冪等性も GET は持ち、POST は持たないという違いがあります。
Q. ステータスコードは何を返すべき?
A. 成功は 2xx、リダイレクトは 3xx、クライアントエラーは 4xx、サーバーエラーは 5xx が大原則です。新規作成は 201、認証失敗は 401、権限不足は 403 を返すと REST 慣習に沿った設計になります。200 で全部返すのは避けてください。
Q. REST と GraphQL の違いは?
A. REST はリソース単位のエンドポイント、GraphQL は単一エンドポイントでクエリ言語を使って欲しいデータを指定します。フロントの要件が頻繁に変わるなら GraphQL、シンプルな CRUD なら REST がメンテしやすいことが多いです。
次のレッスン
次は データベースとは で、Protocol Buffers と HTTP/2 を使う gRPC の特徴を学びます を学びます。
事前確認 — 進む前に次の 3 つができることを確認しましょう。
- gRPC の要点を自分の言葉で説明できる
- このレッスンの最小コード (または操作手順) を見ずに書ける
- 練習問題やクイズで間違えた箇所を読み直して理解した
理解度チェック (30 秒)
Q. gRPC とは何か、1 文で説明してください。
A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。
関連レッスン
復習ミニクイズ
gRPC のスキーマ定義に使う言語はどれですか