TL;DR
Protocol Buffers のスキーマを、Buf が定めたルールで静的解析する Buf CLI のコマンド。
仕組み
警告は Buf が定義したルールに基づいて出る。デフォルトでは STANDARD ルール(以前は DEFAULT と呼ばれていた)が適用される。
設定は、ほかのコマンドと同じく buf.yaml に書く。このファイルは通常、スキーマのルートである proto ディレクトリと同じ階層に置く。必須ではなく、なければデフォルトの設定で実行される。
version: v2
modules:
- path: proto
name: buf.build/tutorials/lint
lint:
use:
- STANDARD例
package weather; で、enum の値に接頭辞がない proto ファイルに buf lint をかけると、次のような警告が出る。
proto/radish/weather/v1/weather.proto:3:1:Package name "weather" should be suffixed with a correctly formed version, such as "weather.v1".
proto/radish/weather/v1/weather.proto:6:3:Enum value name "SUNNY" should be prefixed with "CONDITION_".
proto/radish/weather/v1/weather.proto:6:3:Enum zero value name "SUNNY" should be suffixed with "_UNSPECIFIED".
proto/radish/weather/v1/weather.proto:21:18:RPC request type "Location" should be named "GetWeatherRequest" or "WeatherServiceGetWeatherRequest".
警告に従って直すと、次の形になる。直したあとに buf lint を実行すると、何も出力されず終了コード 0 で終わる。
syntax = "proto3";
// パッケージ名はディレクトリと一致させる
package radish.weather.v1;
enum Condition {
// enum の 0 は <ENUM 名>_UNSPECIFIED にする
// enum の値には <ENUM 名> の接頭辞を付ける
CONDITION_UNSPECIFIED = 0;
CONDITION_SUNNY = 1;
CONDITION_RAINY = 2;
}
// リクエストメッセージは <RPC 名>Request にする
message GetWeatherRequest {
float latitude = 1;
float longitude = 2;
}Visual Studio Code の拡張機能を入れると、警告がエディタ上に表示される。表示には buf.yaml が必要である。
注意点
警告を無効にする
ignore_only を使うと、ルールごと・ファイルごとに警告を無視できる。既存のプロダクトに Buf CLI を入れて大量の警告が出たときや、外部で公開されているモジュールに警告が出るときに使う。
lint:
use:
- STANDARD
ignore_only:
ENUM_VALUE_PREFIX:
- proto/radish/weather/v1/weather.proto--error-format=config-ignore-yaml を付けて実行すると、警告を無視するために buf.yaml に書く内容が出力される。ただし v1.42.0 では、出力が version: v1 の形で、パスも proto ディレクトリからの相対パスになっている。v2 では buf.yaml を proto ディレクトリと同じ階層に置くので、パスに proto/ を足す必要がある。