0Pricing
TypeScript Academy · レッスン

スキーマの合成と改良

refine、transform、ユニオンを使って複雑なスキーマを構築します。

「スキーマの合成と改良」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全4レッスンが含まれています。

スキーマを組み合わせる

Zodのスキーマは、組み合わせて使える構成要素です。スキーマを改良、変換、拡張、結合することで、複雑な検証ルールをモデル化できます。

import { z } from "zod";
const base = z.object({ name: z.string() });
// We will add rules and combine schemas from here.

refineでカスタムルールを追加する

.refineは、エラーメッセージ付きのカスタム検証述語を追加します。Zodに組み込みの機能がないルールに使えます。

import { z } from "zod";
const password = z.string().refine(
  (s) => s.length >= 8,
  { message: "Must be at least 8 characters" }
);
// password.parse("short") throws with that message.

複数のフィールドにまたがって検証する

オブジェクトに.refineを適用すると、フィールド間の関係を検証できます。たとえば、パスワードと確認用パスワードの一致を検証できます。

import { z } from "zod";
const form = z.object({
  password: z.string(),
  confirm: z.string()
}).refine((d) => d.password === d.confirm, {
  message: "Passwords must match"
});
// Validates both fields together.

値を変換する

.transformは、検証済みの値を別の形状に変換します。検証が成功した後に実行されます。

import { z } from "zod";
const trimmed = z.string().transform((s) => s.trim());
const result = trimmed.parse("  hi  "); // "hi"

オプショナルなフィールド

.optional()を付けると、フィールドがなくても許可されるようになります。このことは検証と推論された型の両方に反映されます。

import { z } from "zod";
const schema = z.object({
  name: z.string(),
  bio: z.string().optional()
});
// bio may be omitted.

デフォルト値

.defaultは入力がない場合に値を補います。そのため、解析結果には常にそのフィールドが設定されます。

import { z } from "zod";
const schema = z.object({
  retries: z.number().default(3)
});
const r = schema.parse({}); // { retries: 3 }

ユニオンスキーマ

z.unionは、複数のスキーマのうちいずれか1つに一致する値を受け入れます。TypeScriptのユニオンに相当するZodの機能です。

import { z } from "zod";
const id = z.union([z.string(), z.number()]);
// id.parse("abc") and id.parse(123) both succeed.

Zodの判別可能なユニオン

z.discriminatedUnionは、判別フィールドに基づいて切り替えることで、タグ付きユニオンを効率的に検証します。

import { z } from "zod";
const shape = z.discriminatedUnion("kind", [
  z.object({ kind: z.literal("circle"), radius: z.number() }),
  z.object({ kind: z.literal("square"), side: z.number() })
]);
// Picks the right member by kind.

extendでマージする

.extendは既存のオブジェクトスキーマにフィールドを追加します。小さなスキーマから、より大きなスキーマを構築できます。

import { z } from "zod";
const base = z.object({ id: z.number() });
const user = base.extend({ name: z.string() });
// user validates { id: number; name: string }

オブジェクトスキーマを結合する

.mergeを使って2つのオブジェクトスキーマを結合することもできます。すべてのフィールドが1つのスキーマにまとめられます。

import { z } from "zod";
const a = z.object({ x: z.number() });
const b = z.object({ y: z.string() });
const combined = a.merge(b);
// combined validates { x: number; y: string }

すべてを連結する

改良、変換、デフォルト、拡張を流れるように連結することで、読みやすい1つのスキーマに豊富な検証ルールを表現できます。

import { z } from "zod";
const signup = z.object({
  email: z.string().refine(s => s.includes("@"), { message: "Invalid email" }),
  age: z.number().default(18)
}).extend({
  newsletter: z.boolean().optional()
});
// One schema, many rules.

確認問題:スキーマの合成

スキーマの合成と改良について理解度を確認します。

まとめ:スキーマの合成と改良

.refineでカスタムルールを追加し、.transformで値の形状を変え、.optionalと.defaultで欠損データを処理し、z.unionで選択肢を組み合わせ、.extendと.mergeでスキーマを拡張する方法を学びました。

import { z } from "zod";
const schema = z.object({ name: z.string() })
  .extend({ age: z.number().default(0) })
  .refine(d => d.name.length > 0, { message: "Name required" });
// Composed validation in one place.

よくある質問

「スキーマの合成と改良」レッスンは無料ですか?

はい。「スキーマの合成と改良」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全4レッスンが含まれています。

「スキーマの合成と改良」で何を学びますか?

refine、transform、ユニオンを使って複雑なスキーマを構築します。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

TypeScript Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「スキーマの合成と改良」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このTypeScript Academyレッスンでコードを書いて実行できますか?

はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Zodスキーマの基礎
  2. スキーマからの型推論
  3. parseとsafeParse
  4. スキーマの合成と改良
← TypeScript Academyに戻る