Zodとは?基本的な使い方や活用方法を徹底解説!【TypeScript/JavaScript】

はじめに

こんにちは!
今回は、JavaScriptとTypeScriptの型検証ライブラリ「Zod」について解説します。Zodは、簡単で使いやすい型チェックを提供し、バリデーションが非常にスムーズに行えるため、開発者にとっては欠かせないツールとなりつつあります。これを使うと、複雑な型チェックを簡単に行うことができ、コードの堅牢性が向上します!

Zodって何?

Zodとは、「TypeScriptの型安全をサポートするためのバリデーションライブラリ」です。JavaScriptやTypeScriptで動的に入力データを検証する際に非常に役立ちます。特に、APIリクエストやユーザー入力のバリデーションを行うときに効果を発揮します。

Zodの特徴は、その直感的なAPIと型安全性の高さにあります。Zodを使うことで、予期しない型エラーを事前に防ぎ、開発の効率を大幅に向上させることができます。

Zodの基本的な使い方

Zodの基本的な使い方を見てみましょう。まずは、Zodをインストールするところから始めます。

npm install zod

Zodをインストールした後、以下のように基本的なバリデーションを行うことができます。

import { z } from 'zod';

const schema = z.string().min(5, "文字列は5文字以上でなければなりません");

try {
    schema.parse("test"); // 失敗します
} catch (e) {
    console.error(e.errors); // エラー情報が出力されます
}

このコードでは、z.string().min(5)で5文字以上の文字列を要求しています。もし文字列が5文字未満なら、エラーがスローされます。

Zodの応用的な使い方

ここからは、Zodをさらに活用するための少し高度な使い方を紹介します。

1. オブジェクトの検証

Zodは、オブジェクトや複雑なデータ構造の検証にも対応しています。例えば、ユーザー情報を受け取る場合、以下のようにバリデーションを行えます。

const userSchema = z.object({
    username: z.string().min(3, "ユーザー名は3文字以上でなければなりません"),
    email: z.string().email("無効なメールアドレスです"),
    age: z.number().int().positive("年齢は正の整数でなければなりません")
});

const userData = {
    username: "user",
    email: "user@example.com",
    age: 25
};

try {
    userSchema.parse(userData); // 正常なデータなのでエラーは発生しません
} catch (e) {
    console.error(e.errors); // エラーが発生した場合、エラーメッセージを表示
}

このコードでは、z.object()を使ってオブジェクト型のバリデーションを行っています。z.string().min()z.number().positive()など、さまざまなバリデーションルールを組み合わせることができます。

2. 配列や複数の値のバリデーション

配列の検証も非常に簡単に行えます。例えば、数値の配列を検証する場合は次のように書きます。

const numbersSchema = z.array(z.number().positive());

const numbers = [10, 20, 30];

try {
    numbersSchema.parse(numbers); // 正常な配列なのでエラーは発生しません
} catch (e) {
    console.error(e.errors); // エラーが発生した場合、エラーメッセージを表示
}

z.array()を使うことで、配列内の各要素に対するバリデーションが簡単に行えます。

3. 型の合成

Zodでは、型の合成(複数の型を組み合わせる)も簡単に行えます。例えば、文字列または数値であることを確認する場合は以下のように記述します。

const schema = z.union([z.string(), z.number()]);

try {
    schema.parse("Hello"); // OK
    schema.parse(123); // OK
    schema.parse(true); // エラー
} catch (e) {
    console.error(e.errors); // エラー情報が出力されます
}

z.union()を使うことで、複数の型を許容するバリデーションができます。

4. 非同期バリデーション

Zodでは非同期のバリデーションも可能です。例えば、非同期でデータベースの照会を行い、その結果に基づいてバリデーションを実行する場合、次のように記述できます。

const emailSchema = z.string().email().refine(async (email) => {
    const user = await checkEmailExists(email); // データベースに問い合わせる非同期処理
    return !user; // ユーザーが既に存在していないことを確認
}, {
    message: "このメールアドレスはすでに使用されています",
});

async function validateEmail() {
    try {
        await emailSchema.parseAsync("user@example.com");
    } catch (e) {
        console.error(e.errors);
    }
}

validateEmail();

このように、非同期処理もサポートしており、外部データを使ったバリデーションが可能です。

Zodの引数

Zodでは、さまざまな引数を使うことができ、リクエストの検証を柔軟に行うことが可能です。

min / max
文字列や配列、数値の最小値・最大値を指定できます。

const numberSchema = z.number().min(0).max(100);

refine
複雑な検証ロジックを追加したい場合に使います。

const schema = z.string().refine(value => value.startsWith("A"), {
    message: "Aで始まる文字列が必要です",
});

optional
値が必須でないことを示します。

const schema = z.string().optional();

default
デフォルト値を設定できます。

const schema = z.string().default("Default Value");

まとめ

今回は、Zodの基本的な使い方から、より応用的な使用法までを紹介しました。Zodは、そのシンプルで直感的なAPIにより、非常に使いやすく、型安全なバリデーションを簡単に実現できます。特にTypeScriptを使用している開発者にとっては、型定義の強化とエラー防止に大いに役立つライブラリです。

ぜひ、この記事を参考にしてZodを使ってみてください。あなたのプロジェクトがもっと堅牢で安心なものになるはずです!

公式ホームページ: https://zod.dev

関連する記事はこちら↓↓

タイトルとURLをコピーしました