format / schema

JSON Schema生成ツール

JSONデータを貼り付けるだけでJSON Schema(draft-07)を自動生成します。 型推論・必須フィールド・ネスト構造をブラウザ内で解析。入力データはサーバーに送信されません。

// 「スキーマ生成」ボタンを押すと結果がここに表示されます

使い方

01
  1. JSON入力エリアにスキーマを生成したいJSONデータを貼り付けます
  2. タイトルフィールドに任意のスキーマ名を入力します(省略可)
  3. 「スキーマ生成」ボタンを押すと、JSON Schema(draft-07)が生成されます
  4. 生成されたスキーマは「コピー」ボタンでクリップボードにコピーできます
  5. 配列の場合は最初の要素の型をもとに items スキーマを生成します

実装コード

02

コアロジックは再帰的な型推論で実装しています。buildSchema 関数が値の型を判定し、オブジェクト・配列を再帰的に処理します。外部ライブラリ不要でそのままコピーしてご利用いただけます。

export type Result<T> = { ok: true; output: T } | { ok: false; error: string }

export function generateJsonSchema(value: unknown, title?: string): object {
  const schema = buildSchema(value)
  if (title && typeof schema === 'object' && schema !== null) {
    return { $schema: 'http://json-schema.org/draft-07/schema#', title, ...schema }
  }
  return { $schema: 'http://json-schema.org/draft-07/schema#', ...schema as object }
}

function buildSchema(value: unknown): object {
  if (value === null) return { type: 'null' }
  if (typeof value === 'boolean') return { type: 'boolean' }
  if (typeof value === 'number') {
    return Number.isInteger(value) ? { type: 'integer' } : { type: 'number' }
  }
  if (typeof value === 'string') return { type: 'string' }
  if (Array.isArray(value)) {
    if (value.length === 0) return { type: 'array', items: {} }
    return { type: 'array', items: buildSchema(value[0]) }
  }
  if (typeof value === 'object') {
    const obj = value as Record<string, unknown>
    const properties: Record<string, object> = {}
    const required: string[] = []
    for (const [key, val] of Object.entries(obj)) {
      properties[key] = buildSchema(val)
      if (val !== null && val !== undefined) required.push(key)
    }
    const schema: Record<string, unknown> = { type: 'object', properties }
    if (required.length > 0) schema.required = required
    return schema
  }
  return {}
}

export function generateJsonSchemaFromString(input: string, title?: string): Result<string> {
  try {
    const parsed = JSON.parse(input)
    const schema = generateJsonSchema(parsed, title)
    return { ok: true, output: JSON.stringify(schema, null, 2) }
  } catch (e) {
    return { ok: false, error: `JSONパースエラー: ${(e as Error).message}` }
  }
}

よくある使用例・注意点

03
APIレスポンスのバリデーションスキーマ作成
REST APIのレスポンスJSONを貼り付けるだけで、バリデーション用のJSON Schemaを素早く生成できます。生成したスキーマをAjvやzodのベースとして活用することで、型安全なAPI連携を実現できます。
OpenAPI / Swagger仕様書の作成補助
OpenAPI仕様書のcomponentsセクションに掲載するスキーマを手動で書く手間を省けます。実際のレスポンスデータからスキーマを生成し、必要に応じて手動で調整する用途に最適です。
配列の型推論について
配列の場合、最初の要素(index: 0)の型をもとに items スキーマを生成します。配列内に複数の型が混在する場合は、生成後に手動で oneOf などに修正してください。
null値と required フィールドの扱い
プロパティの値が null の場合は required から除外されます。実際の要件に応じて、必要なフィールドを required に追加してください。
プライバシーについて
入力したJSONデータはブラウザ内のみで処理されます。サーバーには一切送信されないため、機密情報を含むAPIレスポンスや設定ファイルも安全に扱えます。

関連ツール

04
JSONフォーマッターJSON → TypeScript型生成JSONパスクエリ

ソースコード

05

このツールのソースコード(テストコードを含む)はGitHubで公開しています。 MITライセンスで自由に利用・改変できます。

GitHub でコードを見る →