LoginSignup
21
17

More than 3 years have passed since last update.

ローカル環境でgRPCをデバッグする方法

Last updated at Posted at 2018-06-21

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 も怖くない :muscle:

21
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
17