【ジーアールピーシーカール】

grpcurl とは?

最終更新:
💡 gRPCを、定義とJSONから呼び出す

gRPCをコマンドラインから呼び出すツール。JSONとProtocol Buffersの変換、リフレクションとproto定義、TLS・平文接続、サービスの一覧やRPCの呼び出しを解説します。

📌 このページのポイント
grpcurl:JSONからgRPCを呼び出す端末側のgrpcurlJSONで入力:-d または -d @定義を使って変換する応答をJSONとして表示要求応答ProtobufgRPCサーバー定義:リフレクション / proto / protosetTLS・認証・メソッド名も確認通信中の応答がJSONという意味ではない
単一のRPCの要求と応答の方向を分け、端末側でJSONとProtocol Buffersを変換する役割を示しています。APIの定義と接続方式を、対象サーバーに合わせます。
ひよこ ひよこ
gRPCのAPIを、コマンドラインで試せる?
ペンギン先生 ペンギン先生
grpcurlなら、入力をJSONで書いてRPCを呼び出せるよ。サービス定義に基づいてProtocol Buffersへ変換し、応答もJSONで表示する。通信中の応答がそのままJSON、という意味ではないんだ。
ひよこ ひよこ
定義のprotoファイルは必ず手元に必要?
ペンギン先生 ペンギン先生
サーバーがリフレクションを提供していれば、そこから定義を取得できるよ。対応していない場合は、-protoでソースを指定したり、-protosetでコンパイル済みの定義を指定したりする。リフレクションは自動で有効になるとは限らないんだ。
ひよこ ひよこ
ローカルのサービス一覧を見るには?
ペンギン先生 ペンギン先生
TLSなしの検証サーバーなら、grpcurl -plaintext localhost:50051 list という例になるよ。通常の接続はTLSを使うので、ローカルだから自動で平文になるわけではない。listが使えるには、定義が取得できることも必要だ。
ひよこ ひよこ
実際にJSONを渡すときは?
ペンギン先生 ペンギン先生
-dで渡すか、-d @で標準入力から読むよ。grpcurl -plaintext -d @ localhost:50051 greeter.Greeter/SayHello のように、オプションを先に書く。入力やメソッド名は、そのサーバーの定義に合わせよう。
ひよこ ひよこ
ストリーミングも、これで全部の機能を検証できる?
ペンギン先生 ペンギン先生
単一の要求・応答だけでなく、各種ストリーミングにも対応するよ。ただしツールが対応することと、APIのすべてを検証できたことは別だ。認証が必要ならメタデータや証明書の指定も確認し、期待する応答を確かめよう。
もっと詳しく知りたい人へ

listが成功すれば、アプリのAPIも正常?

listはサービスの定義を調べる操作です。RPCの業務処理が正しく動くかは、対象メソッドを呼び出して確認します。逆にリフレクションが提供されていなくても、適切な定義ファイルを使えばRPCを呼び出せる場合があります。

接続エラーが出たら、TLSを無効にすればよい?

サーバーの接続方式を確認します。-plaintextはTLSを使わないサーバー用で、TLSサーバーの証明書問題を直す指定ではありません。独自の認証局やクライアント証明書が必要な場合は、公式のTLSオプションで適切に設定します。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「grpcurl」って出てきたら「gRPCサーバーへコマンドラインから要求を送る道具」と思えばだいたいOK!
📖 おまけ:英語の意味
「grpcurl」 = gRPC向けのコマンドライン呼び出しツール
💬 公式リポジトリは「curlのように、gRPCサーバーとやり取りするコマンドラインツール」と紹介しています。HTTP APIへJSONをそのまま送るcurlコマンドと、同じ通信をするわけではありません。

参考資料

← 用語集にもどる