gRPC の動作確認には evans の REPL モードが便利だった

gRPC について入門していて動作確認のためにリクエストを送れる gRPC クライアントを探していた。
最初は postman とかを見ていたが、いろいろ調べていく中で cli ツールでもいいなとなり、 ktr0731/evans を見つけた。

ktr0731/evans の特に REPL モードが便利だったのでメモ

# /protos/greet.proto に定義

syntax = "proto3";

package greet;

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

message Name {
  string first_name = 1;
  string last_name = 2;
}

message Greeting {
  string message = 1;
}

message HelloRequest {
  Name name = 1;
}

message HelloReply {
  Greeting greeting = 1;
}

上記のようにメッセージなどが定義されている gRPC サーバーを 50051 ポートで起動しているとすると以下のように REPL モードが起動できる。

evans -p 50051 --proto protos/greet.proto repl

REPL モードでは以下のような show serviceshow message のようなコマンドを実行できたり、 call XXXX で実際にメッセージを投げることもできる。

[email protected]:50051> show service
+---------+----------+--------------+---------------+
| SERVICE |   RPC    | REQUEST TYPE | RESPONSE TYPE |
+---------+----------+--------------+---------------+
| Greeter | SayHello | HelloRequest | HelloReply    |
+---------+----------+--------------+---------------+

[email protected]:50051> show message
+--------------+
|   MESSAGE    |
+--------------+
| HelloReply   |
| HelloRequest |
+--------------+

[email protected]:50051> call SayHello
name::first_name (TYPE_STRING) => hoge
name::last_name (TYPE_STRING) => fuga
{
  "greeting": {
    "message": "こんにちは"
  }
}

[email protected]:50051> exit
Good Bye :)

特にメッセージを投げる際に、メッセージに必要なフィールドをインタラクティブに聞いてくれるという機能が非常に便利に感じている。

[email protected]:50051> call SayHello
name::first_name (TYPE_STRING) => hoge
name::last_name (TYPE_STRING) => fuga

またここでは現れていないが、基本的に全てのコマンドに対してサジェストが効くのも非常に便利に感じている。
感覚的には主要なコマンドさえ覚えていれば、あとはほとんど tab とかだけで上記のようなコマンドの入力ができてしまった。

他のコマンドなどについても詳細に紹介されているので、ktr0731/evans の README も参照してほしい。