システム開発

ヘキサゴナルアーキテクチャ へきさごなるあーきてくちゃ

ポート&アダプターアーキテクチャ疎結合テスタビリティDDDクリーンアーキテクチャ
ヘキサゴナルアーキテクチャについて教えて

簡単に言うとこんな感じ!

システムのコア(業務ロジック)を六角形の中心に置いて、データベース・UI・外部APIなど「外の世界」とはコンセント(ポート)を通してだけつなぐ設計だよ! コアが外の変化に影響されないから、DBを変えてもUIを変えても業務ロジックはそのままでいられるんだ!


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

ヘキサゴナルアーキテクチャ(Hexagonal Architecture)は、アリスター・コーバーン(Alistair Cockburn)が2005年に提唱した設計パターンで、「ポート&アダプターパターン(Ports and Adapters)」とも呼ばれます。

このアーキテクチャの核心は、アプリケーションのビジネスロジック(コア)をUI・データベース・外部サービスなどの技術的詳細から完全に独立させることです。コアとの接点を「ポート(Port)」という抽象的なインターフェースで定義し、実際の実装(DB接続、HTTP通信等)を「アダプター(Adapter)」として外側に配置します。

この設計により、「DBをMySQLからPostgreSQLに変える」「UIをWebからスマートフォンアプリに変える」といった変更が、ビジネスロジックに一切影響を与えずに行えます。また、アダプターを差し替えるだけでテスト用の偽DBを使えるため、テストが非常に書きやすくなります。


ポートとアダプターの種類

種類方向役割
入力ポート(Driving Port)外→コアコアの機能を呼び出すためのIFユースケースIF
出力ポート(Driven Port)コア→外コアが外部を呼び出すためのIFリポジトリIF
入力アダプター外→コア外部からの入力をコアに変換WebコントローラーAPI
出力アダプターコア→外コアの要求を外部実装に変換DBリポジトリ実装

六角形の辺に対応するアダプター例

アダプターの例
Web UIHTTPリクエストを受け取るRestController
CLIコマンドライン引数を処理するAdapter
メッセージキューKafka/RabbitMQのConsumer
データベースJPA/SQLiteのRepository実装
外部API決済サービスAPIのHTTPクライアント
テストモック(偽物)のRepository

歴史と背景

  • 2005年 — アリスター・コーバーンが「Hexagonal Architecture」を自身のWebサイトで公開。六角形を使った視覚的な表現が採用される
  • 2007年 — エリック・エヴァンスのDDD普及とともにヘキサゴナルアーキテクチャへの関心が高まる
  • 2012年 — ロバート・C・マーチンが「クリーンアーキテクチャ」を提唱。ヘキサゴナルと同じ思想を別の形で表現
  • 2015年頃マイクロサービスアーキテクチャとの相性の良さが注目され、各マイクロサービスにヘキサゴナルを適用するパターンが普及
  • 2020年代 — DDDと組み合わせた「DDDヘキサゴナル」パターンがエンタープライズ開発の標準設計として定着

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

ヘキサゴナルアーキテクチャの構造 ビジネス ロジック (コア) Web UI REST API Database 外部API メッセージキュー 入力アダプター 出力アダプター ポート(インターフェース)を介して接続 → 疎結合を保証

関連する規格・RFC

※ ヘキサゴナルアーキテクチャは特定の標準規格ではありませんが、以下と関連しています。

手法・原則内容
SOLID原則(依存性逆転原則)ヘキサゴナルの「ポート」設計の理論的基盤
GoFデザインパターン(Adapter)アダプターパターンを建築レベルに応用
ドメイン駆動設計(DDD)ドメインを中心に置くという思想を共有

関連用語