注: このサイトは非推奨になりました。このサイトは 2023 年 1 月 31 日を過ぎると停止され、トラフィックは https://protobuf.dev の新しいサイトにリダイレクトされます。その間、更新は protobuf.dev のみに行われます。

スタイルガイド

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

このドキュメントでは、.proto ファイルのスタイルガイドを説明します。これらの規則に従うことで、プロトコル バッファのメッセージ定義とそれに対応するクラスに一貫性を持たせ、読みやすくします。

プロトコル バッファのスタイルは経時的に進化しているため、多くの場合、.proto の規則はさまざまな規則やスタイルで記述されています。これらのファイルを変更する場合は、既存のスタイルを遵守してください一貫性が重要です。ただし、新しい .proto ファイルを作成する場合は、現在の最適なスタイルを採用することをおすすめします。

標準のファイル形式

  • 行の長さは 80 文字にしてください。
  • スペース 2 つ分のインデントを使用します。
  • 文字列には二重引用符を使用することをおすすめします。

ファイル構造

ファイル名は lower_snake_case.proto にする必要があります。

すべてのファイルは、以下の順番で並べる必要があります。

  1. ライセンス ヘッダー(該当する場合)
  2. ファイルの概要
  3. 構文
  4. パッケージ
  5. インポート(並べ替え済み)
  6. ファイル オプション
  7. その他

パッケージ

パッケージ名の小文字は入力できません。パッケージ名には、プロジェクト名に基づいて一意の名前を付ける必要があります。場合によっては、プロトコル バッファの種類の定義を含むファイルのパスに基づいて名前を付ける必要があります。

メッセージとフィールド名

メッセージ名にはキャメルケース(初期大文字)を使用します(例: SongServerRequest)。フィールド名(フィールド名と拡張機能の 1 つを含む)にはアンダースコア _区切り_名前(例: song_name)を使用します。

message SongServerRequest {
  optional string song_name = 1;
}

フィールド名にこの命名規則を使用すると、アクセサのような文字列になります。

C++:
  const string& song_name() { ... }
  void set_song_name(const string& x) { ... }

Java:
  public String getSongName() { ... }
  public Builder setSongName(String v) { ... }

項目名に数字が含まれている場合は、数字がアンダースコアの後ではなく文字の後に表示される必要があります。たとえば、song_name_1 ではなく song_name1 を使用します。

繰り返しフィールド

繰り返しフィールドには、複数形の名前を使用してください。

  repeated string keys = 1;
  ...
  repeated MyMessage accounts = 17;

列挙型

列挙型名には CamelCase(初期大文字)を使用し、値名には CAPITALS_WITH_UNDERSCORES を使用します。

enum FooBar {
  FOO_BAR_UNSPECIFIED = 0;
  FOO_BAR_FIRST_VALUE = 1;
  FOO_BAR_SECOND_VALUE = 2;
}

各列挙値は、カンマではなくセミコロンで終わる必要があります。包含メッセージで列挙値を囲むのではなく、プレフィックス値を優先します。想定されていない列挙値を取得するサーバーまたはアプリは、proto インスタンスでこのフィールドが未設定とマークされるため、ゼロ値の列挙型には接尾辞 UNSPECIFIED が必要です。これにより、フィールド アクセサーはデフォルト値を返します。これは、列挙フィールドでは最初の列挙値です。

サービス

.proto が RPC サービスを定義している場合は、サービス名と RPC メソッド名の両方に CamelCase(初期大文字を使用)を使用する必要があります。

service FooService {
  rpc GetSomething(GetSomethingRequest) returns (GetSomethingResponse);
  rpc ListSomething(ListSomethingRequest) returns (ListSomethingResponse);
}

非推奨事項

  • 必須項目(proto2 のみ)
  • グループ(proto2 のみ)