Java Proto 名
このドキュメントには、さまざまな proto オプションに基づいて、proto の完全修飾 Java 名がどのように決まるかに関する情報が含まれています。この名前は、そのメッセージを使用するためにインポートする必要があるパッケージに対応しています。
推奨事項
- `option java_multiple_files = true;` を設定する
- `option java_outer_classname = "FileNameProto";` を設定する
- `option java_package = "com.google.package";` を設定する
説明
複数のファイル
`java_multiple_files = true` を設定すると、各メッセージの生成された Java クラスが個別の `.java` ファイルに配置されます。これにより、メッセージをある `.proto` ファイルから別のファイルに移動するのが非常に容易になります。
アウタークラス名
`.proto` ファイル自体に対して Java クラスが生成されます。ファイル用のクラス名は、指定しない場合、自動的に生成されます。しかし、その名前が生成されるルールは過度に複雑で分かりにくいものです。最善のポリシーは、`java_outer_classname` オプションを、`.proto` ファイル名から `'.'` を削除し、PascalCase に変換したものに明示的に設定することです。例えば、
ファイル `student_record_request.proto` は以下を設定すべきです
option java_outer_classname = "StudentRecordRequestProto";
Java パッケージ
生成されるバインディングの Java パッケージは、proto パッケージに自動的に設定されます。しかし、これは通常、Java の慣例に準拠していません。慣例に沿った Java パッケージ名を確実にするために、`java_package` オプションを明示的に設定することを推奨します。例えば、Google 社内では、proto パッケージの前に `com.google.` を付加する慣例があります。
不変 API メッセージ名
protoc の Java プラグインは、この表に従って名前を生成します。
java_multiple_files | java_package | java_outer_classname | 生成される完全なメッセージ名 |
---|---|---|---|
true | 未定義 | 無視 | com.google.protos.$package.$message |
true | 定義済み | 無視 | $java_package.$message |
false | 未定義 | 未定義 | com.google.protos.$package.$derived_outer_class.$message |
false | 未定義 | 定義済み | com.google.protos.$package.$java_outer_classname.$message |
false | 定義済み | 未定義 | $java_package.$derived_outer_class.$message |
false | 定義済み | 定義済み | $java_package.$java_outer_classname.$message |
凡例
$message
は proto メッセージの実際の名前です。$package
は proto パッケージの名前です。これは、通常ファイルの先頭にある proto ファイル内のpackage
ディレクティブによって指定される名前です。$derived_outer_class
は proto ファイル名から生成される名前です。通常、ファイル名から句読点を削除し、PascalCase に変換して計算されます。例えば、proto がfoo_bar.proto
の場合、$derived_outer_class
の値はFooBar
です。生成されるクラス名が proto ファイルで定義されているメッセージのいずれかと同じになる場合、
derived_outer_class
にOuterClass
が付加されます。例えば、proto がfoo_bar.proto
でFooBar
メッセージを含む場合、$derived_outer_class
の値はFooBarOuterClass
です。定義されているメッセージのいずれかと同じクラス名になるかどうかに関わらず、v1 API を使用する場合も同様です。その他のすべての
$names
は、.proto
ファイルで定義されている対応するファイルオプションの値です。