環境
$ node -v
v10.15.3
前提
$ npm i -g protobufjs
$ pbjs
protobuf.js v6.7.0 CLI for JavaScript
...
※ protobufjsをインストールすると pbjs
でcliツールを呼び出すことができる
前提として次の 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を使用する箇所があるので、シェルスクリプト化しても良さそう。
pbjs \
--target static-module \
--wrap commonjs \
--keep-case \
--out ./hero_pb.js \
./hero/hero.proto
- --target
- 出力ファイルのフォーマットを指定
- --wrap
- 使用するwrapperの指定
- --keep-case
- .protoのmessage定義がcamelCaseに変換されることを防ぐオプション
- --out
- 出力ファイル名
全オプションを確認したい場合は、 pbjs
を引数無しで実行すれば利用できるオプション一覧が表示される。
生成されるファイルの確認
- hero_pb.js
- protobufのmessageオブジェクトをjavascriptのclassで表現したもの
--out
オプションで指定したファイル名でclient実装が生成されることがわかる。
生成されたファイルの内容をここに貼り付けることはしないが、hero_pb.jsの内容を確認すると、.protoに定義した通りのスキーマでprotobufのmessageオブジェクトのコードが生成されているのがわかる。