proto: Buf CLI(かきかけ)
2025/07/15
はじめに
gRPC のプロジェクトがあり、”buf” というディレクトリがあった。
そういえば昔使ったことがあるけど忘れてしまった、というわけで記事にしている。
proto ファイルのちょっとした履歴管理と lint に使っていたような気がする。
インストール
これを書いている時点(2025/07/15)では v1.55.1 が最新だった。
インストール方法はいろいろあるが、私は GitHub の Releaseページからbuf-Linux-x86_64バイナリをダウンロードした。
assets がたくさんあって折りたたまれているファイルもあるので、開くとよいです。
$ buf --version
1.55.1
私の環境に 2年くらい前インストールしていたのが v1.28 だったので、まあまあバージョンが上がりやすいツールなのだろう。
始めてみよう
この Quickstart は 2025/07/15時点で Buf CLI v1.32.0 以上となっている。
書いてあるとおりにやれば良いのだが、最初に git clone する URL が SSH になっているので、 どうせ書き換えても pull request などするわけでもないから HTTPS でよいだろう。
$ git clone https://github.com/bufbuild/buf-examples.git && cd buf-examples/cli/quickstart/start/

最近の protoc
proto2 や proto3 があったが、その次の edition 2023 までは「Open Struct API」、さらに次の edition 2024+ から「Opaque API」になったそうだ。
- API level
    - Go Generated Code Guide (Open) - Protocol Buffers Documentation
        - the old generated code API
 
- Go Generated Code Guide (Opaque) - Protocol Buffers Documentation
        - the current version
 
 
- Go Generated Code Guide (Open) - Protocol Buffers Documentation
        
インストールするものが変わるわけではないようだ。
$ go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
Protobuf Editions
インストールガイドだけで判断するのは危険なので元を探そう。
- Protobuf Editions Overview - Protocol Buffers Documentation
    - 「syntax=”proto2”」「syntax=”proto3”」が「edition=”2023”」のようになる
- ファイルが持つデフォルトの動作を指定する
- “proto2”や”proto3”はそれだけで固定した動作になっていたが、editionは特性(feature)のコレクションで明示的にオーバーライドできるようになる
 
“syntax” から “edition” への移植ガイドもある。
ドキュメントにあったコードの変更を WinMerge で見てみた(コメントは削除した)。
proto2

proto3

proto2 と 3 ってoptionalがデフォルトになったくらいのイメージしかなかったのだが、同じ edition に置き換えると違いがあることが分かるものだ。
今すぐどうこうということはないだろうけど、5年後くらいには「最新のプロジェクトなのにproto3なのかー」みたいなことになりそうな気はする。
バイナリ互換は保たれるようだし、新しいプロジェクトでは edition で初めて見るのもよいと思った。
prototiller
prototillerという変換ツールがある。
と思ったのだがprotocのv31.1をダウンロードしたが、そういう実行ファイルは無かった。
どうやら “prototiller” というのは通称のようなもので実装ガイド。
proto2/3 からの移植だけでなく、edition のアップグレードなんかもあるのだろう。
おわりに
まとめたら。



