JSON Schema ジェネレーター
JSONデータから標準準拠のJSON Schema定義を自動生成
// JSON Schemaが自動的に生成されますJSON Schemaとは?
JSON SchemaはJSONデータ構造を記述・検証するための仕様です。構造、データ型、制約のルールを定義し、API検証、フォーム検証、設定ファイル検証などで広く使用されています。
JSON Schemaでできること:
- データ検証:JSONデータが期待される形式と制約に一致するか検証
- ドキュメント生成:APIドキュメントと型定義を自動生成
- コードインテリジェンス:IDEでスマート補完と型チェックを取得
- 自動テスト:テストでレスポンスデータ形式を自動検証
このツールはJSON Schema Draft-07仕様をサポートし、ネストオブジェクト、配列型、列挙値などの複雑な構造をインテリジェントに推測します。
使い方
使い方
- 左の入力ボックスにJSONデータを貼り付けるか、「サンプル」をクリックしてサンプルデータを読み込みます
- オプションを設定します:スキーマIDの指定、全フィールドを必須にするかどうか、デフォルト値の追加など
- 右側に対応するJSON Schema定義が自動生成されます
- 「コピー」をクリックして生成されたスキーマをクリップボードにコピーします
- 生成されたスキーマをAPIバリデーション、フォームバリデーション、設定ファイルの検証などに使用できます
スキーマのヒント
- 生成されるスキーマは提供したサンプルJSONを反映します。コピー前に、代表的なオプショナルフィールド、null値、配列、エッジケースを含めてください。
- 必須フィールドや数値/文字列のフォーマットを手動で確認してください。サンプルベースの推論ではビジネスルールを常に把握できるとは限りません。
利用シーン
仕組み
JSON SchemaはJSONドキュメントに注釈を付け検証するための宣言的な語彙で、複数のIETFドラフト(Draft 4 / 6 / 7 / 2019-09 / 2020-12)にわたって定義されています。最新はDraft 2020-12で、7つのプリミティブ型(string、number、integer、boolean、array、object、null)、拡張可能なformat語彙(email、uri、date-time、uuid、ipv4、hostnameなど)、そして数十の制約キーワードを定義しています:pattern(正規表現)、minimum/maximum/exclusiveMinimum/exclusiveMaximum(数値範囲)、minLength/maxLength(文字列長)、minItems/maxItems/uniqueItems(配列制約)、required(オブジェクトレベルの必須配列)、additionalProperties(追加フィールドの許可与否)、enumとconst(許容値)、$ref(サブスキーマの再利用)。本ページはデフォルトでDraft 2020-12を出力し、ドロップダウンから旧来のDraft-07(本番スキーマで最も一般的)を選択できます。 ジェネレーターの推論は、ユーザーが提供したJSONを1パスで走査し、スキーマオブジェクトを再帰的に構築します。推論の中核となるマッピングは以下の通りです:整数(Number.isIntegerかつ小数部なし)→ {type: 'integer'}、浮動小数点 → {type: 'number'}、文字列 → {type: 'string'}、真偽値 → {type: 'boolean'}、配列 → {type: 'array', items: <最初の要素を再帰>} またはDraft 2020-12のタプル用に{type: 'array', prefixItems: [...]}、オブジェクト → {type: 'object', properties: <各キーを再帰>}、null → {type: 'null'}。要素の型が混在する配列では、観測された各型をカバーするoneOfサブスキーマを出力します。 複数のサンプルオブジェクトがある場合、ジェネレーターはそれらを比較してrequiredリストを構築します。すべてのサンプルに存在するキーは必須となり、いずれかのサンプルで欠けているキーはオプションとなります。パターンと制約はサンプルがクラスタ化している場合に推論されます:フィールドのすべての数値が[1, 100]の範囲にある場合、{type: 'integer', minimum: 1, maximum: 100}を出力し、文字列フィールドが常にUUIDであればformat: 'uuid'とpattern: '^[0-9a-f]{8}-...'正規表現を付与します。enumヒューリスティックは、文字列フィールドがサンプル全体で10以下の異なる値を取る場合(例:role: 'admin' | 'editor' | 'viewer'がすべて観測された場合)に発動し、enum配列を出力します。 深くネストされたオブジェクトと再帰構造は$defsセクション(Draft 2020-12。旧来の$definitionsはDraft-07のキーワード)に抽出され、$refで参照されます。再帰構造(例:treeノードのchildrenフィールドがtreeノード型)は親の$defsエントリを指すスタブ$refを受け取り、バリデーターは検証時にこれを解決します。ジェネレーターはrefとinlineの適切なトレードオフを自動的に選択します。浅いスキーマはインラインのまま、深いスキーマは出力の可読性を保つために定義に分割されます。生成されたスキーマは入力に対して決定論的です。同じJSONサンプルは常に同じスキーマを生成し、ジェネレーターはリモート呼び出しのない純粋なJavaScriptで実装されています。
- 型推論ルール:整数値 → integer、浮動小数点 → number、文字列 → string、真偽値 → boolean、配列 → array + items、オブジェクト → object + properties。JSON null → type: null(Draft 6+)またはtype: 'null'文字列。
- 必須フィールド検出:すべてのサンプルオブジェクトを比較し、すべてのオブジェクトに存在するフィールドは必須としてrequired配列に追加。欠けているものはオプション。単一サンプル入力ではヒューリスティックが少なくとも2つのサンプルを必要とするため、required: []となる。
- enum推論ヒューリスティック:フィールドがサンプル全体で少数の有限な異なる文字列値を取る場合(基数 <= 10)、enum制約として自動認識。より大きな基数はプレーンなstring型のまま。
- 自動検出されるformat:文字列の特徴に基づき、フィールドにemail、uri、date-time、uuidなどのformatヒントを付与しドキュメント化と検証に活用。formatキーワードはDraft 2020-12では情報提供用であり、バリデーターは強制するか無視するかを選択できる。
- ネストされた$ref抽出:深くネストされたオブジェクトは内部$defs(Draft 2020-12キーワード。旧来の$definitionsはDraft 7)に抽出され$refで参照され、スキーマの冗長化を防ぐ。再帰構造は親の$defsエントリを指すスタブ$refを受け取る。
- 制約の拡張:基本型に加え、minimum/maximum(数値範囲)、minLength/maxLength(文字列長)、pattern(正規表現)などの制約も追加可能。ジェネレーターは入力サンプルが特定の値にクラスタ化している場合にこれらを出力する。
- ドラフト選択:2020-12(最新)がデフォルトで$defsを使用。2019-09も$defsを使用。Draft-07は$definitionsを使用し、既存ツールの多くがまだこの形式で出力。Draft 6では必須フィールドがプロパティの兄弟ではなく親のrequired配列に記述される厳密な必須セマンティクスが導入された。
- 合成キーワード(Draft 2019-09+):allOf(すべてのサブスキーマに一致する必要あり)、anyOf(少なくとも1つ)、oneOf(ちょうど1つ)、not(一致してはならない)。ジェネレーターはサンプル値が2つの互いに素なサブスキーマに適合する場合(例:integer vs string)にoneOfを選択する。
使用例
シンプルなオブジェクト -> Schema
{"name": "Alice", "age": 25}
->
{
"type": "object",
"properties": {
"name": { "type": "string" },
"age": { "type": "integer" }
},
"required": ["name", "age"]
}配列を含む Schema
{"tags": ["js", "ts"]}
->
{
"type": "object",
"properties": {
"tags": {
"type": "array",
"items": { "type": "string" }
}
}
}enum を含む Schema
{"role": "admin"}
->
{
"type": "object",
"properties": {
"role": { "type": "string", "enum": ["admin", "user", "guest"] }
}
}よくある質問
JSON Schema とは何ですか?
JSON Schema (現行は 2020-12 ドラフト) は JSON ドキュメントを検証するための語彙です。XML Schema や TypeScript の型と同様に、ドキュメントの想定される形 — どのフィールドが存在するか、その型、範囲、パターン — を記述します。Ajv、Hyperjump、ほとんどの API フレームワークがランタイム検証に利用しています。
ジェネレータはどの JSON Schema ドラフトを出力しますか?
最新のドラフト (通常は 2020-12 または draft-07) です。出力はバージョンを宣言する $schema、適用される場合は $id、type、そしてオブジェクト・配列・文字列・数値・真偽値・null に対応するキーワードで始まります。バリデータが特定の古いバージョンを要求する場合は、ドラフトオプションを切り替えてください。
JSON サンプルからどのように型を推論しますか?
サンプルを走査し、各プロパティの型を記録します。配列については 1 つ以上の要素から items スキーマを推論します (要素が異なる場合は和集合を取ります)。型が混在するプロパティには oneOf や anyOf を使用します。結果として得られるのは寛容な出発点となるスキーマで、制約 (required、minLength、pattern) は手動で厳しくしてください。
すべてのプロパティが required としてマークされますか?
設定可能です。デフォルトでは観察されたすべてのプロパティを required としてマークします。サンプルが 1 つの例にすぎず、他のインスタンスでフィールドが省略されてもよい場合は、「すべて任意」を切り替えてください。生成後に required 配列を編集することもできます。
ネストされたオブジェクトや配列はどう扱われますか?
ネストされたオブジェクトは入れ子の properties ブロックになり、配列は items 定義になります。深いネストも問題なく動作します。同じ形が繰り返し現れる場合は、後で $defs / $ref を使ってリファクタリングできます。ジェネレータは自動では重複排除しません。
サンプルから推論できないものは何ですか?
フォーマット制約 (date-time、email、uuid)、enum メンバーシップ、正規表現パターン、minimum/maximum、minItems/maxItems、依存関係などは、単一サンプルからは判別できないため手動で追加する必要があります。生成されたスキーマを骨組みとして利用し、後で厳しく整えてください。
私の JSON はアップロードされますか?
いいえ。推論はローカルで実行されます。貼り付けた JSON はブラウザから送信されません。