🍘

Zodの基本的な使い方

2023/10/11に公開

今回はZodの基本的な使い方について紹介したいと思います。

はじめに

Zodとは、TypeScript向けのスキーマ宣言とデータ検証のためのライブラリです。Zodを使用すると、型安全な方法でデータ構造を定義し、それに基づいてデータを検証できます。Zodは、TypeScriptの型システムと統合されており、コンパイル時に型エラーを検出しやすくし、ランタイムエラーを減らすのに役立ちます。簡潔に言えば、Zodは型とデータの整合性を強化するためのツールです。

基本的な使い方

インストール

Zodは以下の方法でインストールできます。

npm install zod       # npm
yarn add zod          # yarn
bun add zod           # bun
pnpm add zod          # pnpm

文字列スキーマ

単純な文字列スキーマを作成し、.parse()という関数を使用して文字列であるかどうかを検証できます。エラーの場合は、ZodErrorをスローします。

import { z } from 'zod'

// 文字列のスキーマの作成
const stringScheme = z.string()

stringScheme.parse("hoge")
// => "hoge"
stringScheme.parse(12)
// => throws ZodError

検証が失敗したときにZodエラーをスローしたくない場合は、.safeParse()を使用できます。

import { z } from 'zod'

const stringScheme = z.string()

stringScheme.safeParse(12);
// => { success: false; error: ZodError }

stringSchema.safeParse("hoge");
// => { success: true; data: 'hoge' }

文字列スキーマを作成する際に、エラーメッセージをカスタマイズすることもできます。

import { z } from 'zod'

const nameScheme = z.string({
  required_error: "Name is required",
  invalid_type_error: "Name must be a string",
})

文字列以外にも、Number型やBoolean型などのスキーマを作成できます。また、Number型やBoolean型などのスキーマもカスタマイズしてエラーメッセージを設定することも可能です。

import { z } from 'zod'

// Number型
const numberScheme = z.number()

// Boolean型
const booleanScheme = z.boolean()

オブジェクト

z.objectを使用してオブジェクトスキーマを定義できます。

import { z } from 'zod'

const userSchema = z.object({
  name: z.string(),
  age: z.number(),
  tel: z.string(),
})

userSchema.parse({ name: 'hoge', age: 66, tel: 'xxx-xxxx-xxxx' })

スキーマから型を抽出

z.infer<typeof Schema>を使用して、任意のスキーマから TypeScript型を抽出できます。

const userSchema  = z.object({
  name: z.string(),
  age: z.number(),
  tel: z.string(),
})
	
type user = z.infer<typeof userSchema>	
// type user = {
//   name: string;
//   age: number;
//   tel: string;
// }

オプショナルな値

.optional()、.nullable()、.nullish()関数を使用してオプショナルな値のスキーマを作成できます。

const optionalString = z.string().optional()
// string | undefined

const nullableString = z.string().nullable()
// string | null

const nullishString = z.string().nullish()
// string | null | undefined

さいごに

以上で、Zodの基本的な使い方について紹介しました。Zodについての理解が深まりましたら幸いです。

参考サイト

https://zod.dev/

Discussion