gRPC - 高性能RPCフレームワーク

ネットワーク技術 | IT用語集

gRPCとは

gRPC(Google Remote Procedure Call)は、Googleが2015年にオープンソースとして公開した高性能なRPC(Remote Procedure Call)フレームワークです。あたかもローカルの関数を呼び出すかのように、ネットワーク越しに別のサーバー上の関数を実行できる仕組みを提供します。

gRPCは、Protocol Buffers(protobuf)によるバイナリシリアライゼーションとHTTP/2プロトコルによる多重化・ストリーミングを基盤としており、JSON/HTTPベースのREST APIと比較して5〜10倍の通信速度を実現します。Google社内では「Stubby」という名前で10年以上運用されていた技術がベースとなっており、毎秒数十億回のRPCコールを処理する実績があります。

Protocol Buffers(protobuf)

Protocol Buffersは、Googleが開発した言語中立・プラットフォーム中立なデータシリアライゼーション形式です。.protoファイルでデータ構造とサービスインターフェースを定義し、protoc コンパイラで各プログラミング言語向けのコードを自動生成します。

syntax = "proto3";

service UserService {
  rpc GetUser (GetUserRequest) returns (User);
  rpc ListUsers (ListUsersRequest) returns (stream User);
}

message User {
  int32 id = 1;
  string name = 2;
  string email = 3;
}

message GetUserRequest {
  int32 id = 1;
}

Protocol Buffersのバイナリ形式は、JSONと比較してデータサイズが約60-80%小さく、シリアライゼーション/デシリアライゼーションの速度も数倍高速です。また、スキーマの前方互換性・後方互換性が保証されており、APIの段階的な進化が可能です。

gRPCの4つの通信パターン

gRPCはHTTP/2のストリーミング機能を活用して、4つの通信パターンを提供します。

  • Unary RPC:クライアントが1つのリクエストを送り、サーバーが1つのレスポンスを返す最もシンプルなパターン。通常のREST APIコールに相当します。
  • Server Streaming RPC:クライアントが1つのリクエストを送ると、サーバーがストリームで複数のレスポンスを返します。リアルタイムデータフィード、ログストリーミングに適しています。
  • Client Streaming RPC:クライアントがストリームで複数のリクエストを送り、サーバーが1つのレスポンスを返します。ファイルアップロードやセンサーデータの一括送信に適しています。
  • Bidirectional Streaming RPC:クライアントとサーバーが独立してストリームでデータを送受信します。チャットシステムやリアルタイム協調編集に適しています。

gRPCとREST APIの比較

観点gRPCREST API
シリアライゼーションProtocol Buffers(バイナリ)JSON(テキスト)
トランスポートHTTP/2HTTP/1.1 or HTTP/2
ストリーミング双方向対応なし(別途WebSocket等)
コード生成自動(多言語対応)OpenAPIから生成可能
ブラウザ対応gRPC-Web経由ネイティブ対応
デバッグバイナリのため専用ツール必要curlやブラウザで容易

gRPCの活用事例

  • マイクロサービス間通信:Kubernetes上のサービス間の高速通信。Netflix、Dropbox、Slackが採用
  • モバイルアプリ通信:帯域幅が制限されるモバイル環境での効率的なデータ転送
  • IoTデバイス通信:センサーデータの高速収集とデバイス制御
  • 分散データベース:CockroachDB、TiDBなどの内部通信プロトコル
  • AI/MLインフラ:TensorFlow Servingのモデル推論API、KubeflowのMLパイプライン

gRPCのエコシステム

  • gRPC-Web:ブラウザからgRPCサービスを呼び出すためのプロキシ。Envoy Proxyを介して変換
  • gRPC-Gateway:gRPCサービスにRESTful JSONインターフェースを自動生成するリバースプロキシ
  • Buf:Protocol Buffersのリンター、ブレイキングチェンジ検出、スキーマレジストリ
  • Connect:gRPC互換プロトコル。ブラウザからgRPC-Webなしで直接呼び出し可能

2025-2026年の最新動向

Connect RPC(旧Connect-Go/Connect-Web)が急速に普及しています。gRPC互換でありながらHTTP/1.1でも動作し、curlで直接テスト可能なシンプルさを持ちます。gRPC-Webのプロキシ不要でブラウザから直接呼び出せるため、フルスタック開発での採用が増加しています。

gRPC over QUICの実験的サポートが進み、HTTP/3ベースのgRPC通信が実現しつつあります。特にモバイルネットワークでの接続切り替え時のレジリエンスが向上します。

また、AI推論サービスでのgRPC活用が加速しており、NVIDIA Triton Inference Server、vLLM、TGI(Text Generation Inference)などのLLMサービングフレームワークがgRPCインターフェースを標準提供しています。

関連技術と用語

  • API - ソフトウェア間通信の基本概念
  • REST - JSONベースのAPI設計パターン
  • GraphQL - 柔軟なクエリが可能なAPI技術
  • HTTP/2 - gRPCの基盤プロトコル
  • HTTP/3 - QUICベースの次世代プロトコル

外部リンク

よくある質問(FAQ)

Q. gRPCとは何ですか?

gRPCはGoogleが開発した高性能RPCフレームワークです。Protocol Buffersによるバイナリ通信とHTTP/2のストリーミングを特徴とし、マイクロサービス間の高速通信に広く利用されています。

Q. gRPCとREST APIの違いは?

gRPCはProtocol Buffersのバイナリ形式で5-10倍高速、双方向ストリーミング対応ですが、ブラウザからの直接利用にはgRPC-Webが必要です。REST APIはJSON/テキストベースでデバッグが容易です。

Q. Protocol Buffersとは?

Googleが開発した言語中立のデータシリアライゼーション形式です。.protoファイルでスキーマを定義し、各言語向けのコードを自動生成します。JSONより小さく高速なバイナリ形式が特徴です。

Q. gRPCの4つの通信パターンは?

Unary RPC(1対1)、Server Streaming(1対多)、Client Streaming(多対1)、Bidirectional Streaming(双方向)の4パターンがあります。

この用語についてもっと詳しく

gRPC導入やマイクロサービス設計に関するご相談は、お気軽にお問い合わせください。