【くりーんあーきてくちゃ】

クリーンアーキテクチャ とは?

💡 ビジネスロジックの「独立宣言」
📌 このページのポイント
クリーンアーキテクチャの構造 エンティティ Entities ユースケース Use Cases アダプター Interface Adapters フレームワーク / DB / UI Frameworks & Drivers 依存の方向 ルール 内側ほど安定 外側は交換可能 依存は内向きのみ 内側は外側を 知らない 外→内の一方通行
クリーンアーキテクチャでは依存関係が常に内側(ビジネスルール)に向かう。外側のフレームワークやDBは交換可能になる
ひよこ ひよこ

なぜビジネスロジックを独立させるの?

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

フレームワークやDBは「詳細」であり変わりうるもの。RailsからNext.jsに移行する時、ビジネスロジックが密結合していると全部書き直し。独立していればUI層とインフラ層だけ差し替えればOK。またテスト時にDBなしでビジネスロジックを高速テストできるメリットもあるよ

ひよこ ひよこ

4つの層の役割は?

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

中心から①Entities:ビジネスルール(ドメインモデル)、②Use Cases:アプリケーション固有のビジネスルール、③Interface Adapters:データ変換(Controller、Presenter、Gateway)、④Frameworks & Drivers:Web、DB、UIなどの外部ツール。依存性は必ず外側→内側。内側の層は外側の存在を知らないんだよ

ひよこ ひよこ

実務で完全に適用すべき?

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

小規模プロジェクトに厳密に適用するとオーバーエンジニアリングになることがある。大事なのは「依存の方向を意識する」こと。最低限、ビジネスロジックがHTTPリクエストオブジェクトやDB固有の型に依存しないようにするだけでもテスタビリティと保守性は大きく向上するよ

ひよこ ひよこ
ペンギン先生 ペンギン先生

ヘキサゴナル(ポート&アダプター)、オニオン、クリーンアーキテクチャは本質的に同じ思想だよ。「ビジネスロジックを中心に置き、外部とはインターフェース(ポート)を介してやり取りする」。表現やレイヤー名が違うだけ。クリーンアーキテクチャは4層の同心円図が有名で最も知名度が高いね

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「クリーンアーキテクチャ」って出てきたら「ビジネスロジックを外部の詳細から独立させる設計」と思えればだいたいOK!
📖 おまけ:英語の意味
「Clean Architecture」 = きれいなアーキテクチャ
💬 Clean(きれいな)Architecture(建築様式)。Robert C. Martin(Uncle Bob)が2012年に発表したよ
← 用語集にもどる