protobuf について
protobufは、Protocol Buffersのスキーマやサービスの作成・保守を支援するスキルです。プロジェクト規約、検証、コード生成設定、bufによる確認を案内します。
主な機能
- 01.protoスキーマの作成と編集
- 02bufとコード生成の設定
- 03protovalidate制約の追加
- 04gRPCおよびConnectサービスの設計
- 05フォーマット、lint、互換性変更の確認
活用シーン
- 01本番APIスキーマへのフィールド追加
- 02新しいprotobufプロジェクトの設定
- 03buf lintや互換性エラーの調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ bufbuild/ claude-plugins --skill protobufインストール後、Claude Code で/protobufを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/buf.gen.go-connect.yamlbuf.gen.go.yamlbuf.gen.java.yamlbuf.gen.python.yamlbuf.gen.ts.yamlbuf.gen.yamlbuf.lockbuf.yamlMakefile.exampleassets/proto/example/v1/book_service.protobook.protoreferences/best_practices.mdbuf_toolchain.mdexamples.mdmigration.mdprotoc_toolchain.mdprotovalidate.mdquick_reference.mdreview_checklist.mdtroubleshooting.md詳細
Protocol Buffers
このスキルが必要な場合
.protoファイルの作成や編集buf.yamlまたはbuf.gen.yamlの設定- gRPC または Connect サービスの設計
- protovalidate 制約の追加
- buf lint または破壊的変更エラーのトラブルシューティング
基本的なワークフロー
1. プロジェクトのスタイルに合わせる
proto コードを書く前に、プロジェクト内の既存の .proto ファイルを確認してください。
命名規則、フィールドの順序、構造パターン、バリデーション、ドキュメントのスタイルに合わせてください。
既存ファイルがない場合は、どのスタイルを使うか、または参考にする既存のライブラリがあるかをユーザーに尋ねてください。
2. Proto コードを書く
- best_practices.md の普遍的なベストプラクティスを適用します
- すべてのフィールドに protovalidate 制約を追加します。本番環境の API では必須です
- サービスのテンプレートについては、assets/ を参照してください
3. 変更を検証する
変更を行った後は、必ず次を実行してください:
buf format -w && buf lint
まず Makefile を確認してください。多くのプロジェクトでは make lint または make format を使用しています。
変更を完了とする前に、すべてのエラーを修正してください。
クイックリファレンス
| タスク | リファレンス |
|---|---|
| フィールド型、列挙型、oneof、マップ | quick_reference.md |
| スキーマの進化、破壊的変更 | best_practices.md |
| バリデーション制約 | protovalidate.md |
| サービスの完全な例 | examples.md、assets/ |
| buf CLI、buf.yaml、buf.gen.yaml | buf_toolchain.md |
| protoc からの移行 | migration.md |
| lint エラー、よくある問題 | troubleshooting.md |
| Proto API レビューのチェックリスト | review_checklist.md |
プロジェクトのセットアップ
新規プロジェクト
-
ディレクトリ構造を作成します:
proto/ ├── buf.yaml ├── buf.gen.yaml └── company/ └── domain/ └── v1/ └── service.proto -
assets/buf.yamlを出発点として使用します -
buf.yamlの依存関係としてbuf.build/bufbuild/protovalidateを追加し、buf dep updateを実行します -
コード生成の設定には
assets/buf.gen.*.yamlを使用します
コード生成テンプレート
| テンプレート | 用途 |
|---|---|
buf.gen.go.yaml | gRPC を使用する Go |
buf.gen.go-connect.yaml | Connect を使用する Go |
buf.gen.ts.yaml | Connect を使用する TypeScript |
buf.gen.python.yaml | gRPC を使用する Python |
buf.gen.java.yaml | gRPC を使用する Java |
Proto ファイルのテンプレート
assets/proto/example/v1/ にあります:
| テンプレート | 説明 |
|---|---|
book.proto | エンティティメッセージ、BookRef oneof、列挙型 |
book_service.proto | バッチ操作、ページネーション、並べ替えを含む完全な CRUD |
よくあるタスク
新しいフィールドを追加する
- 次の連続したフィールド番号を使用します
- protovalidate 制約を追加します。すべてのフィールドに、その型に適したバリデーション(形式のバリデーター、長さの範囲、数値の範囲、列挙型の制約など)が必要です
- フィールドの説明を記述します
buf format -w && buf lintを実行します
フィールドを削除する
- フィールド番号と名前の両方を予約します:
reserved 4; reserved "old_field_name"; buf breaking --against '.git#branch=main'を実行して確認します
protovalidate 制約を追加する
本番環境の API では、すべてのフィールドに適切なバリデーションを設定してください。 詳しくは、リファレンス全体が記載された protovalidate.md を参照してください。
よく使われる制約:
- 文字列の形式:
.string.uuid、.string.email、.string.uri、.string.pattern - 文字列の長さ:
.string.min_len、.string.max_len - 数値の範囲:
.int32.gte、.uint32.lte - 列挙型のバリデーション:
.enum.defined_only、.enum.not_in = 0 - 繰り返しの範囲:
.repeated.min_items、.repeated.max_items - 必須フィールド:
(buf.validate.field).required = true - 必須の oneof:
(buf.validate.oneof).required = true
検証チェックリスト
変更を行った後:
- すべてのフィールドに適切な protovalidate 制約が設定されている
-
buf format -w(フォーマットを適用) -
buf lint(スタイルルールを確認) -
buf breaking --against '.git#branch=main'(既存のスキーマを変更する場合)