🙆
Zodを活用する
はじめに
普段、React(TypeScript)で開発を実施しています。
Validationや型定義はZodがいいと聞いたので、今回開発を実施していこうと思います。
Zodとは
ZodはTypeScriptで使用するためのスキーマ定義とバリデーションライブラリです。これを利用することで、実行時(runtime)にデータの型安全性を保証し、APIのリクエストやレスポンスなど、外部からの入力データの検証を簡単に行うことができます。
主な特徴
Zod は TypeScript で使用するための強力なスキーマ定義とバリデーションライブラリで、以下のような主な特徴があります。
-
型安全: Zod を使うことで、TypeScript の型推論をフルに活用し、型安全なコードを書くことができます。これにより、開発者はランタイムエラーを減らしつつ、より安全にコードを書くことが可能になります。
-
自動型生成: スキーマ定義から TypeScript の型を自動生成できるため、型定義の二重管理を避けることができます。これにより、開発効率が向上し、型定義に関する煩雑さが軽減されます。
-
エラーハンドリング: バリデーションエラーは詳細な情報を含むエラーオブジェクトとして扱われるため、エラーハンドリングが容易になります。これにより、開発者はユーザーに対してより明確なフィードバックを提供することができます。
サンプルコード
index.ts
import { z } from 'zod';
// ユーザーのスキーマを定義
const UserSchema = z.object({
name: z.string(),
age: z.number().min(0),
email: z.string().email(),
});
// この型を使って、TypeScriptの型を導出
type User = z.infer<typeof UserSchema>;
// バリデーションのサンプル
const validateUser = (data: any): User | null => {
try {
// スキーマに基づいてデータを検証し、問題がなければデータを返す
return UserSchema.parse(data);
} catch (error) {
if (error instanceof z.ZodError) {
// エラー情報をログに出力
console.error(error.errors);
}
return null;
}
};
実行結果
実行データ
const sampleUserData = {
name: 'Taro Yamada',
age: 25,
email: 'taro@example.com',
};
const sampleUserData2 = {
name: null,
age: 25,
email: 'taro@example.com',
};
const validatedUser = validateUser(sampleUserData);
console.log(validatedUser);
実行結果(正常)
~/develop/react/zod_sample$ ts-node index.ts
{ name: 'Taro Yamada', age: 25, email: 'taro@example.com' }
実行データ
const sampleUserData2 = {
name: null,
age: 25,
email: 'taro@example.com',
};
const validatedUser = validateUser(sampleUserData2);
console.log(validatedUser2);
実行結果(正常)
~/develop/react/zod_sample$ ts-node index.ts
{
code: 'invalid_type',
expected: 'string',
received: 'null',
path: [ 'name' ],
message: 'Expected string, received null'
}
]
Discussion