🔷
Zodとは
Zod
スキーマ検証ライブラリです。TypeScriptで型安全なデータバリデーションを行うために使用されます。
スキーマを定義することにより、データの検証を行うことができます。
インストール
npm install zod
オブジェクト検証
import { z } from 'zod';
const userSchema = z.object({
name: z.string(),
age: z.number().min(0),
email: z.string().email()
});
type User = z.infer<typeof userSchema>;
const result = userSchema.safeParse({
name: 'Mike',
age: 25,
email: 'mike@example.com'
});
const userDataLog = (user: User) => {
console.log('ユーザー名:', user.name);
console.log('年齢:', user.age);
console.log('メールアドレス:', user.email);
}
if (result.success) {
console.log('データ:', result.data);
userDataLog(result.data);
} else {
console.log('エラー:', result.error);
}
z.infer
ZodスキーマからTypeScriptの型を導出するためのユーティリティ型(既存の型から新しい型を生成するためのテンプレート)です。
よって、type User = z.infer<typeof userSchema>
という行は、Zodライブラリの型推論機能を使って、定義されたuserSchema
スキーマからTypeScriptの型を自動的に生成しています。
今回のz.infer<typeof userSchema>
は、userSchema
に基づいて次のような型を自動生成しています。
type User = {
name: string;
age: number;
email: string;
}
文字列検証
import { z } from 'zod';
const nameSchema = z.string();
const result = nameSchema.safeParse("山田");
if (result.success) {
console.log('名前:', result.data);
} else {
console.log('エラー:', result.error);
}
カスタムバリデーション
refine()
指定した条件を満たすかどうかをチェックする関数とエラーメッセージを引数に保つことができます。
import { z } from 'zod';
const evenNumberSchema = z.number().refine(value => value % 2 === 0, {
message: "数値は偶数である必要があります。"
});
const result = evenNumberSchema.safeParse(3);
if (result.success) {
console.log('数値:', result.data);
} else {
console.log('エラー:', result.error);
}
superRefine()
refine()
と異なり、エラーオブジェクトに直接アクセスして、複数のエラーを追加することができます。
import { z } from 'zod';
const thanTenSchema = z.number().superRefine((value, ctx) => {
if (value > 10) {
ctx.addIssue({
code: 'custom',
message: '数値は10未満である必要があります。'
});
}
});
const result = thanTenSchema.safeParse(10);
if (result.success) {
console.log('数値:', result.data);
} else {
console.log('エラー:', result.error);
}
ctx
エラーを管理するための引数
addIssue
エラーについて詳細を記述するために使用されます。このメソッドを使って、カスタムエラーメッセージやエラーコードを指定することができます。
エラーメッセージのカスタマイズ
const emailSchema = z.string().email({ message: "正しいメールアドレスを入力してください。" });
const result = emailSchema.safeParse("test");
if (result.success) {
console.log('メール:', result.data);
} else {
console.log('エラー:', result.error);
}
終わりに
何かありましたらお気軽にコメント等いただけると助かります。
ここまでお読みいただきありがとうございます🎉
Discussion