grpc-toolsを使って.protoファイルからNode.jsのgRPC clientコードを生成する


環境

$ node -v 
v10.15.3

前提

$ npm i -g grpc-tools 

※ grpc-toolsには protoc 本体も含まれている

前提として次の hero.proto がheroディレクトリ以下にある状態でこの後の手順を解説する。
これは、nestjsの sample/04-grpc から拝借した。

syntax = "proto3";

package hero;

service HeroService {
  rpc FindOne (HeroById) returns (Hero) {}
}

message HeroById {
  int32 id = 1;
}

message Hero {
  int32 id = 1;
  string name = 2;
}

生成する

次のコマンドを実行して生成する。
オプションが複数になるのと、環境に依存するpathを使用する箇所があるので、シェルスクリプト化しても良さそう。

grpc_tools_node_protoc \
--js_out=import_style=commonjs,binary:. \
--grpc_out=. \
--plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` \
hero/hero.proto
  • --js_out
    • protobufのmessageクラス定義の出力先ディレクトリを指定
  • --grpc_out
    • client実装の出力先ディレクトリを指定
  • --plugin
    • 利用するプラグインのパスを指定

生成されるファイルの確認

  • hero_pb.js

    • protobufのmessageオブジェクトををjavascriptのclassで表現したもの
  • hero_grpc_pb.js

    • clientの実装
    • 内部的にhero_pb.jsが読み込まれているため利用する場合はhero_pb.jsも必要になる

生成されたファイルの内容をここに貼り付けることはしないが、hero_grpc_pb.jsの内容を確認すると、.protoに定義した通りのスキーマで呼び出しコードが生成されているのがわかる。

参考