0
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

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に定義した通りのスキーマで呼び出しコードが生成されているのがわかる。

参考

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?