.proto 定義を読み取り、メッセージ、フィールド型、タグ、gRPC メソッドを一覧表示します。最初のメッセージの構造化 JSON 例を生成します。
ブラウザ内でローカルに実行Protocol Buffers の定義を貼り付けて「ローカルで検査」を押すと、テキストから読み取れた内容が一覧になります。syntax 行、パッケージ、ファイル順に並んだ各メッセージとそのフィールド、値付きの enum、oneof グループ、メソッド付きの gRPC サービス(ストリーミングはその旨を表示)です。ファイル内の最初のメッセージについては構造化 JSON の例も生成します。コンパイルも送信も行いません。protoc も gRPC 呼び出しもサーバーとの往復もありません。
proto2 と proto3 を同じ方式で、パターンで読むため、得られるのは protoc の解釈ではなく書かれている内容そのものです。ブラウザのネットワークパネルを開いた状態で検査してもリクエストは 1 件も発生せず、概要・カウンター・表はタブ内で組み立てられます。
値の型は proto3 JSON の符号化に合わせます。string フィールドは "example"、int64 と uint64 は文字列 "0"、bytes は "base64-data"、bool は true、repeated は要素 1 個の配列になります。map フィールドはプレースホルダーのキーを 1 つ持つオブジェクトに、メッセージ型のフィールドはネストしたオブジェクトに展開されます。
enum 型のフィールドはその enum で最初に宣言された値を取るため、Currency フィールドは数値ではなく "CURRENCY_UNSPECIFIED" になります。自分自身を参照するメッセージは空オブジェクトで打ち切り、例が無限に膨らまないようにしています。例が付くのはファイル内の最初のメッセージだけなので、見たい型を先頭に置いてください。
貼り付けたテキストに宣言がない型(google.protobuf.Timestamp や import 先のメッセージなど)は、例では空オブジェクトになり、パネルに「1 field type(s) come from imported or external definitions」のような注記が付きます。型名自体は概要と表に残ります。
import 先のファイルを取得することはありません。import 行は出力を変えず、ページからリクエストも出ません。例は実スキーマと突き合わせるための構造の下書きであり、そのままサーバーへ送れるペイロードではないと考えてください。
コメント(// と /* */)は無視し、文字列リテラル内の文字は解釈しないため、[default = "{"] のような既定値も正しく読めます。ネストしたメッセージはドット名を持つ独立した項目になり、親メッセージには直下に宣言されたフィールドだけが並びます。
意図的に外す行もあります。reserved 文、extensions の範囲、option java_package = "com.acme"; のようなファイルオプション、import 行です。これらは概要にも表にもカウンターにも現れず、出力が説明するのはメッセージ・enum・フィールド・RPC だけです。
message・enum・service の宣言がないテキストは「No message, enum or service declaration was found in this .proto text.」で停止し、閉じ忘れたブロックは「Unclosed message block: User」のようにブロック名付きで停止します。パターンで読むため protoc 相当の検証はありません。フィールド番号の重複、tag 0、予約範囲 19000–19999 の tag もそのまま一覧に出ます。
見つけた内容をすべて列挙するため、出力はファイルに比例して大きくなります。600 メッセージを含む 305 KB で 12,200 行が約 0.3 秒、3,000 メッセージの 1.5 MB で 60,200 行が Chrome で 2 秒未満でした。表の enum 行は先頭 12 個の値のあとに省略記号を付けますが、概要はすべて出力します。