カテゴリー: 開発ツール

JSON → Zod スキーマ変換ツール

サイト側で企画したツールツールが見つからない?

データをアップロードせずに、サンプル JSON から Zod スキーマを生成

JSON を貼り付けると、ブラウザー内で Zod スキーマを生成します。オブジェクト、配列、文字列、数値、真偽値、null、任意フィールドを推論し、TypeScript にそのまま使える出力をコピーできます。何もアップロードされません。

Zod スキーマ
import { z } from "zod";

export const userSchema = z.object({
  id: z.number(),
  name: z.string(),
  isActive: z.boolean(),
  score: z.null(),
  tags: z.array(z.string()),
  address: z.object({
    city: z.string(),
    country: z.string(),
  }),
  posts: z.array(z.object({
    slug: z.string(),
    views: z.number(),
    pinned: z.boolean().optional(),
  })),
});

export type User = z.infer<typeof userSchema>;

このサンプルだけから推論しています。フィールドに文字列が入っていたことは分かりますが、その文字列がメールアドレスでなければならない、最小文字数がある、いくつかの許可値のどれかでなければならない、といったことは分かりません。出力は出発点として扱い、ルールはご自身で詰めてください。

このページの処理はすべてブラウザ内で行われます。アップロードは一切ありません。

このページの処理はすべてブラウザ内で行われます。アップロードは一切ありません。

このツールでできること

このツールはサンプル JSON をローカルで読み取り、対応する Zod オブジェクトスキーマを、入れ子のオブジェクト・配列・ユニオンも含めて下書きします。配列の中のオブジェクトが揃っていない場合 — ある要素には `pinned` があり、次の要素にはない — そのキーは黙って捨てられるのではなく `.optional()` として印が付きます。多くの場合、その食い違いこそが最も気付く必要のあったことだからです。ときどき null だった値は、2 要素のユニオンではなく `.nullable()` になります。できないのは、見たことのないルールを作り出すことです。サンプルデータが示すのは、そのフィールドに文字列が入っていたことであって、その文字列がメールアドレスでなければならない、80 文字未満でなければならない、3 つの許可値のどれかでなければならない、ということではありません。出力は詰めていくための足場であって、完成した契約ではありません。

使い方

  1. 代表的な JSON サンプルを貼り付けます。ばらつきを多く含むほど推論の精度が上がります。
  2. スキーマ名を決め、zod の import と推論された型を含めるかを選びます。
  3. 生成されたコードをコピーし、サンプルでは表せなかったフィールドのルールを自分で詰めます。

プライバシー

このツールはすべてブラウザ内で動作します。入力した内容がアップロード・保存・共有されることはなく、タブを閉じれば消えます。

よくある質問

JSON はアップロードされますか?
いいえ。JSON の解析もスキーマの生成もすべてブラウザーのタブ内で行われます。入力も出力もサーバーに送信されず、記録も保存もされません。
推論された検証はどれくらい正確ですか?
サンプルと同じだけ正確です。構造と型は忠実に捉えますが、構造では表せない制約 — 形式、範囲、列挙値、本番で本当に必須のフィールド — は分かりません。頼りにする前に各フィールドを確認してください。
配列や任意フィールドに対応していますか?
はい。配列は z.array(...) になり、配列内のオブジェクトでキーが異なる場合、すべてには存在しないキーが .optional() として印付けされます。ときどき null だったフィールドは .nullable() になります。
出力を TypeScript で使えますか?
はい。生成されるファイルはスキーマを export し、オプションを有効にしたままなら `z.infer` の型エイリアスも出力します。バリデーターとそれに対応する静的型を同じ 1 つの定義から得られます。