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

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

💡 六角形の中心にビジネスロジックを閉じ込める「ポート&アダプター」
📌 このページのポイント
ヘキサゴナルアーキテクチャ ビジネス ロジック (ドメイン) 入力アダプター Web CLI テスト Port Port Port 出力アダプター DB メール 外部API Port Port Port ポートとアダプターで外部技術を差し替え可能にする設計
ビジネスロジックをポート(インターフェース)で囲み、外部の技術はアダプターとして差し替え可能にする
ひよこ ひよこ

なんで六角形なの?

ペンギン先生 ペンギン先生

実は六角形自体に深い意味はないんだ。従来の「上から下へ」の層構造ではなく、アプリケーションの周囲にいくつもの「面(ポート)」があることを表現するために六角形が使われた。辺の数は別に6でなくてもいいんだよ。

ひよこ ひよこ

ポートとアダプターって何?

ペンギン先生 ペンギン先生

ポートはアプリケーションが「こういう操作をしたい」と定義するインターフェース。たとえば「ユーザーを保存する」というポート。アダプターはそのポートの具体的な実装で、「MySQLに保存する」「メモリに保存する」といった具体的な技術を担当する。

ひよこ ひよこ

具体例で教えて?

ペンギン先生 ペンギン先生

ECサイトの注文処理を考えよう。ビジネスロジック側に「OrderRepository」というポート(インターフェース)を定義する。本番では「MySQLOrderRepository」というアダプターがDBに保存し、テスト時は「InMemoryOrderRepository」がメモリに保存する。ビジネスロジック側のコードは一行も変わらない。

ひよこ ひよこ

ポートには種類があるの?

ペンギン先生 ペンギン先生

大きく「ドライビングポート(入力)」と「ドリブンポート(出力)」に分かれる。ドライビングポートはアプリを呼び出す側で、REST APIやCLIから来るリクエスト。ドリブンポートはアプリが外部を呼び出す側で、DBやメール送信など。この区別が設計の方向性を明確にしてくれる。

ひよこ ひよこ

クリーンアーキテクチャとどう使い分ければいいの?

ペンギン先生 ペンギン先生

根本の考え方は同じ「外部技術からビジネスロジックを守る」なので、好みやチームの共通理解で選べばいい。ただし実務的なコツとして、ヘキサゴナルは「ポートの設計」から始めるのがおすすめ。「このアプリはどんな入力を受け取り、どんな出力を必要とするか」をポートとして列挙すると、自然と外部依存が整理される。また、ポートの粒度は「1ユースケースに1ポート」ではなく「関連する操作をまとめた1ポート」くらいがちょうどいい。細かすぎるとインターフェース爆発を起こして管理が大変になるんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
ヘキサゴナルアーキテクチャって出てきたら「ポートとアダプターで外部との接続を抽象化してビジネスロジックを守る設計」と思えればだいたいOK!
📖 おまけ:英語の意味
「Hexagonal Architecture」 = 六角形のアーキテクチャ
💬 Alistair Cockburnが2005年に提唱。六角形に特別な意味はなく「複数のポートを持つ」ことを視覚的に表現したもの
← 用語集にもどる