- HOME >
- Jamstack用語集 >
- Zod
Zod
ゾッド
Zod(ゾッド)を分かりやすく
Zod は、TypeScript のためのスキーマ検証ライブラリです。型安全なデータ検証を実現し、Next.js の API エンドポイントで利用することで、型安全を保証しながらデータを扱うことができます。データの検証を行う際には、型の予測不可能性や型エラーを防ぐために Zod を使用します。
Zod のインストール
Zod をプロジェクトに追加するには、以下のコマンドを実行します。
npm install zod
Zod スキーマの作成
まず、Zod スキーマを作成することで、データ構造を定義します。例えば、ユーザー情報を表すスキーマを作成する場合、以下のように記述します。
import { z } from 'zod'
const userSchema = z.object({
id: z.number(),
name: z.string(),
email: z.string().email(),
age: z.number().int().min(0),
})
このスキーマでは、id
が数値、name
が文字列、email
が E メール形式の文字列、age
が 0 以上の整数であることを定義しています。
API エンドポイントでの Zod の使用
次に、Next.js の API エンドポイントで Zod を使ってデータ検証を行います。ここでは、ユーザー情報の登録を行う API エンドポイントを作成する例を示します。
まず、pages/api/users.ts
ファイルを作成し、以下のように記述します。
import { NextApiRequest, NextApiResponse } from 'next'
import { z } from 'zod'
const userSchema = z.object({
id: z.number(),
name: z.string(),
email: z.string().email(),
age: z.number().int().min(0),
})
export default async (req: NextApiRequest, res: NextApiResponse) => {
if (req.method === 'POST') {
try {
const user = userSchema.parse(req.body)
// データベースへの保存処理など
res.status(201).json({ message: 'User created successfully', user })
} catch (error) {
if (error instanceof z.ZodError) {
res.status(400).json({ message: 'Invalid data', errors: error.errors })
} else {
res.status(500).json({ message: 'Internal server error' })
}
}
} else {
res.status(405).json({ message: 'Method not allowed' })
}
}
上記のコードでは、リクエストメソッドが POST
の場合に、userSchema.parse(req.body)
を使用してリクエストボディのデータ検証を行います。データがスキーマに従っていれば、データベースへの保存処理などを行い、正常に登録されたことを示すレスポンスを返します。
もし検証に失敗した場合、z.ZodError
がスローされ、エラーレスポンスを返します。また、それ以外のエラーが発生した場合は、内部サーバーエラーを示すレスポンスを返します。
Zod を利用した型の自動生成
Zod を使用することで、スキーマから TypeScript の型を自動生成することができます。これにより、API エンドポイントで返すデータの型を一元管理することができ、型の整合性を保つことができます。
例として、先ほどのユーザー情報のスキーマから型を生成する場合、以下のように記述します。
import { z } from 'zod'
const userSchema = z.object({
id: z.number(),
name: z.string(),
email: z.string().email(),
age: z.number().int().min(0),
})
export type User = z.infer<typeof userSchema>
これにより、User
型が自動的に生成され、userSchema
に従ったデータ構造を持つことが保証されます。API エンドポイントで返すデータの型として使用することで、型の整合性を維持できます。
まとめ
Zod を Next.js と TypeScript のソースコードに組み込むことで、型安全なデータ検証を実現できます。また、スキーマから TypeScript の型を自動生成する機能を利用することで、API エンドポイントで返すデータの型の整合性を保つことができます。
このように、Zod を活用することで、Next.js と TypeScript を用いたプロジェクトにおいて、型安全性を高めることができます。