JSONスキーマジェネレーター

1つまたは複数のJSONサンプルを貼り付けると、ジェネレーターが新しいペイロードの検証に使えるJSONスキーマを推論します。型を検出し、すべてのサンプルに現れるフィールドを必須としてマークし、値が小さな閉じた集合から取られている場合は列挙型(enum)を推論し、JSONスキーマ draft 2020-12 に準拠した出力を生成します。

JSONスキーマの生成方法

  1. 1

    サンプルドキュメントを貼り付ける

    1つまたは複数の実際のペイロードを用意します。バリエーションが多いほど、推論されるスキーマは正確になります。

  2. 2

    ドラフトを選ぶ

    draft 2020-12(現行)、draft 07(広くサポート)、または draft 04(レガシーな OpenAPI 向け)。

  3. 3

    推論を調整する

    enum推論の切り替え、必須フィールドの戦略(積集合か和集合か)、そしてサンプルが1つだけのときにすべてのフィールドを `required` としてマークするかどうかを設定します。

  4. 4

    生成する

    スキーマは `$schema`、`title`、`type`、`properties` とともに出力され、繰り返し現れるサブオブジェクトにはネストした `$ref` が付与されます。

推論が得意なこと

  • : string、number、integer、boolean、null、array、object。
  • null許容性: あるサンプルで null、別のサンプルで文字列となるフィールドは ["string", "null"] になります。
  • 配列の要素: 同質な配列は単一の items スキーマを、異質な配列は prefixItems を生成します。
  • 列挙型(enum): 観測された値がすべて小さな集合に収まる場合(設定可能、デフォルトは10種類の異なる値)、enum を出力します。
  • 必須: 複数のサンプルがある場合、キーの積集合が required になります。サンプルが1つの場合は、オプトアウトしない限りすべてのキーが必須になります。
  • フォーマット: ISO-8601 の日付、メールアドレス、URI に一致する文字列には format が推論されます。

推論では分からないこと

  • 意図と例の違い: サンプル age: 25 からは type: integer が推論されますが、null も受け入れるかどうかまでは分かりません。エッジケースを網羅した複数のサンプルを渡してください。
  • 制約: minLengthmaximumpattern などは手動で追加する必要があります。推論はサンプルから上限・下限を推測しません。
  • ビジネスロジック: 「この3つのフィールドのうち、ちょうど1つだけを設定する」といった条件には oneOf が必要で、推論はできません。
  • 参照: ジェネレーターはフラットなスキーマを出力します。繰り返される形状を $defs に切り出したい場合は、生成後に行ってください。

出力例

1つのサンプルから:

{ "name": "Alice", "age": 30, "tags": ["admin", "user"] }

推論されたスキーマ(draft 2020-12):

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "age": { "type": "integer" },
    "tags": { "type": "array", "items": { "type": "string" } }
  },
  "required": ["name", "age", "tags"]
}

よくある間違い

  • 1つのサンプルだけから推論する。 スキーマが過剰適合し、すべてのフィールドが必須になり、null が許容されなくなります。必ず5〜10件の多様なサンプルを与えてください。
  • number のつもりで integer を使う。 いずれかのサンプルに小数があれば推論される型は number に、すべて整数なら integer になります。どちらもあり得るフィールドには、小数を含むサンプルを入れてください。
  • 任意フィールドを見落とす。 5件中4件に存在し1件で欠けているフィールドは任意になります(これは意図どおり)。もし5件すべてにたまたま含まれていると、実際にはAPI上で任意であっても、スキーマは必須としてマークします。

よくある質問

多いほど良いですが、通常は5〜10件の多様なサンプルがあれば妥当なスキーマが得られます。サンプルが1件だと、すべてのフィールドが必須になり、null許容性も推論できません。可能な限り複数のバリエーションを用意してください。

デフォルトは draft 2020-12 です。OpenAPI 3.0 との互換性のため(OpenAPI は draft 05/07 のサブセットを使用)、draft 07 と draft 04 も利用できます。

いいえ。サンプルから制約を推論するとスキーマが過剰適合してしまいます。minLengthmaximumpattern などは、生成後にビジネスルールに基づいて手動で追加してください。

はい。JSON配列を貼り付けると、ジェネレーターは各要素を個別のサンプルとして扱い、外側の配列ではなく個々の要素を記述するスキーマを生成します。外側の配列そのものの形状が欲しい場合は「配列コンテナとして扱う」をオンにしてください。

関連ツール

このツールは他の言語でも利用できます