ToolActToolAct

JSON Schema ジェネレーター

JSONデータから標準準拠のJSON Schema定義を自動生成

JSON入力
行数: 1 | 文字数: 0
JSON Schema出力
// JSON Schemaが自動的に生成されます
プロパティ: 0 | 行数: 1

設定オプション

Schema ID
Schemaの一意識別子を設定。通常URI形式で、大規模システムでSchemaを参照・識別するために使用
すべてのフィールド必須
有効にすると、すべてのプロパティがrequired配列に追加され、これらのフィールドがデータに存在する必要があります
デフォルト値を追加
サンプルJSONの実際の値に基づいてdefaultプロパティを自動生成。デフォルト値が必要な設定ファイルに便利
フィールド説明を追加
各プロパティにdescriptionフィールドを自動追加。データ型とソースを記述し、ドキュメント生成に役立ちます
厳格モード
additionalProperties: falseを有効にして、未定義の追加プロパティを禁止。データ構造の厳格な一貫性を確保

JSON Schemaとは?

JSON SchemaはJSONデータ構造を記述・検証するための仕様です。構造、データ型、制約のルールを定義し、API検証、フォーム検証、設定ファイル検証などで広く使用されています。

JSON Schemaでできること:

  • データ検証:JSONデータが期待される形式と制約に一致するか検証
  • ドキュメント生成:APIドキュメントと型定義を自動生成
  • コードインテリジェンス:IDEでスマート補完と型チェックを取得
  • 自動テスト:テストでレスポンスデータ形式を自動検証

このツールはJSON Schema Draft-07仕様をサポートし、ネストオブジェクト、配列型、列挙値などの複雑な構造をインテリジェントに推測します。

使い方

使い方

  1. 左の入力ボックスにJSONデータを貼り付けるか、「サンプル」をクリックしてサンプルデータを読み込みます
  2. オプションを設定します:スキーマIDの指定、全フィールドを必須にするかどうか、デフォルト値の追加など
  3. 右側に対応するJSON Schema定義が自動生成されます
  4. 「コピー」をクリックして生成されたスキーマをクリップボードにコピーします
  5. 生成されたスキーマをAPIバリデーション、フォームバリデーション、設定ファイルの検証などに使用できます

スキーマのヒント

  • 生成されるスキーマは提供したサンプルJSONを反映します。コピー前に、代表的なオプショナルフィールド、null値、配列、エッジケースを含めてください。
  • 必須フィールドや数値/文字列のフォーマットを手動で確認してください。サンプルベースの推論ではビジネスルールを常に把握できるとは限りません。

利用シーン

実際のAPIサンプルからスキーマを起草する代表的なJSONレスポンスを貼り付けて、オブジェクトプロパティ、基本型、ネスト配列、デフォルト値、必須フィールドを捉えたdraft-07スキーマを生成します。バックエンドとフロントエンドのチームがエッジケースを手作業で詰める前に、具体的な出発点を得られます。実際のサンプルは推測よりも優れているため、必須とオプションの区別やenumのメンバーシップは実際にデータに現れたものから推論されます。
設定ファイルをドキュメント化する社内設定のサンプルについては、デフォルト値と説明を有効にして、エディタやドキュメントで役立つスキーマを生成します。厳格モードでadditionalProperties: falseを追加すると、スキーマをバリデーションに組み込んだ際に誤ったキーを検出しやすくなります。設定ファイルが契約に合わなくなったときに失敗するCIチェックとスキーマを組み合わせてください。
バリデーション作業前にデータ構造を探索するジェネレーターはプロパティ数を報告し、サンプルアイテムから配列を推測するため、ペイロードの大まかな規模を素早く把握できます。実際のサンプルがあるものの正式な契約がまだ書かれていない、最初のスキーマ作成段階に特に有効です。構造が把握できたら、スキーマを型ジェネレーターに渡してより強力な型付きバインディングを作成してください。
nullableとrequiredヒントで推論型を厳密にするstrictとnullableオプションを使用して、生成されたdraft-07スキーマがすべてのキーが常に存在すると仮定するのではなく、オプションフィールドを正しくマークするようにします。生成されたrequired配列は手動で確認してください。1つのサンプル値が欠落していると、サーバー側で実際に必須のフィールドが隠れる可能性があるためです。requiredとは別にnullable処理を切り替えて、nullを許容しつつも期待されるフィールドを正確にモデル化できます。
draft-07と2020-12の違いとenum推論を理解するこのジェネレーターはデフォルトでJSON Schema draft-07を出力します。これはAjv、jsonschema、フォームライブラリで今なお最も広くサポートされているバージョンです。新しいプロジェクトではif/then/else、prefixItems、constキーワードを使用するために手動で2020-12にアップグレードしたい場合があります。enum推論はヒューリスティックベースです。文字列フィールドのサンプル全体での異なる値が約10未満の場合、自動的にenumに昇格されるため、statusのように自由形式であるべきフィールドは再確認してください。生成されたdraft-07スキーマを初期ドラフトとして扱い、コンシューマーライブラリが対応していればトランスフォーマーで2020-12に変換してください。

仕組み

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 はブラウザから送信されません。