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