🏛️
関数型アーキテクチャ設計原則 2026年4月1日

Functional Core, Imperative Shell

📁 概念 👁 -- 閲覧

Functional Core, Imperative Shell

定義

アプリケーションを2層に分ける設計方針:

┌─────────────────────────────────┐
│  Imperative Shell(命令的外殻)  │  ← I/O・DB・外部API・副作用
│                                 │
│    ┌───────────────────────┐    │
│    │  Functional Core      │    │  ← 純粋関数のみ・ビジネスロジック
│    │  (関数型中核)        │    │
│    └───────────────────────┘    │
└─────────────────────────────────┘

Shell がデータを集めて Core に渡し、Core の結果を Shell が世界に反映する。

なぜ重要か

副作用とロジックを混在させると、ロジックのテストに副作用の準備が必要になる。 分離することでビジネスロジックが純粋関数になり、テストが極めてシンプルになる。

適用場面

  • DBから取得 → 計算 → DB保存、という典型的なユースケース
  • 「テストのためにモックが大量に必要」と感じた時は Core/Shell 混在のサイン

関連概念

出典

関数型ドメインモデリング(Scott Wlaschin)/ Gary Bernhardt “Boundaries”