カテゴリー: 開発ツール
JSON → Zod スキーマ変換ツール
データをアップロードせずに、サンプル JSON から Zod スキーマを生成
JSON を貼り付けると、ブラウザー内で Zod スキーマを生成します。オブジェクト、配列、文字列、数値、真偽値、null、任意フィールドを推論し、TypeScript にそのまま使える出力をコピーできます。何もアップロードされません。
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 つの許可値のどれかでなければならない、ということではありません。出力は詰めていくための足場であって、完成した契約ではありません。
使い方
- 代表的な JSON サンプルを貼り付けます。ばらつきを多く含むほど推論の精度が上がります。
- スキーマ名を決め、zod の import と推論された型を含めるかを選びます。
- 生成されたコードをコピーし、サンプルでは表せなかったフィールドのルールを自分で詰めます。
プライバシー
このツールはすべてブラウザ内で動作します。入力した内容がアップロード・保存・共有されることはなく、タブを閉じれば消えます。
よくある質問
- JSON はアップロードされますか?
- いいえ。JSON の解析もスキーマの生成もすべてブラウザーのタブ内で行われます。入力も出力もサーバーに送信されず、記録も保存もされません。
- 推論された検証はどれくらい正確ですか?
- サンプルと同じだけ正確です。構造と型は忠実に捉えますが、構造では表せない制約 — 形式、範囲、列挙値、本番で本当に必須のフィールド — は分かりません。頼りにする前に各フィールドを確認してください。
- 配列や任意フィールドに対応していますか?
- はい。配列は z.array(...) になり、配列内のオブジェクトでキーが異なる場合、すべてには存在しないキーが .optional() として印付けされます。ときどき null だったフィールドは .nullable() になります。
- 出力を TypeScript で使えますか?
- はい。生成されるファイルはスキーマを export し、オプションを有効にしたままなら `z.infer` の型エイリアスも出力します。バリデーターとそれに対応する静的型を同じ 1 つの定義から得られます。