
そろそろ2年近く経ちますが、2023年7月号のSoftware DesignのgRPCの特集記事の執筆をしました。
その中で、バリデーションツールとしては github.com/bufbuild/protoc-gen-validate
の紹介をしていました。ただ、当時の記事では次のような説明をしていました。
なお、protoc-gen-validateは現在のバージョンをV1として互換性をロックした上で、V2を6月からGoから順次公開というアナウンスを最近出しており、カスタムエラーメッセージが出力できるようになったり、CEL(Common Expression Language)ベースでサポートするすべての言語で互換性を持たせたい、としています。Webフロントエンドからのリクエストにも対応できそうなため、将来有望ですが、本特集の原稿の締切り的に詳細が紹介できないので、詳しくは開発元のブログ(注釈5)をウォッチすると良いと思います。
その後、V2が出ることはなかったのですが、装いも新たにprotovalidateという名前でリリースされています。マイグレーションガイドも公開されていますし、その中ではマイグレーションツールも紹介されています。
変更点
- TypeScript/JavaScript対応が追加
- インポートするパッケージが変わった。buf.yamlのdepsを
buf.build/bufbuild/protovalidate:v0.10.7
に変えて、.protoで読み込むファイルをvalidate/validate.proto
からbuf/validate/validate.proto
に変える (validate.rules).string.uuid = true
が(buf.validate.field).string.uuid = true
のようにカッコの中が変わった- oneofの制約とかignoredとかdisabledの制約の書き方が変わった
- 以前のツールだと生成された型に
Validate()
,ValidateAll()``メソッドが追加されたが、
github.com/bufbuild/protovalidate-goパッケージの
Validate()`関数を呼び出す形式に変更
追加された機能だと次のような形式でエラーメッセージをわかりやすくできるようになりました。機械的なバリデーションメッセージは理解しにくいですもんね。
{ |
あとはCELを使ったバリデーションも良さげです。
message MyMessage { |
importとかがちょっと変わったり、パッケージが変わった程度で特に不便になるところはなく、機能は増えているので次回使うことがあれば忘れずにこちらを使おうと思います。