LoginSignup
5
2

More than 5 years have passed since last update.

Protobuf.jsを使って.protoファイルからNode.jsのprotobufのjavascriptコードを生成する

Last updated at Posted at 2019-03-31

環境

$ 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オブジェクトのコードが生成されているのがわかる。

参考

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2