ヘキサゴナルアーキテクチャ(ポート&アダプター)
定義
ヘキサゴナルアーキテクチャ(Hexagonal Architecture)は Alistair Cockburn が提唱したアーキテクチャパターン。別名「ポート&アダプター(Ports and Adapters)」。
アプリケーション(ドメイン)を中心に置き、外部との接点を「ポート(インターフェース)」と「アダプター(実装)」で抽象化する。
┌─────────────────────────────┐
HTTP API ───────→│ ← Adapter Port → │
DB ─────────────→│ │
Message Queue ──→│ Application (Domain) │
External API ───→│ │
Test ───────────→│ ← Adapter Port → │
└─────────────────────────────┘
- ポート:アプリケーションが外部に期待するインターフェース(
OrderRepository,EmailSender) - アダプター:ポートの具体的な実装(
PostgresOrderRepository,SendGridEmailSender)
なぜ重要か
従来のレイヤードアーキテクチャでは「ドメイン → インフラ」の依存関係が発生しやすい。ヘキサゴナルアーキテクチャではすべての依存がドメインへ向かう(依存関係逆転)。
結果として:
- ドメインロジックをフレームワーク・DBなしでユニットテストできる
- データベースの種類やHTTPフレームワークを差し替えてもドメインへの影響がない
- インメモリアダプターで開発初期から動作確認できる
適用場面
- DDDを採用するプロジェクトの基本アーキテクチャとして
- テスタビリティを最優先する設計
- 将来的なインフラ変更(クラウド移行・DBスイッチ)を見越した設計
Functional Core, Imperative Shellとの関係
Functional Core, Imperative Shellは同じ思想の関数型アプローチ。副作用をShell(アダプター)に閉じ込め、Core(ドメイン)を純粋に保つ点が共通する。
関連概念
出典
実践ドメイン駆動設計(Vaughn Vernon)第4章 / Alistair Cockburn “Hexagonal Architecture”