ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
概要
gRPC は Google が開発・公開している RPC (Remote Procedure Call: 遠隔手続き呼び出し) フレームワークです。RPC とは「ネットワーク越しの関数を、あたかも手元の関数のように呼び出す」仕組みのことで、gRPC はその通信に HTTP/2 を、データ形式に Protocol Buffers(.proto) を採用することで、高速・低オーバーヘッド・多言語対応を実現しています。REST/JSON な Web API に比べてコンパクトで高速なため、特にマイクロサービス間の内部通信で広く使われます。親セクションは Web通信プロトコル です。
仕組み
gRPC の中心にあるのは IDL (インターフェース定義言語) としての .proto ファイルです。ここにサービス (呼び出せるメソッド群) とメッセージ (やり取りするデータ構造) を定義します。
- コード生成:
.protoから protoc コンパイラが各言語のクライアント/サーバの雛形コードを自動生成します。開発者はネットワーク処理を書かずに、生成された関数を呼ぶだけで通信できます。 - Protocol Buffers でシリアライズ: 送受信するデータは protobuf でバイナリ化されます。JSON より小さく・速く・型が明確で、フィールド番号によるスキーマ進化 (前方/後方互換) もしやすくなっています。
- HTTP/2 上で多重化・ストリーミング: 土台が HTTP/2 のため、1 接続で多数の呼び出しを多重化でき、ストリーミングも自然に扱えます。
gRPC のメソッドには 4 つの通信パターンがあります。1 リクエスト 1 レスポンスの ユーナリ、サーバが連続して返す サーバストリーミング、クライアントが連続して送る クライアントストリーミング、双方が同時に流す 双方向ストリーミング です。
実用例
まずサービスとメッセージを .proto に定義します。タグ記号などはコード内で正しく表示されるよう記述しています。
# greeter.proto (IDL)
syntax = "proto3";
package greeter;
service Greeter {
// ユーナリ呼び出し
rpc SayHello (HelloRequest) returns (HelloReply);
// サーバストリーミング
rpc SayHelloStream (HelloRequest) returns (stream HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
# .proto から各言語のコードを生成 (例: Python)
python -m grpc_tools.protoc -I. \
--python_out=. --grpc_python_out=. greeter.proto
# 生成コードを使った呼び出し (擬似)
# stub = GreeterStub(channel)
# reply = stub.SayHello(HelloRequest(name="world"))
# print(reply.message)
クライアントは生成された stub.SayHello(...) をローカル関数のように呼ぶだけで、内部的に HTTP/2 + protobuf で通信が行われます。
主な用途
- マイクロサービス間通信: サービス同士を低遅延・低オーバーヘッドでつなぐ内部 API として最有力。
- 多言語混在環境: Go・Java・Python・Node など異なる言語のサービスを、共通の
.protoで型安全に連携させる。 - ストリーミング処理: ログ・センサー・株価など連続データの送受信に双方向ストリーミングを使う。
- モバイル/IoT のバックエンド: コンパクトなバイナリで通信量を抑えたい場面。
REST/JSON との比較
| 項目 | gRPC | REST/JSON |
|---|---|---|
| データ形式 | Protocol Buffers (バイナリ) | JSON (テキスト) |
| 土台 | HTTP/2 | 主に HTTP/1.1・HTTP/2 |
| スキーマ | .proto で厳格に定義 | 緩い (OpenAPI 等は任意) |
| ストリーミング | 双方向まで対応 | 基本は要求-応答 |
| ブラウザ直接利用 | 不可 (要 gRPC-Web) | 容易 |
| 人間可読性 | 低い (バイナリ) | 高い |
注意点
- ブラウザから直接は使えない: ブラウザは生の gRPC を扱えないため、Web フロントからは gRPC-Web とプロキシ (Envoy 等) が要る。公開 Web API には REST の方が無難なことも多い。
- バイナリでデバッグしにくい: 中身が protobuf なので、JSON のようにそのまま目視できない。grpcurl などの専用ツールを使う。
- .proto の互換管理: フィールド番号の使い回しや型変更はスキーマ互換を壊す。番号は欠番化し、再利用しないなどの運用ルールが要る。詳しくは Protocol Buffers(.proto) を参照。
- 学習コストとインフラ対応: HTTP/2 前提のため、ロードバランサや監視が HTTP/2・gRPC に対応している必要がある。
関連リンク
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- 【django】ログイン 認証機能 2026-09-08 03:22:09
- MySQL ERROR 1063 Incorrect column specifier for column|原因と直し方 2026-09-08 03:11:09
- 【PHPエラー】Object of class stdClass could not be converted to string 2026-09-07 07:46:04
- Julia Genie ローカル開発サーバ起動完全ガイド 2026-09-07 07:46:04
- Wi-Fi とは|規格と世代(Wi-Fi 4〜7)・周波数帯・CSMA/CA・WPA3 NEW 2026-09-07 07:45:13
- set コマンドでシェルオプションと位置パラメータを操作 | bash 2026-09-07 07:45:13
- JPEG(.jpg/.jpeg)画像形式の完全ガイド — 仕様・マジックナンバー・他形式との比較・EXIF 2026-09-07 07:45:13
- UE5 Get Overlapping Actorsで特定クラスだけ処理|Class Filter・Cast To 2026-09-07 07:45:13
- Linuxで特定拡張子のファイルを再帰削除|find -deleteの安全手順 2026-09-07 07:45:13
- Django CBVでテンプレートに値を渡す|get_context_data・extra_context 2026-09-07 07:45:13
- Linuxで複数ファイルの文字列を一括置換|find・sed・xargsの安全手順 2026-09-07 07:45:13
- Laravelルートグループ|prefix・middleware・nameで一括管理 2026-09-07 07:45:13
- Linux whichコマンドの使い方|絶対パス取得とtype・command -vの違い 2026-09-07 07:45:13
- Linux catコマンドの使い方|行番号表示・複数ファイル連結 2026-09-07 07:45:13
- unable to execute 'gcc': No such file or directory 2026-09-07 07:45:13
コメントを削除してもよろしいでしょうか?