ルートは最初のmessageから選ばれる
enumやserviceではなく、ソース内で最初に宣言されたmessageが初期ルートです。設定欄で完全修飾名を選ぶと変更できます。ソースを編集すると選択はリセットされるため、削除した型が古い選択のまま残りません。
Protocol Buffersの定義
importを必要としないproto3定義を入力し、構造、整形済みソース、JSONの形を切り替えて確認できます。
ソースはブラウザ内で処理します。import先の取得やネットワーク送信は行いません。
単一ファイルのproto3サブセットに対応。import、独自オプション、コンパイル、互換性チェックは対象外です。ソースの編集でルート選択がリセットされます。
上限:UTF-16で100,000文字、20,000トークン、2,000宣言、32階層。タイムアウトは8秒です。
結果が古いため、コピーとダウンロードを無効にしています。
Protobuf整形が必要になるのは、短く詰められた定義をレビューしたいときだけではありません。読みやすいソースにも、重複したフィールド番号や解決できない型参照は残り得ます。このワークベンチは対応範囲の宣言を確認してから結果を生成します。
ツリーにはソース上の名前、wire上の番号、解決先の型を表示します。JSON Schemaが示すのは選択したメッセージのデータ形状です。サービス定義や過去に使った番号など、投影に含まれない情報を確認するため、元の契約も残してください。
Protobuf整形では宣言順を維持し、ネストされた型の参照先を完全修飾名で表示します。OuterA.ItemとOuterB.Itemは別の定義です。自己参照はパスとして示すため、循環するメッセージでもツリーが無限に展開されることはありません。
一つのファイルに複数のmessageがある場合も、JSON Schemaのルートを指定できます。各定義を$defsにまとめ、参照は$refで表現します。繰り返し、map、oneofを見比べながら、利用側が期待する形を確認できます。
enumやserviceではなく、ソース内で最初に宣言されたmessageが初期ルートです。設定欄で完全修飾名を選ぶと変更できます。ソースを編集すると選択はリセットされるため、削除した型が古い選択のまま残りません。
ツリーの宣言は折りたたみ可能で、行番号からソース位置へ戻れます。長い結果は可視項目を50件ずつ表示します。構造データのコピーには折りたたんだ項目や未表示の項目も含まれ、表示のために内容が失われることはありません。
入力後350ミリ秒で自動チェックが走ります。オフにすると実行ボタンとCtrl/Cmd + Enterが使えます。変更直後は古い結果をエクスポートできません。サンプルとクリアは置換文字数を確認してから適用し、一度だけソースと結果を同時に戻せます。
インデントは2または4スペース。文字列内の波括弧やセミコロンを構造として処理せず、コメントの内容も保ちます。名前、番号、フィールド順は変更しません。整形結果を別欄に出し、再解析した記述子が元と一致することを確認してからエクスポートを許可します。
メッセージ内のタグは正の整数で、一意かつ19000–19999の範囲外である必要があります。後から書かれたreservedも検査対象です。enumでは最初の値がゼロか、数値エイリアスにallow_aliasがあるか、予約と競合していないかを別に調べます。
package、message、enum、oneof、service、RPCをツリーで確認できます。型の検索範囲は同じファイル内です。参照先がなければ出力を停止し、任意のオブジェクトで代用しません。JSON側がlowerCamelCaseでも、ツリーのフィールドは元のsnake_caseを保持します。
repeatedは配列、mapはオブジェクト、int64は文字列に対応させます。完全修飾名を$defsに使うため、同名のネスト型を上書きしません。oneofはゼロまたは一つのメンバーを許可します。普通のフィールドもoptionalも省略可能で、勝手にrequiredを追加しません。
メッセージのタグは1から536870911までで、19000から19999は実装用に予約されています。一方、proto3のenumは最初の宣言値がゼロでなければなりません。似た数字でも役割が違うため、このツールはフィールド番号と列挙値を別々の規則で確認します。
連番である必要はありません。たとえば1の次が20でも、重複や予約との競合がなければ有効です。整形では空きを詰めず、宣言順も保ちます。削除した番号を再利用させたくない場合はreservedを使います。単なる欠番だけでは過去の利用履歴は記録されません。
型の前にoptionalを付けると、生成コードで明示的な存在性を扱えます。ツリーにもその宣言を表示します。ただしJSON Schemaでは通常の単一フィールドもoptionalも省略可能です。生成されるhasメソッドや、未設定と既定値の違いまで表現するものではありません。
JavaScriptの通常の数値では64ビット整数の全域を正確に保持できません。一般的なProtoJSON出力は十進文字列を使うため、投影でも文字列にします。Numberへ変換して精度を落とす処理はありません。ただしパターンが確認するのは書式であり、符号付き・符号なしの正確な値域には追加検証が必要です。
コンパイラーは設定された検索ルートから依存ファイルを探します。この画面にはファイルツリーや依存解決の環境がないため、パスの正しさにかかわらずimportを拒否します。依存ファイルをそろえたprotocやBufを利用してください。パスを取得したり、宣言を無視して成功にしたりはしません。
対応すべき定義で問題がありましたか?
Protobuf整形で対応範囲の構造を確認し、ソースと見直したJSONの形をプロジェクトへ戻してください。最終コンパイルには完全な依存関係が必要です。