アプリケーションアーキテクチャの様式

#software-engineering #architecture #moc

「業務ロジックを、UIやDBやフレームワークからどう引き剥がすか」という同じ問題に対する answers を並べたハブノート。歴史的には後発が先発を取り込む形で発展しており、クリーンアーキテクチャの原文自体が「これらは同じことを言っている」と明言している。

系譜

flowchart LR H["ヘキサゴナル / Ports and Adapters<br/>Cockburn, 2005"] --> C["クリーンアーキテクチャ<br/>R.C.Martin, 2012"] O["オニオンアーキテクチャ<br/>Palermo, 2008"] --> C D["DCI / BCE"] --> C H --> O

各様式

  • ヘキサゴナルアーキテクチャ(ポートとアダプタ) — 「内と外」の非対称性だけを言う最小形。外部(UI・DB・テスト)を対等に扱い、目的単位で切ったポートに技術固有のアダプタを差す。内側の構造には踏み込まない。
  • オニオンアーキテクチャ — 内側をドメインモデル/ドメインサービス/アプリケーションサービスの同心円に割る。「データベースは中心ではない、外部である」が標語。
  • クリーンアーキテクチャ — 上記を統合し、内側をEntities(企業全体のルール)とUse Cases(アプリ固有のルール)に整理したうえで「依存は内向きのみ」という1本のルールにまとめたもの。

土台になっている原則

  • SOLID原則 — とくにD(依存性逆転の原則)が、上記3つすべての骨格。制御の流れを変えずにソースコード依存の向きだけを反転させる。
  • 依存性注入 — 内側で定義したインターフェースに外側の具象を差し込む、実行時の組み立て手段。原則(DIP)と実装手段(DI)は別物。

隣接するもの

  • DDD — アーキテクチャの様式ではなく、中心に置く「ドメインモデル」の作り方の話。オニオン/クリーンとは補完関係で、組み合わせて語られることが多い。
  • マイクロサービス — 分離の単位をプロセス/デプロイの境界にまで押し広げたもの。ヘキサゴナルの「目的で切る」発想が影響を与えたとされる。
  • ADR — 「どの様式をどこまで適用するか」自体が意思決定なので、記録の対象になる。過剰適用の批判(クリーンアーキテクチャの「批判・限界」節)を踏まえるなら、明文化しておく価値が高い。
作成日時: 2026-09-01 09:14 / 更新日時: 2026-09-01 09:14