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

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

最終更新:
💡 業務のルールを中心に、外とのつなぎ方を交換する設計

アプリの業務処理と、画面・データベースなどの接続コードを分ける設計。接続の窓口であるポートにアダプターをつなぎ、外部技術を交換しやすくする。

📌 このページのポイント
業務のルールと外の技術を分けるアプリの内側注文のルール業務処理WebアダプターDBアダプター入力ポート出力ポート同じ保存の窓口に、テスト用もつなげる
矢印は注文処理の呼び出し例。色の付いた窓口がポート、外側の接続コードがアダプターです。コードの依存方向を示す矢印ではありません。
ひよこ ひよこ
六角形に並べれば、この設計になるの?
ペンギン先生 ペンギン先生
形より、業務の処理と外部技術を分けることが大切だよ。たとえば注文のルールを、画面のボタンやDBのSQLに埋め込まず、アプリの中心に置くんだ。ポートは必ず6個でなくていいよ。
ひよこ ひよこ
ポートとアダプターは、どう違うの?
ペンギン先生 ペンギン先生
ポートは「注文する」「注文を保存する」など、やり取りの目的と約束を表す窓口。アダプターはWeb画面から呼び出したり、特定のDBへ保存したりする橋渡しだよ。Web画面やDBそのものを、ポートと呼ぶわけではないんだ。
ひよこ ひよこ
DBを使わずにテストできるの?
ペンギン先生 ペンギン先生
保存の窓口に、本番DB用のアダプターの代わりにメモリ上のテスト用をつなぐ例があるよ。業務処理をDBから切り離して確認しやすくなるんだ。ただし、本物のDBへの接続やデータ変換が正しいかは、別に統合テストで確かめよう。
ひよこ ひよこ
図の矢印は、コードの依存方向?
ペンギン先生 ペンギン先生
この図は注文処理の呼び出し例だよ。入力側のアダプターが注文の窓口を呼び、中心の処理が保存の窓口を使う。実行時の呼び出しと、ソースコードがどの具体技術を知っているかという依存は区別しよう。中心にDBの具体コードを混ぜない設計が大切なんだ。
ひよこ ひよこ
どんなアプリでも採用した方がいい?
ペンギン先生 ペンギン先生
画面や保存先を交換したい、業務処理を独立してテストしたい場合に役立つよ。一方、窓口や接続コードを分ける分だけ、作るものや管理するものは増える。変更の見込みとアプリの規模に合わせ、必要な境界から整理しよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ヘキサゴナルアーキテクチャ」って出てきたら「業務のルールと外部の技術を、交換できる窓口で分ける設計」と思えばだいたいOK!
📖 おまけ:英語の意味
「Hexagonal Architecture」 = 六角形のアーキテクチャ
💬 Alistair Cockburnが2005年に提唱した設計で、Ports and Adaptersとも呼ばれるよ。六角形は、アプリの内側と外側、複数の接続を描きやすくするための形なんだ

参考資料

← 用語集にもどる