Skip to content
Latchkey

buf vs protoc: モダンな Protobuf ツールとコンパイラの比較

protoc は Protocol Buffers の公式コンパイラであり、buf は lint、breaking change 検出、依存関係管理でワークフローをラップしてモダン化します。

protoc は plugin を介して .proto ファイルをコードにコンパイルしますが、include、plugin、一貫性の管理は手動です。buf は同じコンパイルの上に、より高レベルなワークフロー(buf.yaml、lint、breaking change のチェック、リモート plugin、schema registry)を提供します。

bufprotoc
役割ワークフロー: lint、breaking、generateリファレンスコンパイラ
Linting組み込みなし
breaking change の検出組み込みなし
依存関係管理buf.yaml + registry手動の include path
設定buf.yaml / buf.gen.yamlコマンドラインフラグ / スクリプト

buf が優れている点

buf は protobuf を管理されたワークフローに変えます。スタイルルールに対して schema を lint し、baseline に対して breaking change を検出し、依存関係を管理し、明確な設定でコードを生成します。CI ではこれにより、互換性のない API 変更が出荷される前に捕捉でき、これは素の protoc にはできません。

protoc が今なお適する点

protoc は正統なコンパイラであり、最小限のセットアップ、特殊な plugin、あるいはもう一つツールを追加したくない環境では今も正しい選択です。buf は結局のところ同じ生成の概念に依存しており、一部のパイプラインはスクリプト化された protoc で十分なほど単純です。

CI では

一般的なパイプラインは、各 PR で buf lintbuf breaking を実行し、その後 buf generate を実行します。これにより protoc にはない schema の品質ゲートが得られます。コード生成だけが必要で plugin のセットアップが安定しているなら、protoc とスクリプトで動きます。

結論

CI で protobuf の lint、breaking change 検出、管理された依存関係が欲しいなら buf を使い、最小限または特殊な生成ニーズには protoc を使いましょう。共有 schema を保守するほとんどのチームは buf の恩恵を受けます。

関連ガイド