ToolConvoyToolConvoyv2.6
DATA

JSON Schema ジェネレーター — サンプルデータから JSON Schema を生成

サンプル JSON データから JSON Schema(Draft 2020-12)を生成。型・フォーマット・必須フィールドを自動推論。ブラウザ内で動作。アップロードなし、制限なし。

● ローカル動作 · ゼロコピーパイプラインページ読み込み以降のツールによる通信:0件

JSON Schema Generator

Generate a JSON Schema from sample JSON data. The tool infers types, detects required fields, and handles nested objects and arrays. Supports JSON Schema draft 2020-12. Works entirely in your browser.

JSON Schema は、JSON データの形状を記述する標準的な手段です。型付き言語における TypeScript の interface、Go の struct、Python の型ヒントと同じ役割を果たします。つまり、どのようなフィールドが存在し、それぞれがどんな型を持ち、どんな値を許し、どれが必須かを示す、機械可読の記述です。異なるのは JSON Schema 自体が JSON であるという点で、記述対象のデータを扱うツールと同じ仕組みで保存・転送・処理できます。現行仕様は Draft 2020-12 で、旧仕様の Draft 7 や Draft 4 から、再帰型・条件付き schema・細かな改良が加えられています。

サンプルデータから schema を生成するのは、標準的な出発点です。代替手段である手書きは、小規模で既知のデータ形状なら可能ですが、現実の API(数十のエンドポイントと数百のフィールド)を相手に手書きするのは非現実的です。サンプルからの推論が適切な出発点ですが、推論の精度はサンプルしだいという前提があります。すべてのサンプル行に現れるフィールドは必須、サンプル内で 1 回だけ文字列値が出たフィールドは文字列と推論されます。ただし、そのフィールドが本来 enum であることや、文字が字符串が特定のパターンに合致すべきこと、配列が最小長を持つべきことは推論では分かりません。それらの制約は推論のあとに手作業で加えます。

最後に受け渡しの話をします。行き先が API ドキュメント(OpenAPI、Swagger)なら、生成された schema が出発点となり、description・examples・制約を加えて本番 ready にします。行き先が型付き言語のクライアント(TypeScript、Go、Rust、C#、Java)なら、JSON Schema を quicktype のようなコードジェネレーターに投入して、対応する型を生成します。行き先がランタイムバリデーター(JavaScript の ajv、Python の jsonschema、Java の networknt)なら、schema がそのまま入力となり、処理前に受信データを schema で検証します。生成された schema は強力な出発点ではありますが、人間のレビューに代わるものではありません。

広告

使い方

  1. サンプル JSON を貼り付ける

    JSON ドキュメント、または JSON オブジェクトの配列を入力欄に貼り付けます。生成器がデータを走査し、すべてのオブジェクトに共通して現れるキーに基づいて型を推論し、必須フィールドを検出します。

  2. 推論オプションを選ぶ

    「detect format」を有効にすると、よくあるパターンに合致する文字列値にフォーマットヒント(email、date-time、uri、uuid)が付きます。「merge examples」を有効にすると、元データを `examples` として schema に含めます。

  3. schema をコピーまたはダウンロード

    生成された JSON Schema をクリップボードにコピーするか、.json ファイルとしてダウンロードします。出力は Draft 2020-12 互換で、あらゆるモダンな schema バリデーターで検証できます。

よくある質問

必須フィールドはどう判定されますか?

サンプル内のすべてのオブジェクトにそのフィールドが現れていれば、必須としてマークされます。サンプルが単一オブジェクトなら、すべてのキーが必須です。サンプルがオブジェクトの配列なら、すべてのオブジェクトに共通するキーのみが必須です。サンプルデータを増やすほど、推論の精度は高まります。

文字列の format は検出できますか?

はい ——「detect format」が有効なら、文字列値は常见パターンでテストされます。`2023-01-15T10:30:00Z` は `format: date-time` に、`[email protected]` は `format: email` に、`https://example.com` は `format: uri` になります。検出は保守的で、1 か所でも不一致があればそのフィールドのフォーマットヒントは無効になります。

ネストされたオブジェクトや配列は扱えますか?

ネストされたオブジェクトはネストされた `properties` ブロックになり、オブジェクトの配列はオブジェクトの形を記述する `items` schema になります。schema は完全に再帰的で、ネストのすべての階層がそれぞれの推論構造として取り込まれます。

生成された schema はバリデーションに使えますか?

はい —— 出力は Draft 2020-12 互換で、ajv、jsonschema(Python)、その他のモダンなバリデーターで検証を通ります。Draft 7 や Draft 4 のみ対応の古いバリデーターを対象にする場合は、2020-12 固有のキーワード(`prefixItems`、`if/then/else` など)を取り除く後処理をしてください。

生成された schema は編集できますか?

はい —— 生成された schema は通常の JSON です。制約(minLength、maximum、pattern)を追加したり、`description` フィールドでドキュメント化したり、推論された型を調整したりできます。出力は出発点であって完成形ではありません。データ形状の真実とする前に、必ずレビューしてください。

制限事項

  • 推論の精度はサンプルしだいサンプルから文字列と推論されたフィールドが、実際には数字の入力ミスだったということもあります。schema が反映するのはサンプルに見えた姿であって、データが本来あるべき姿ではありません。真実とする前に、複数の実サンプルで検証してください。
  • ユニオン型は推論されませんサンプル内に文字列と数値が混在するフィールドは、最初に見つかった型として推論され、ユニオン型(`oneOf` や `anyOf`)にはなりません。多相的なデータについては、均質なサンプルから複数の schema を生成し、手作業で組み合わせてください。
  • 参照の重複排除は行いません同じオブジェクト形が複数箇所に現れると、schema はそれぞれの出現ごとに個別の `properties` ブロックを生成します。schema を共有したい場合は、手動で `$ref` を使って単一の定義を指すようにリファクタリングしてください。

プラットフォーム別の注意点

macOS
コマンドラインであれば、Python の `gen-jsonschema` や `inferjson` が同様の推論を行います。本ブラウザツールは、Python パッケージをインストールするほどのセットアップが割に合わない、スポット的な schema 生成に向いています。
Windows
PowerShell は JSON Schema をネイティブに生成できません。本ブラウザツールはアドホックな生成に適しています。ビルドパイプラインには `quicktype` CLI や Python ベースのジェネレーターを使ってください。
Linux
`quicktype --lang schema --top-level PascalCase` は多言語に対応する標準的な CLI 代替です。本ブラウザツールは、チャットや API レスポンスから貼り付けた JSON をその場で生成する用途に向いています。
Web
完全にクライアントサイドで動作します。ページの読み込みが完了すればオフラインでも動作します。コマンドラインツールや Python 環境が利用できない制限環境でも便利です。
広告
広告