Writer: tokuyasu 更新日:2024/04/19
こんにちは、デジナーレ福岡オフィスの徳安です。
この記事では、「Zod」について紹介します。
「Zod」とは
Zodとは、TypeScript向けの
スキーマ宣言とデータ検証のためのライブラリ
1つの定義から、TypeScriptの型定義と
スキーマバリデーションの定義を生成できる為、
Typescriptとの相性が非常に良い。
依存パッケージが無いことや
バンドルサイズが小さいといった特徴もある。
Zodを使用すると、
型安全な方法でデータ構造を定義し、
それに基づいてデータを検証できる。
基本的な使い方
インストール方法
1 2 3 4 |
npm install zod # npm yarn add zod # yarn bun add zod # bun pnpm add zod # pnpm |
スキーマメソッド
*.parse
.parse(data: unknown): T
任意の Zod スキーマを指定、
.parseメソッドを呼び出し、
(.parse(data))引数に、対象の値を入れることで、
対象の値が有効であるかを検証することができる。
エラーの場合は、ZodErrorがスローされる。
<例>
1 2 3 4 5 6 7 8 |
import { z } from"zod"; // 文字列のスキーマの作成 constmySchema = z.string(); // parsing ============== mySchema.parse("string"); // => "string" mySchema.parse(12); // => throws ZodError |
*.safeParse
.safeParse(data:unknown): { success: true; data: T; }
| { success: false; error: ZodError; }
検証が失敗したときに ZodErrorをスローしたくない場合は、
.safeParseを使用する。
正常に解析されたデータを含むオブジェクト、
または検証の問題に関する詳細情報を含む
ZodError インスタンスを返す。
<例>
1 2 3 4 5 6 7 8 9 10 |
import { z } from"zod"; // 文字列のスキーマの作成 constmySchema = z.string(); // parsing ============== stringSchema.safeParse(12); // => { success: false; error: ZodError } stringSchema.safeParse("billie"); // => { success: true; data: 'billie' } |
stringのschemaに用意されたメソッド
<例>
1 2 3 4 5 6 7 8 9 |
z.string(); // 単純な文字列 z.string().min(5); // 5文字以上の文字列 z.string().max(5); // 5文字以下の文字列 z.string().length(5); // 固定幅の文字列 z.string().email(); // メールアドレス文字列 z.string().url(); // URL文字列 z.string().uuid(); // UUID文字列 z.string().regex(regex); // 正規表現にマッチする文字列 z.string().nonempty(); // 空文字列以外の文字列 |
ネストしたり値をオプショナルにしたりと、
自由度が高く定義することもできる。
エラーメッセージのカスタマイズ
追加の引数を渡し、
エラーメッセージをカスタマイズすることもできる。
<例>
1 2 3 4 5 6 |
import { z } from"zod"; constname = z.string({ required_error:"Name is required", invalid_type_error:"Name must be a string", }); |
オブジェクト
z.objectを使用して、
オブジェクトスキーマを定義できる
また、z.infer<typeofSchema>を使用して、
任意のスキーマから 型を生成できる
<例>
1 2 3 4 5 6 7 8 |
import { z } from"zod"; constDog = z.object({ name:z.string(), age:z.number(), }); // スキーマから型を抽出 typeDog = z.infer<typeofDog>; |
ここまで読み進めていただきありがとうございます。