Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

@daikiojm

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

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?