LoginSignup
4
4

protocからBufに乗り換えて設定をソースコード管理しよう [gRPC ✕ golangをDRYに Part.2]

Last updated at Posted at 2023-05-29

対象読者

  • 株式会社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

4
4
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
4
4