ヘキサゴナルアーキテクチャ へきさごなるあーきてくちゃ
ポート&アダプターアーキテクチャ疎結合テスタビリティ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 UI | HTTPリクエストを受け取る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ヘキサゴナル」パターンがエンタープライズ開発の標準設計として定着
ヘキサゴナルアーキテクチャの構造
関連する規格・RFC
※ ヘキサゴナルアーキテクチャは特定の標準規格ではありませんが、以下と関連しています。
| 手法・原則 | 内容 |
|---|---|
| SOLID原則(依存性逆転原則) | ヘキサゴナルの「ポート」設計の理論的基盤 |
| GoFデザインパターン(Adapter) | アダプターパターンを建築レベルに応用 |
| ドメイン駆動設計(DDD) | ドメインを中心に置くという思想を共有 |
関連用語
- クリーンアーキテクチャ — 同じ思想を同心円で表現した設計パターン
- ドメイン駆動設計(DDD) — ドメインを中心に置くという思想が一致
- SOLID原則 — ヘキサゴナルの設計根拠となるオブジェクト指向原則
- マイクロサービス — 各サービスにヘキサゴナルを適用するパターンが普及
- テスト駆動開発(TDD) — ポート&アダプターによりテストが格段に書きやすくなる
- デザインパターン(GoF) — アダプターパターンを建築レベルに昇華させた考え方