CTS-KB

ヘキサゴナルアーキテクチャ

へきさごなるあーきてくちゃ

Hexagonal Architecture Ports and Adapters ポート&アダプタ
#アーキテクチャ #設計パターン #DDD

アプリケーション本体を「ポート」と「アダプタ」で外界から切り離し、入出力技術を後から差し替え可能に保つアーキテクチャスタイル。Alistair Cockburn が 2005 年に提唱した。「ポート&アダプタ」「クリーンアーキテクチャ」「オニオンアーキテクチャ」と本質的に同型の発想。

核となる考え方

アプリケーションコア(ビジネスロジック)は どんな入出力技術にも依存しない 純粋なオブジェクト群として作る。外部とのやり取りは「ポート(インターフェース)」を通じて行い、具体的な技術は「アダプタ」が実装する。

ヘキサゴナルアーキテクチャの構造図 — ドライビングアダプタ/入力ポート/アプリケーションコア/出力ポート/ドリブンアダプタの依存方向

「ヘキサゴナル(六角形)」と呼ぶ理由

図示するときに六角形を使うのは 入出力チャネルが複数あること を示すため。 6 という数に意味はない (UI / API / バッチ / DB / 外部 API / キュー など複数あるという象徴)。

ポートとアダプタの分類

分類役割
ドライビングポートアプリを呼び出す側のインターフェースPlaceOrderUseCase
ドライビングアダプタ上記ポートを呼び出す具象REST コントローラ / CLI / バッチ
ドリブンポートアプリが外界に依頼する側のインターフェースOrderRepository / MailSender
ドリブンアダプタ上記ポートを実装する具象PostgreSQL 実装 / SMTP 実装

何が嬉しいのか

利点中身
技術交換が容易DB を PostgreSQL → DynamoDB に替えてもコアは無傷
テストが速いアダプタをインメモリ実装に差し替えてユースケースを単体テスト可能
ビジネスロジックの純度コアにフレームワークの import が混入しない
AI 駆動開発との相性影響範囲がアダプタ層に閉じるため、AI 生成コードのレビュー範囲を絞れる

クリーン / オニオン / ヘキサゴナルの関係

名称提唱者特徴
ヘキサゴナルAlistair Cockburn (2005)「ポート&アダプタ」を強調
オニオンJeffrey Palermo (2008)レイヤを同心円で表現
クリーンRobert C. Martin (2012)依存方向のルールを明文化

いずれも 「ドメインを中心に置き、外側のレイヤが内側に依存する」 同じ原則を別の図で説明したもの。

アンチパターン

  • コアにフレームワーク依存が漏れるusing Microsoft.EntityFrameworkCore; がドメインクラスに登場
  • アダプタの肥大化 — ビジネスロジックをアダプタに書いてしまい、コアが空洞化
  • ポートが過剰に細かい — メソッド 1 つだけのインターフェースが乱立し、見通しが悪化

SOLID との関係

ヘキサゴナルは DIP(依存性逆転) をアーキテクチャ全体に適用した姿。コアが詳細(DB・API)に依存するのではなく、詳細がコアの定義したインターフェースに依存する向きを徹底する。

関連記事

関連用語