Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

環境

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

参考

daikiojm
Blog: http://daikiojm.hatenablog.com Scrapbox: https://scrapbox.io/daikiojm
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした