gRPCって難しいですよね
こんにちは、jackです。
最近、業務で gRPC を使う機会がありました。
そもそも RPC ってなんぞやってところから g がついて、とっつきにくいなーと思ってしまいがちですよね。
ローカル開発大変そう
と思った方も結構いるのではないでしょうか。実際少し調べてみるとどうやって手元で動かすのか紹介しているものが少なかったので今回はそちらを共有したいと思います。
結局なにを開発するにもそうですが、手元で確認できたほうがなんか安心しますし、開発スピードもあがりますよね。
*更新:2019年1月
下記で紹介している grpc_cli
を使わなくても、MacユーザーはBrewでのインストールがおすすめです。
brew tap grpc/grpc
brew install grpc
which grpc_cli
こちらが成功したら「実際にデバッグする」セクションまで読み飛ばしてください。
実は意外と簡単!?
一見難しそうですが、やってみると意外と簡単です。
では、早速やっていきます。
まずデバッグには grpc_cli
というツールを使います。
grpc_cli
をインストールする
~/Desktop
❯ git clone https://github.com/grpc/grpc
~/Desktop
❯ cd grpc/
# dependenciesをダウンロード
~/Desktop/grpc
❯ git submodule update --init
# ビルド実行
~/Desktop/grpc
❯ make grpc_cli
~/Desktop/grpc
❯ cd bins/opt/
# grpc_cli executableを確認
~/Desktop/grpc/bins/opt
❯ ll
total 12336
-rwxr-xr-x 1 masanoriuehara staff 5.3M Jun 21 23:35 grpc_cli
make時にエラーがでたら protobuf
やら gflags
やらが入ってない可能性があるので brew install
しましょう。
bins/opt
配下に grpc_cli
の Executable ができたら成功です。
gRPCサーバーを立ち上げる
それでは実際にデバッグしたいgRPCサーバーを動かしましょう。
先ほどとは別のウィンドウでやってきます。
今回は簡単な例として、公式のこちらを使います。
https://github.com/grpc/grpc-go/tree/master/examples
~
❯ go get -u google.golang.org/grpc/examples/helloworld/greeter_server
~
❯ cd /go/src/google.golang.org/grpc/examples/helloworld/greeter_server
~/go/src/google.golang.org/grpc/examples/helloworld/greeter_server
❯ go run main.go
サーバーが立ち上がりました。
これで下準備は終了。
実際にデバッグ方法を紹介していきます
まずサービスの存在を確認する
~/Desktop/grpc/bins/opt
❯ ./grpc_cli ls localhost:50051
grpc.reflection.v1alpha.ServerReflection
helloworld.Greeter
ls
を使い、helloworld.Greeter
とサービスが表示されました。
より詳細を見たいときは -l
オプションを付けます。
サービスのメソッドを確認
特定のサービスメソット詳細を見たい時はこのようにします。
~/Desktop/grpc/bins/opt
❯ ./grpc_cli ls localhost:50051 helloworld.Greeter -l
filename: helloworld.proto
package: helloworld;
service Greeter {
rpc SayHello(helloworld.HelloRequest) returns (helloworld.HelloReply) {}
}
messageの定義を確認
type
を使うことで message の定義がわかりやすく表示されます。
~/Desktop/grpc/bins/opt
❯ ./grpc_cli type localhost:50051 helloworld.HelloRequest
message HelloRequest {
string name = 1[json_name = "name"];
}
デバッグ Remote Call する
実際にサービスを叩くには call
を使います。
~/Desktop/grpc/bins/opt
❯ ./grpc_cli call localhost:50051 Greeter.SayHello 'name: "jack"'
connecting to localhost:50051
message: "Hello jack"
Rpc succeeded with OK status
以上
意外と簡単にできましたね!
これで gRPC も怖くない