はじめに
「マイクロサービス間の通信をRESTからgRPCに移行したい」
「Protocol Buffersの書き方がわからない」
「gRPCのストリーミングはいつ使えばいいの?」
gRPCはHTTP/2ベースの高性能なRPCフレームワークで、マイクロサービス間の通信に広く使われています。Claude Codeを使えば、protoファイルの設計からコード生成・サービス実装まで効率的に進められます。
目次
- gRPCとRESTの使い分け
- Protocol Buffersの設計
- サービスの実装(Node.js・Python・Go)
- ストリーミングの実装
- 認証とセキュリティ
- gRPC-Webによるブラウザ対応
- テストとデバッグ
- まとめ
1. gRPCとRESTの使い分け
技術選択の相談
> マイクロサービス間の通信をgRPCとRESTのどちらにするか相談したいです。
システム構成:
- ユーザーサービス(Node.js)
- 注文サービス(Python)
- 在庫サービス(Go)
- APIゲートウェイ(Node.js・外部向けREST API)
各サービス間の通信頻度:
- 注文→在庫:高頻度(注文ごとに在庫確認)
- APIゲートウェイ→各サービス:中程度
gRPCが適している箇所とRESTが適している箇所を
具体的に提案してください。
2. Protocol Buffersの設計
protoファイルの設計
> 注文管理システムのProtocol Buffersを設計してください。
サービス:
- OrderService(注文のCRUD・ステータス更新)
- InventoryService(在庫確認・更新)
- NotificationService(通知送信)
要件:
- proto3構文を使用
- 適切なパッケージ名とオプション設定
- バリデーション(proto-validate使用)
- wellknown types(google.protobuf.Timestamp等)の活用
- APIバージョニング(v1・v2の共存)
- ネストされたメッセージの適切な設計
既存REST APIからのproto設計
> このREST APIのOpenAPI仕様からProtocol Buffersを設計してください。
変換の注意点:
- REST Resourceの命名 → Messageの命名
- HTTP動詞 → RPCメソッド名
- クエリパラメータ → RequestMessageのフィールド
- ページネーションの変換(Cursor-based)
[openapi.yamlを貼り付け]
3. サービスの実装
Node.jsでのgRPC実装
> @grpc/grpc-jsを使ってOrderServiceを実装してください。
実装内容:
- protoファイルからTypeScriptの型定義を生成(buf・protoc-gen-ts)
- サービスのサーバー実装
- インターセプター(ログ・認証・エラーハンドリング)
- HealthCheckサービスの追加(grpc-health-probe対応)
- グレースフルシャットダウン
接続プーリングを使ったクライアントの実装も含めてください。
PythonでのgRPC実装
> grpcioを使ってInventoryServiceをPythonで実装してください。
実装内容:
- protobufコード生成(grpc_tools.protoc)
- 非同期サーバー(asyncio対応)
- SQLAlchemy + PostgreSQLとの連携
- テストはpytest + grpcioのテストユーティリティ
4. ストリーミングの実装
サーバーストリーミング
> 注文のリアルタイム状況追跡にサーバーストリーミングを実装してください。
ユースケース:
- クライアントが注文IDを送信
- サーバーが注文ステータスの変化をリアルタイムでストリーム配信
protoの定義:
rpc TrackOrder(TrackOrderRequest)
returns (stream OrderStatus) {}
Node.jsでの実装と、フロントエンドからgRPC-Webで
接続するコードも実装してください。
双方向ストリーミング
> チャットシステムに双方向ストリーミングを実装してください。
protoの定義:
rpc Chat(stream ChatMessage)
returns (stream ChatMessage) {}
実装内容:
- メッセージの送受信
- ハートビート(接続の維持)
- 再接続ロジック
- バックプレッシャーの制御
5. 認証とセキュリティ
mTLSとメタデータ認証
> gRPCサービスの認証を実装してください。
実装方法:
1. TLS(サーバー証明書の設定)
2. メタデータを使ったJWT認証
- クライアントがAuthorizationメタデータにJWTを付与
- サーバーインターセプターで検証
3. サービス間通信のmTLS(相互TLS)
証明書の自動生成・更新(cert-manager使用)も設定してください。
6. gRPC-Webによるブラウザ対応
Envoyプロキシの設定
> gRPC-Webを使ってブラウザからgRPCサービスに接続できるようにしてください。
構成:
ブラウザ → gRPC-Web → Envoyプロキシ → gRPCサービス
設定内容:
- Envoyの設定ファイル(envoy.yaml)
- CORSの設定
- フロントエンド(TypeScript)でのgRPCクライアント実装
- Connectライブラリを使ったシンプルな代替実装
Docker Composeでの設定も含めてください。
7. テストとデバッグ
gRPCのテスト実装
> gRPCサービスのテストを実装してください。
テスト種別:
- ユニットテスト(サービスロジックのテスト)
- 統合テスト(実際のgRPCサーバーに接続)
- モックを使ったクライアントテスト
ツール:
- grpcurl(CLIでのgRPCテスト)
- BloomRPC・Kreya(GUIツール)のプロジェクト設定
- Node.jsのtestcontainersを使った統合テスト
8. まとめ
Claude CodeでのgRPC実装の効率化ポイント:
- protoファイルの設計を要件から自動生成
- TypeScript・Python・Go各言語での実装をサポート
- ストリーミングの複雑な実装を正確に構築
- mTLS・JWT認証のセキュリティ設定を自動化
gRPCを選ぶべき場面:
- マイクロサービス間の高頻度内部通信
- 厳密なAPI契約が必要な場合
- 双方向ストリーミングが必要な場合
- 複数言語のサービスが混在する場合
次回の第49回:MLOpsを構築する方法では、機械学習モデルの学習からデプロイまでを解説します。
よくある質問(FAQ)
Q. gRPCとGraphQLのどちらを使えばいいですか?
A. Claude Codeに「このユースケースにgRPCとGraphQLのどちらが適していますか?」と相談することで、内部API(gRPCが向いている)と外部API(GraphQLが向いている)の使い分けを提案してくれます。
Q. bufツールとproto-genの設定は難しいですか?
A. Claude Codeに「bufを使ってprotoからTypeScriptの型定義を生成する設定をしてください」と依頼するだけで、buf.yaml・buf.gen.yamlの設定から生成コマンドまで一括で設定してくれます。
この記事はClaude Code入門シリーズ(第5部)の第48回です。← 第47回:多言語対応(i18n) | 第49回:MLOps →
ご質問はお問い合わせページからお気軽にどうぞ。