🎯
関数型ドメインモデリング型システム 2026年4月1日

型駆動設計(Type-Driven Design)

📁 概念 👁 -- 閲覧

型駆動設計(Type-Driven Design)

定義

ドメインの制約・状態・ルールを型システムで表現し、「コンパイルが通れば正しい」状態を目指す設計手法。

// 悪い例:文字列で何でも表現できてしまう
type Order = { status: string; email: string }

// 良い例:不正な状態を型で表現不可能にする
type UnvalidatedOrder = { email: string }
type ValidatedOrder   = { email: Email; items: NonEmptyList<Item> }
type PaidOrder        = { validatedOrder: ValidatedOrder; paymentId: PaymentId }

なぜ重要か

  • 不正な状態を表現不可能にする(Make Illegal States Unrepresentable)
  • ドキュメントとしての型:関数シグネチャがそのまま仕様になる
  • 状態遷移のバグをランタイムではなくコンパイル時に検出

適用場面

  • 状態遷移があるドメインオブジェクト(注文・承認フロー等)
  • 外部からの入力バリデーション(未検証型 → 検証済み型への変換)

関連概念

出典

関数型ドメインモデリング(Scott Wlaschin)第2〜4章