対象読者
- 株式会社viviONにちょっと興味ある
- gRPCちょっとわかる
- protoファイルちょっとわかる
protobufの生成フローをそろそろソースコードで簡略化したくはないだろうか?
ある日のprotobuf generateコマンド
protoc -I . --grpc-gateway_out ./gen/go \
--grpc-gateway_opt logtostderr=true \
--grpc-gateway_opt paths=source_relative \
--grpc-gateway_opt grpc_api_configuration=path/to/config.yaml \
--grpc-gateway_opt standalone=true \
your/service/v1/your_service.proto
いやいや、ターミナルにどんだけ書くんですか、っていう。
たいていの場合既にbashファイル化されているかもしれないですが。。。
Bufとは何か?
「Buf Technologies, Inc」が開発してるproto APIマネージドツールです。
こちらが、リポジトリです。
要約すると、以下をソースから簡単にマネージド出来るCLIだよとのことです。
- build
- lint
- format
Bufを使うとprotocと比較してどう変わるか
上記で記載したコマンドが下記のコードに変換ができ、buf generate
コマンドでprotobufが生成できます。
version: v1
plugins:
- plugin: go
out: gen/go
opt:
- paths=source_relative
- plugin: go-grpc
out: gen/go
opt:
- paths=source_relative
- plugin: grpc-gateway ## 使用するplugin名
out: gen/go ## 生成されるDIR
opt: ## pluginへのオプション
- paths=source_relative
- grpc_api_configuration=path/to/config.yaml
- standalone=true
使い方
bufのインストール方法
## マカー向け
brew install bufbuild/buf/buf
bufの初期化 (プロジェクト単位で実行の必要あり)
buf mod init
### buf.yamlが生成されます。
生成されたbuf.yamlの中身
linterのルールは他にも様々なものがあるため、詳しくはこちらのドキュメントを参照ください。
buf.yaml
version: v1
breaking: ## 破壊的変更の検知
use: ## 破壊的変更の検知として、何を起点(ID)にしてチェックを行うかを判別
- FILE
lint:
use:
- DEFAULT ## bufが標準的に用意しているルールの適用
protoファイルをlinterにかけるコマンド
buf lint
protoファイルの整形コマンド
buf format -w ## --writeの略
protobuf生成の設定ファイル
buf.gen.yaml
version: v1
plugins:
- plugin: go
out: gen/go
opt:
- paths=source_relative
- plugin: go-grpc
out: gen/go
opt:
- paths=source_relative
- plugin: grpc-gateway ## 使用するplugin名
out: gen/go ## 生成されるDIR
opt: ## pluginへのオプション
- paths=source_relative
- grpc_api_configuration=path/to/config.yaml
- standalone=true
potobuf生成コマンド
コマンドを使用すると、buf.gen.yaml
を元に、Protocol Bufferを生成します。
buf generate
まとめ
いかがでしたでしょうか?protocからBufへ移行したくなりましたか?
commit linterで事前リンターしたり、VScodeに取り入れることで、より開発生産性を向上できそうですね。
Part. 3(Final)は 「golang ✕ gRPCのprotoでルールベースValidateを行う」です☆
採用PR