システム開発

クリーンアーキテクチャ くりーんあーきてくちゃ

設計原則依存性逆転疎結合ビジネスロジックレイヤードアーキテクチャ保守性
クリーンアーキテクチャについて教えて

簡単に言うとこんな感じ!

「玉ねぎの皮むき」みたいな同心円の設計ルールで、一番内側にビジネスロジック、外側に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・ヘキサゴナルとの組み合わせパターンが広く採用

同心円構造

クリーンアーキテクチャの同心円 フレームワーク・ドライバー (DB、Web、UI、デバイス) インターフェースアダプター (コントローラー、プレゼンター) ユースケース層 (アプリケーション固有ルール) エンティティ (ビジネスルール) 依存の 方向 (外→内のみ)

関連する規格・RFC

※ クリーンアーキテクチャは特定の標準規格ではありませんが、以下と関連しています。

手法・書籍内容
「Clean Architecture」Robert C. Martin著クリーンアーキテクチャの原典。2017年刊行
SOLID原則クリーンアーキテクチャの設計基盤となる原則
Onion Architecture同じ思想の先行パターン。2008年提唱

関連用語