クリーンアーキテクチャ くりーんあーきてくちゃ
設計原則依存性逆転疎結合ビジネスロジックレイヤードアーキテクチャ保守性
クリーンアーキテクチャについて教えて
簡単に言うとこんな感じ!
「玉ねぎの皮むき」みたいな同心円の設計ルールで、一番内側にビジネスロジック、外側にDB・UIを配置する構造だよ! 「内側は外側を知らない」という鉄則を守るだけで、DBを変えてもUIを変えても中のコアは揺らがない、変更に強いシステムが作れるんだ!
クリーンアーキテクチャとは
クリーンアーキテクチャ(Clean Architecture)は、ロバート・C・マーチン(Robert C. Martin、通称「Uncle Bob」)が2012年に提唱し、2017年に著書「Clean Architecture: A Craftsman’s Guide to Software Structure and Design」で体系化した設計原則です。
クリーンアーキテクチャの中心的なルールは「依存関係は常に内側を向く(依存性のルール)」です。システムを同心円で表現し、内側から「エンティティ層 → ユースケース層 → インターフェースアダプター層 → フレームワーク・ドライバー層」の4層に分けます。外側の層は内側を知っていますが、内側の層は外側を一切知りません。
これにより、データベースやWebフレームワークなど「外側の技術」が変わっても、ビジネスルール(内側)には一切影響が及びません。ヘキサゴナルアーキテクチャと同じ思想を「同心円」という形で表現したものと理解できます。
クリーンアーキテクチャの4層
| 層 | 名称 | 内容 | 変更頻度 |
|---|---|---|---|
| 最内層 | エンティティ(Entities) | 企業全体のビジネスルール・データ構造 | 最も少ない |
| 2層目 | ユースケース(Use Cases) | アプリケーション固有のビジネスロジック | 少ない |
| 3層目 | インターフェースアダプター | コントローラー・プレゼンター・ゲートウェイ | 中程度 |
| 最外層 | フレームワーク・ドライバー | DB・WebフレームワークなどI/O | 最も多い |
依存関係の方向
| 外側 | → | 内側 |
|---|---|---|
| フレームワーク・DB | 依存する | インターフェースアダプター |
| インターフェースアダプター | 依存する | ユースケース |
| ユースケース | 依存する | エンティティ |
| エンティティ | 何にも依存しない | — |
歴史と背景
- 2005年 — アリスター・コーバーンのヘキサゴナルアーキテクチャが同じ思想を提唱
- 2008年 — Jeffrey Palimoが「Onion Architecture(玉ねぎアーキテクチャ)」を発表。クリーンアーキテクチャの前身
- 2012年 — ロバート・C・マーチンがブログ記事「The Clean Architecture」を公開
- 2017年 — 著書「Clean Architecture」出版。体系的な説明が加わり世界的に普及
- 2019年頃 — Kotlinを使うAndroid開発でクリーンアーキテクチャが事実上の標準に
- 2020年代 — マイクロサービス・DDD・ヘキサゴナルとの組み合わせパターンが広く採用
同心円構造
関連する規格・RFC
※ クリーンアーキテクチャは特定の標準規格ではありませんが、以下と関連しています。
| 手法・書籍 | 内容 |
|---|---|
| 「Clean Architecture」Robert C. Martin著 | クリーンアーキテクチャの原典。2017年刊行 |
| SOLID原則 | クリーンアーキテクチャの設計基盤となる原則 |
| Onion Architecture | 同じ思想の先行パターン。2008年提唱 |
関連用語
- ヘキサゴナルアーキテクチャ — 同じ思想を六角形で表現した設計パターン
- SOLID原則 — クリーンアーキテクチャの設計根拠となる原則
- ドメイン駆動設計(DDD) — ビジネスドメインを中心に置く思想が一致
- デザインパターン(GoF) — クリーンアーキテクチャを実現するための実装パターン集
- テスト駆動開発(TDD) — 内側が外側を知らない設計はテストを書きやすくする
- マイクロサービス — 各サービスにクリーンアーキテクチャを適用するパターンが普及