--- name: clean-architecture description: >- クリーンアーキテクチャを採用しているプロジェクト向けの設計・レビュー支援。4層構造(ドメイン層、 ユースケース層、インターフェースアダプタ層、インフラストラクチャ層)に基づく。特にインフラ層は 横断的関心事(ロギング、設定管理)のみ、永続化やRPCはインターフェースアダプタ層に配置すべき という原則を適用する。トリガー:「クリーンアーキテクチャで」「クリーンアーキテクチャに従って」 「クリーンアーキテクチャのレビュー」など、クリーンアーキテクチャを明示的に指定した場合のみ起動。 一般的な「設計レビュー」「アーキテクチャ相談」では起動しない。 --- # クリーンアーキテクチャ クリーンアーキテクチャを採用しているプロジェクト向けの設計・レビュー支援。 > **注意**: このスキルはプロジェクトがクリーンアーキテクチャを採用している場合にのみ使用する。 > 他のアーキテクチャ(Hexagonal、Onion、レイヤード等)には適用しない。 ## 層構造の概要 ``` ┌─────────────────────────────────────────────────────┐ │ Infrastructure(横断的関心事のみ) │ │ ・ログ ・設定 ・メトリクス ・DI設定 │ ├─────────────────────────────────────────────────────┤ │ Interface Adapters(外部との境界) │ │ ・Controller ・Repository実装 ・Gateway実装 │ ├─────────────────────────────────────────────────────┤ │ Use Cases(アプリケーション固有ルール) │ │ ・Use Case ・Output Port(Repository Interface等)│ ├─────────────────────────────────────────────────────┤ │ Domain(ビジネスルール) │ │ ・Entity ・Value Object ・Domain Service │ └─────────────────────────────────────────────────────┘ ``` ## 重要な原則 ### 永続化・RPCの配置場所 | コンポーネント | 配置層 | |--------------|--------| | Repository Interface | ユースケース層(Output Port) | | **Repository 実装** | **インターフェースアダプタ層** | | Gateway Interface | ユースケース層(Output Port) | | **Gateway 実装(RPC等)** | **インターフェースアダプタ層** | ### インフラストラクチャ層の責務 **配置するもの**(横断的関心事のみ): - ロギング機構 - 設定管理 - メトリクス・トレーシング - DIコンテナ設定 **配置しないもの**: - Repository実装 → インターフェースアダプタ層へ - 外部API Gateway → インターフェースアダプタ層へ ## レビュー時のチェックポイント 1. **ドメイン層に外部依存がないか** - DB接続、HTTPクライアント等の混入を確認 2. **Repository実装の配置が正しいか** - インターフェースアダプタ層にあるべき 3. **インフラストラクチャ層が肥大化していないか** - 永続化コードが紛れ込んでいないか確認 4. **依存方向が内向きか** - 外側の層から内側への依存のみ許可 ## 詳細リファレンス 各層の詳細な責務と配置すべきコンポーネントの一覧は [references/layer-responsibilities.md](references/layer-responsibilities.md) を参照。 ## 関連スキル(併読推奨) このスキルを使用する際は、以下のスキルも併せて参照すること: - `repository-placement`: クリーンアーキテクチャにおけるリポジトリインターフェースの配置 - `package-design`: 各層内のパッケージ設計原則 - `ddd-module-pattern`: ドメイン層内のモジュール構成