クリーンアーキテクチャ【clean architecture】
概要

この手法の基本原則は「依存の方向を一方向に保つ」という考え方である。システムに実装されるビジネス上のルールを内側、システムの技術的詳細を外側としたとき、外側の層は内側の層に依存してよいが、内側の層は外側の層に依存してはならないというルールを徹底する。この原則により、具体的な技術的実装がビジネスの核心部分に影響を与えない構造となる。
クリーンアーキテクチャでは、ソフトウェアを同心円状に複数の層に分け、中心に業務の本質的なルールやデータ構造を置き、その外側にアプリケーションの処理、さらに外側にデータベースやWebアプリケーションフレームワーク、ユーザーインターフェース(UI)、外部システムとの接続といった要素を配置する構造を取る。各層では、必ず外側の層から中心側に向けて依存関係が生じるように設計する。
この依存関係の制御は「依存関係逆転の原則」などの設計原則に基づいて実現される。例えば、データアクセスや外部APIの利用といった技術的要素は抽象的なインターフェースを介して扱われ、ビジネスロジックはそれらの具体的な実装を直接参照しない。この仕組みにより、データベースの種類やUIの構成が変更された場合でも、中心となるロジックを大きく変更せずにシステムを維持できる。ビジネスロジックを単体テストできるため、テスト容易性(testability)が高まるという利点もある。
一方、層の分離を厳密に守るための実装量が増加する傾向があり、小規模なプロジェクトではメリットに比してコストが大きすぎる過重負荷(オーバーエンジニアリング)となる場合もある。適用に際しては、開発対象のシステムの規模や更新頻度、将来的な寿命などを慎重に見極める必要がある。
この手法は、著名なソフトウェアエンジニアのロバート・マーティン(Robert C. Martin)氏が2017年刊の著書 “Clean Architecture: A Craftsman's Guide to Software Structure and Design” (邦題:Clean Architecture 達人に学ぶソフトウェアの構造と設計)によって提唱した。既存の「レイヤードアーキテクチャ」や「ヘキサゴナルアーキテクチャ」「オニオンアーキテクチャ」などの考え方を統合・整理したものと位置付けられている。