本文へ移動
Develop Tools
← 使い方ガイドへ戻る

JSONサンプルからJSON Schemaを自動生成する方法

JSON Schemaを最初から手書きすると、ネストしたobjectやarray、null許容、必須項目を見落としやすくなります。実データではなく安全なサンプルから骨格を作り、業務ルールを追記すると効率的です。

JSONサンプルを入力し、推定警告を確認してJSON Schemaを保存する流れ
JSONサンプルを入力し、推定警告を確認してJSON Schemaを保存する流れ

生成前に用意するJSONサンプル

  • 通常値、空文字、null、0、falseを含む代表的なデータ
  • 任意項目が存在する場合と存在しない場合の両方
  • 配列が空の場合と、1件以上の要素を持つ場合
  • 成功レスポンスとエラーレスポンスなど構造が異なるパターン

単一サンプルではなく差分を含む複数サンプルを使う

必須項目を「すべてのサンプルにある項目」で判定するには、通常系だけでなく任意項目なし、null、空配列、異なる配列要素を含む複数の.jsonファイルを読み込みます。貼り付け欄は1件のJSON文書として扱われるため、複数サンプルはファイル入力を使います。

観点判断
通常系だけ任意項目を必須と誤認しやすい
欠損を含む複数件共通項目と任意項目を分けられる
nullだけnull以外の本来の型は推定できない
空配列だけitemsは空Schemaとなり型を確定できない

JSON Schemaを生成する手順

  1. JSONを貼り付けるか、複数の.jsonファイルをまとめて開きます。
  2. 利用環境に合わせてDraft 2020-12またはDraft-07を選びます。
  3. requiredの判定、追加プロパティ、配列、format、enumの設定を選びます。
  4. Schemaを生成し、空配列、nullのみ、混在型などの警告を確認します。
  5. コピーまたは保存したSchemaへ、最小値、最大値、pattern、説明を追記します。

生成後に人が確認する項目

サンプルに現れなかった値は推定できません。数値の範囲、文字列の長さ、許可するenum、追加プロパティの扱い、業務上の必須項目はAPI仕様や利用側の実装と照合します。

formatは文字列の見た目から推定されます。偶然メールアドレスやUUIDに見える識別子もあるため、意図した制約か確認してください。

生成されたJSON Schemaは仕様書の完成版ではなく、手作業を減らすための開始点です。代表サンプル以外の正常系・異常系データでも検証してください。

JSON Schema生成ツールで自動化できる範囲

項目自動生成できる内容生成後に人が決める内容
object、array、string、integer、number、boolean、null業務上許可する型、型変換の方針
必須項目全件・共通・なしの3方式API契約として本当に必須か
配列共通itemsまたは位置別tuple件数、重複、並び順の制約
文字列UUID、日時、メール、IP、URI等のformat候補長さ、pattern、formatを検証するか
値の候補設定を有効にした場合のenum候補将来値を含む正式な許可値
オブジェクトpropertiesとadditionalPropertiesの選択$defs/$ref、条件分岐、業務ルール

サンプルから分かるのは観測したデータの構造です。サンプルに現れない正常値・異常値や業務上の契約までは完全に推定できません。

仕様を確認するときの一次資料

JSON SchemaのDialectや各バリデーターの対応範囲は更新されます。実装へ組み込むときは、利用するDialectを$schemaで明示し、対象ライブラリと連携先サービスの公式資料も確認してください。

具体例:注文APIのレスポンスからSchemaを作る

注文APIでは、通常注文にだけ存在する配送先、キャンセル時だけ存在する理由、明細が空のケースなどがあります。成功例を1件だけ使うと、任意項目を必須と誤認したり、空配列の要素型を推定できなかったりします。

通常、キャンセル、明細なしの3種類を別々のJSONファイルとして読み込むと、すべてに存在する注文IDだけをrequiredにし、任意項目を残したSchemaの骨格を作れます。

  1. 個人情報を含まない通常注文、キャンセル、明細なしのサンプルを用意します。
  2. 複数の.jsonファイルを同時に開き、必須項目を「すべてのサンプルにある項目」にします。
  3. Draftとformat推定を選び、Schemaを生成します。
  4. 空配列、nullのみ、混在型の警告を確認し、API仕様に合わせて型と制約を補います。

サンプルへ実際の顧客情報や認証情報を入れる必要はありません。構造と値の種類を保ったダミーデータで生成できます。

よくある質問

生成されたSchemaをそのまま本番で使えますか?
推奨しません。必須条件、数値範囲、文字列長、pattern、enum、additionalPropertiesなどをAPI仕様と照合し、正常系・異常系データで検証してください。
空配列からitemsの型を生成できますか?
空配列には要素がないため型を確定できません。要素を持つ別サンプルを追加するか、生成後にitemsを手動で指定してください。

ブラウザで試す

入力内容はブラウザ内で処理されます。元データを残したうえで、結果を確認してから保存・共有してください。