JSONスキーマからProtobuf定義への変換 — Numio
object 型の JSON Schema を proto2 の message 定義に変換します。フィールドはプロパティの順に番号が振られます。必須プロパティは "required"、それ以外は "optional"、配列は "repeated" になり、ネストしたオブジェクトはネストした message と、それを使うフィールドになります。
イベントの JSON Schema があり、gRPC や Kafka パイプライン向けに編集する .proto message のたたき台がほしい場合。
こんなときに使えます
- イベントの JSON Schema があり、gRPC や Kafka パイプライン向けに編集する .proto message のたたき台がほしい場合。
- message を自分で書く前に、既存スキーマのスカラーフィールドがどの protobuf 型に対応するかを確認したい場合。
使い方
- ルートが "type": "object" の JSON Schema を貼り付けます。message 名は "title" を PascalCase にしたもの(または "name" キー)になり、どちらもなければ Root です。
- 変換はブラウザ内で行われます。設定項目はありません。
- Protobuf パネルから proto2 のテキストをコピーし、.proto ファイルで使う前に型を確認します。
JSON Schema
{
"title": "Order",
"type": "object",
"properties": {
"id": { "type": "string" },
"quantity": { "type": "integer" },
"price": { "type": "number" },
"paid": { "type": "boolean" },
"tags": { "type": "array", "items": { "type": "string" } },
"shipping": { "type": "object", "properties": { "city": { "type": "string" } } }
},
"required": ["id", "quantity"]
}Protocol Buffers (proto2)
syntax = "proto2";
message Order {
message Shipping {
optional string city = 1;
}
required string id = 1;
required int32 quantity = 2;
optional double price = 3;
optional bool paid = 4;
repeated string tags = 5;
optional Shipping shipping = 6;
}仕様と制限
変換はサイト独自のコンバーターによりブラウザ内で行われ、スキーマはサーバーに送信されません。
integer は int32(format が int64 の場合や 32 ビットの範囲を超える境界値がある場合は int64)、number は double(format が float なら float)、boolean は bool になります。配列の要素型も同じ規則で対応付けられます。
文字列の enum は接頭辞付き UPPER_SNAKE の値を持つネストした enum に、additionalProperties のスキーマは map<string, T> になります。definitions や $defs へのローカルな $ref はトップレベルの message を指します。
配列の配列、null 以外の分岐が複数ある oneOf/anyOf、型のないプロパティは string にフォールバックします。別ファイルへの $ref はエラーになります。
FAQ
proto3 を生成できますか?
いいえ。出力は常に syntax = "proto2" で始まり、required/optional ラベルを使います。
message 名はどう決まりますか?
ルートの "title" を PascalCase にしたもの("Example Schema" なら ExampleSchema)、または "name" キーから決まります。どちらもなければ Root です。ネストした message と enum はプロパティ名から命名されます。
["string", "null"] のような null 許容フィールドはどう扱われますか?
null の部分は除かれ、残りの型が使われます。たとえば ["number", "null"] は optional double height になります。proto2 の optional フィールドはもともと省略可能です。
スキーマはアップロードされますか?
いいえ。このページはブラウザ内でスキーマを変換し、サーバーの API を呼び出しません。