LoginSignup
7
7

More than 3 years have passed since last update.

Protocol Buffers Style Guide (和訳)

Posted at

スタイルガイド

このドキュメントは .proto ファイルのスタイルガイドです。
下記の規則に従えば、Protocol Buffer Message の定義と対応するクラスの一貫性を保つことができて、容易に読めるようになります。

Protocol Buffer は時間とともに進化してきたので、異なる規則やスタイルで書かれた .proto ファイルを見ることがあります。
それらのファイルを修正するときは、既存のスタイルを尊重してください
一貫性は鍵となります
しかしながら新しく .proto ファイルを作るときは、現在のベストスタイルを採用することが最良です。

基本的なファイルフォーマット

  • 一行は80文字まで
  • インデントはスペース2個
  • 文字列はダブルクォートを選ぶように

ファイル構造

ファイル名は lower_snake_case.proto にするべきです。
すべてのファイルは以下の順番で記述してください
1. ライセンスヘッダー (もし適用できるなら)
2. ファイルの概要
3. syntax
4. package
5. import (ソートする)
6. ファイルオプション
7. それ以外

package

パッケージ名は小文字で、ディレクトリ構造と同様に命名してください。
例: ファイルが my/package/ というディレクトリ内にある場合は、パッケージ名は my.package にします。

message とフィールド名

message 名は CamelCase (最初の文字も大文字) にします。
例: SongServerRequest
フィールド名 (oneof や extension のフィールド名も含む) は unserscore_separated_names のようにアンダースコアで文字をつなぎます
例: song_name

message SongServerRequest {
  required string song_name = 1;
}

このフィールド名の命名規則は下記の Accessor にしてもらえます。

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 フィールド

repeated フィールドは複数形の名前を使います。

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

enum

enum タイプは CamelCase (最初の文字も大文字) で、値の名前は CAPITALS_WITH_UPDERSCORES (大文字のスネークケース) を使います。

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

各 enum の値の最後はコンマではなくセミコロンを使うべきです。
一般的には enum の値は message の括弧の中の代わりとなります。
0 の enum の値は UNSPECIFIED の接尾辞を持つべきです。

service

.proto に RPC service を定義する場合、service名と RPC メソッド名の両方とも CamelCase (最初の文字も大文字) を使うべきです。

service FooService {
  rpc GetSomething(FooRequest) returns (FooResponse);
}

避けるべきこと

  • required フィールドの利用 (proto2 のみ)
  • group 修飾子の利用 (proto2 のみ)

References

Date

2020/12/04

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7