登録日:
2025-03-07
最終更新日:
2025-03-21
クリーンアーキテクチャとは?
クリーンアーキテクチャ(Clean Architecture)とは、ソフトウェアの設計原則の一つで、ソフトウェアの保守性、可読性、拡張性を向上させることを目的としたアーキテクチャパターンです。
クリーンアーキテクチャの概要
クリーンアーキテクチャは、「依存関係の方向を内側(ビジネスロジック)に向ける」ことを基本ルール**としています。これにより、以下のようなメリットがあります。
- 変更に強い(UIやデータベースの変更がビジネスロジックに影響しにくい)
- テストしやすい(ビジネスロジックがインフラやフレームワークから独立しているため)
- 再利用性が高い(ドメインロジックを他のアプリケーションにも流用しやすい)
クリーンアーキテクチャの基本構造
クリーンアーキテクチャは、以下の4つの同心円状のレイヤーで構成されます。
エンティティ(Entities)
- ビジネスルール(ドメインモデル)を定義する層
- 企業やアプリケーション全体に関わる最も重要なルールを表現
- フレームワークやライブラリに依存しない
ユースケース(Use Cases, Interactors)
- アプリケーションの具体的な振る舞いを定義**する層
- エンティティを組み合わせて、特定の操作を実現する
- UIやデータベースとは独立している
インターフェースアダプタ(Interface Adapters)
- 外部システムとユースケースをつなぐ層
- Web API、データベース、UI、外部ライブラリとの接続を担当
- 例: コントローラー、プレゼンター、リポジトリ
フレームワーク&ドライバ(Frameworks & Drivers)
- インフラ層(データベースや外部サービス)やフレームワークを含む層
- 変更が発生しやすいため、ビジネスロジックとは直接関わらない
依存関係のルール(依存性逆転の法則)
クリーンアーキテクチャでは、依存関係の方向は内側に向かうべきというルールがあります。
具体的には、外部の技術(UI, DB, フレームワーク)に依存せず、ビジネスロジックが中心にあるべきという考え方です。
このルールを守るために、インターフェースを活用し、依存性逆転の原則(Dependency Inversion Principle, DIP)を適用します。
クリーンアーキテクチャの実装例(簡易構成)
例えば、以下のようなコード構成になります。
project
│── domain (Entities)
│ ├── User.php
│ ├── UserRepositoryInterface.php
│
│── usecase (Use Cases)
│ ├── CreateUserUseCase.php
│
│── infrastructure (Frameworks & Drivers)
│ ├── DatabaseUserRepository.php
│
│── interface_adapters (Interface Adapters)
│ ├── UserController.php
この構造では、ビジネスロジック(Entities, Use Cases)は外部のインフラ層から独立しており、変更に強い設計になっています。
クリーンアーキテクチャのメリット・デメリット
メリット
- ビジネスロジックを中心とした設計ができる
- 保守性が高い(フレームワークやデータベース変更の影響が少ない)
- テストしやすい(ユースケース単体でのテストが容易)
- 変更に強い(依存関係が整理されている)
デメリット
- 学習コストが高い(レイヤー構造を理解する必要がある)
- 小規模なプロジェクトには過剰(シンプルなCRUDアプリには不要)
- レイヤーが多いため、開発コストがかかる(コード量が増える)
クリーンアーキテクチャを適用すべきケース
クリーンアーキテクチャは、以下のようなプロジェクトで特に有効です。
- 長期間の運用を前提としたプロジェクト(大規模システム、企業向けアプリ)
- ドメインロジックが複雑なプロジェクト(業務システム、金融システム)
- テスト容易性が求められるプロジェクト(TDD/自動テストが必須のシステム)
逆に、小規模なプロジェクトやシンプルなCRUDアプリでは、過剰な設計になる可能性があるため、注意が必要です。