clean-architecture-01jpcvxfxd87red8vvv00mjyy3.md.bak•4.68 kB
---
description: Clean Architectureに関するドキュメント
ruleId: clean-architecture-01jpcvxfxd87red8vvv00mjyy3
tags: ["development"]
aliases: ["clean-architecture", "architecture-patterns"]
globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.go", "**/*.rs", "**/*.scala"]
---
# クリーンアーキテクチャのルール
## 基本的な考え方
クリーンアーキテクチャは、ソフトウェアの依存関係を整理し、ビジネスロジックを技術的実装の詳細から分離することで、保守性と拡張性を高めるアーキテクチャパターンです。
## アーキテクチャレイヤー
クリーンアーキテクチャは以下の4つのレイヤーで構成されます:。
1. **ドメイン層**(最内層)
- ビジネスルールとエンティティを含む。
- 技術的詳細に依存しない純粋なビジネスロジック。
- 値オブジェクト、エンティティ、ドメインサービス。
- リポジトリインタフェース(依存関係逆転の原則による)
1. **ユースケース層**。
- アプリケーション固有のビジネスルール。
- ドメインモデルを操作するフロー制御。
- 処理フローの実装。
- イベントハンドラー設定。
1. **インタフェースアダプタ層**。
- 外部システムとの接点(コントローラー、ゲートウェイ)
- リポジトリの実装。
- 外部APIとのデータ変換や通信。
- RPCやDBアクセスなど具体的な入出力操作。
1. **インフラストラクチャ層**(横断的関心事)
- 各レイヤーから利用される汎用的な技術基盤。
- IO操作を伴わないユーティリティ機能。
- 設定管理、共通ユーティリティ。
- ロギング、ID生成、日付操作などの共通機能。
- `Option`型,`Result`型など。
## 依存関係のルール
### 基本的な依存方向
依存関係は外から内へ流れます:。
```
インターフェースアダプタ層 → ユースケース層 → ドメイン層。
```
- 各層は内側の層にのみ依存可能。
- 外側の層に依存することは禁止。
### インフラストラクチャ層の特殊性
インフラストラクチャ層は横断的関心事として扱われます:。
```
各レイヤー → インフラストラクチャ層。
```
- どのレイヤーからも利用可能な汎用的な技術基盤として機能。
- 特定の外部サービスに依存しない。
- IO操作を伴わないユーティリティのみを提供。
### 依存関係逆転の原則
ドメイン層とユースケース層は、具体的な実装ではなくインタフェースに依存します:。
- リポジトリのインタフェースはドメイン層に定義。
- 実装はインタフェースアダプタ層に配置。
- これにより高レベルモジュール(ドメイン層、ユースケース層)が低レベルモジュール(インタフェースアダプタ層)に直接依存することを回避。
## 各層の明確な責務
### ドメイン層
- ビジネスロジックの中核。
- エンティティ、値オブジェクト、ドメインサービス。
- 外部技術に依存しない純粋なビジネスルール。
- リポジトリインタフェース(ポート)
### ユースケース層
- アプリケーション固有のビジネスロジック。
- 複数ドメインオブジェクトの調整。
- ドメインオブジェクトを操作するフロー制御。
- 入出力ポートの定義。
### インタフェースアダプタ層
- 外部システムとの接点。
- リポジトリの実装(アダプター)
- データ変換処理。
- 外部サービスとの具体的な連携。
- RPCやDBアクセスなど入出力操作。
### インフラストラクチャ層
- 各レイヤーで利用される共通基盤。
- IO操作を伴わないユーティリティ。
- ロギング、設定管理などの共通機能。
- 言語機能を拡張するヘルパー・ユーティリティ。
## まとめ
クリーンアーキテクチャの本質は、ビジネスロジックを技術的詳細から分離し、依存関係を明確に制御することです。これにより変更に強く、テスト可能で、保守しやすいシステムを構築できます。「依存関係は外から内へ」という原則と「依存関係逆転の原則」を適切に適用することで、ビジネスロジックの純粋性を保ちながら技術的な実装の詳細を隔離できます。