コラム Claude Code入門 更新:

Claude CodeでgRPCを実装する方法!Protocol Buffersからサービス間通信まで自動構築

Claude CodeでgRPCを実装する方法!Protocol Buffersからサービス間通信まで自動構築
目次 (21項目)
  1. 1. はじめに
  2. 2. 目次
  3. 3. 1. gRPCとRESTの使い分け
  4. 技術選択の相談
  5. 4. 2. Protocol Buffersの設計
  6. protoファイルの設計
  7. 既存REST APIからのproto設計
  8. 5. 3. サービスの実装
  9. Node.jsでのgRPC実装
  10. PythonでのgRPC実装
  11. 6. 4. ストリーミングの実装
  12. サーバーストリーミング
  13. 双方向ストリーミング
  14. 7. 5. 認証とセキュリティ
  15. mTLSとメタデータ認証
  16. 8. 6. gRPC-Webによるブラウザ対応
  17. Envoyプロキシの設定
  18. 9. 7. テストとデバッグ
  19. gRPCのテスト実装
  20. 10. 8. まとめ
  21. 11. よくある質問(FAQ)

はじめに

「マイクロサービス間の通信をRESTからgRPCに移行したい」

「Protocol Buffersの書き方がわからない」

「gRPCのストリーミングはいつ使えばいいの?」

gRPCはHTTP/2ベースの高性能なRPCフレームワークで、マイクロサービス間の通信に広く使われています。Claude Codeを使えば、protoファイルの設計からコード生成・サービス実装まで効率的に進められます。

目次

  1. gRPCとRESTの使い分け
  2. Protocol Buffersの設計
  3. サービスの実装(Node.js・Python・Go)
  4. ストリーミングの実装
  5. 認証とセキュリティ
  6. gRPC-Webによるブラウザ対応
  7. テストとデバッグ
  8. まとめ

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 →

ご質問はお問い合わせページからお気軽にどうぞ。

著者:R-LLM 開発者

フォロー

Webエンジニアとして10年以上のキャリアがあり、現在はWordPressとLLM(大規模言語モデル)の連携、および生成AIを活用した課題解決のための開発に日々取り組んでいます。

私の信条は、クライアントに寄り添った伴走支援と、最後まで責任を持ってやり遂げる「遂行力」です。これまでの膨大なトライ&エラーの蓄積により、自身の領域内であれば不具合も迅速に解決できる現場の知見を積み上げてきました。

このブログでは、一人のエンジニアとして私自身がAI技術に抱いている純粋な興味をベースに、日々の探求プロセスを発信しています。

生成AILLMをどのように実務に組み込み、価値へ繋げていくか。自身の検証結果だけでなく、実務者としての視点に基づいた「考察や推察」も含めて共有することで、同じように試行錯誤を続ける方々と知見を繋げていければと考えています。

関連記事

SHARE Xでシェア
← 前の投稿
投稿一覧に戻る
次の投稿 →