| name | .claude/skills/clean-architecture-principles/SKILL.md |
| description | ロバート・C・マーティン(Uncle Bob)の『Clean Architecture』に基づく 📚 リソース参照: このスキルには以下のリソースが含まれています。 必要に応じて該当するリソースを参照してください: - `.claude/skills/clean-architecture-principles/resources/dependency-rule.md`: 内側→外側依存の禁止ルール、インポート文・型参照・継承での違反検出と対処法 - `.claude/skills/clean-architecture-principles/resources/hybrid-architecture-mapping.md`: ハイブリッドアーキテクチャへのマッピング - `.claude/skills/clean-architecture-principles/resources/layer-structure.md`: Entities・Use Cases・Interface Adapters・Frameworksの4層構造と各層の責務・依存制約・チェックリスト - `.claude/skills/clean-architecture-principles/templates/architecture-review-checklist.md`: アーキテクチャレビューチェックリスト - `.claude/skills/clean-architecture-principles/scripts/check-layer-violation.mjs`: Clean Architecture レイヤー違反検出スクリプト 専門分野: - 依存関係ルール: 依存の方向は常に「外側から内側へ」のみ - レイヤー分離: Entities → Use Cases → Interface Adapters → Frameworks - 境界の明確化: インターフェースによる疎結合設計 - 技術的詳細の隔離: DB、UI、フレームワークからの独立 使用タイミング: - アーキテクチャの依存関係違反を検出する時 - レイヤー構造を設計・検証する時 - インターフェースによる境界設計が必要な時 - 技術的詳細の漏出をチェックする時 Use proactively when checking architecture compliance, detecting layer violations, or designing interface boundaries for Clean Architecture adherence. |
| version | 1.0.0 |
Clean Architecture Principles
概要
このスキルは、ロバート・C・マーティンが『Clean Architecture』で提唱した原則に基づき、 ソフトウェアアーキテクチャの依存関係ルールとレイヤー分離を検証・設計するための知識を提供します。
核心概念: ソフトウェアアーキテクチャの目的は「変更コストを最小化すること」である。 依存関係の方向を制御し、ビジネスロジックを技術的詳細から隔離することで、 長期的な保守性とテスト容易性を実現する。
主要な価値:
- 依存関係ルールにより、内側のレイヤーが外側の変更から保護される
- ビジネスロジックが技術的詳細(DB、UI、フレームワーク)から独立
- テスト容易性の向上(モック・スタブによる置き換えが容易)
- 技術スタックの変更が容易
対象ユーザー:
- アーキテクチャレビューを行う.claude/agents/arch-police.md
- システム設計者、開発者
- コードレビュー担当者
リソース構造
clean-architecture-principles/
├── SKILL.md # 本ファイル
├── resources/
│ ├── dependency-rule.md # 依存関係ルールの詳細
│ ├── layer-structure.md # 4層構造の詳細
│ ├── boundary-interfaces.md # 境界インターフェースの設計
│ └── hybrid-architecture-mapping.md # プロジェクト固有マッピング
├── scripts/
│ └── check-layer-violation.mjs # レイヤー違反検出スクリプト
└── templates/
└── architecture-review-checklist.md # レビューチェックリスト
コマンドリファレンス
リソース読み取り
# 依存関係ルールの詳細
cat .claude/skills/clean-architecture-principles/resources/dependency-rule.md
# レイヤー構造の詳細
cat .claude/skills/clean-architecture-principles/resources/layer-structure.md
# 境界インターフェースの設計
cat .claude/skills/clean-architecture-principles/resources/boundary-interfaces.md
# ハイブリッドアーキテクチャへのマッピング
cat .claude/skills/clean-architecture-principles/resources/hybrid-architecture-mapping.md
スクリプト実行
# レイヤー違反検出スクリプト
node .claude/skills/clean-architecture-principles/scripts/check-layer-violation.mjs src/
# 特定ディレクトリの検証
node .claude/skills/clean-architecture-principles/scripts/check-layer-violation.mjs src/shared/core/
テンプレート参照
# アーキテクチャレビューチェックリスト
cat .claude/skills/clean-architecture-principles/templates/architecture-review-checklist.md
依存関係ルール
基本原則
「依存は常に外側から内側へのみ」
外側(不安定) 内側(安定)
↓ ↑
Frameworks & Drivers → Entities
↓ ↑
Interface Adapters → Use Cases
内側のレイヤーは外側のレイヤーについて何も知らない。 名前、関数、クラス、その他いかなるソフトウェアエンティティも、 外側のレイヤーで宣言されたものを内側のレイヤーから参照してはならない。
レイヤー構造
1. Entities(最内層)
責務: ビジネスルール、ドメインモデル 特徴:
- 外部依存ゼロ
- 最も安定している
- 変更理由はビジネスルールの変更のみ
含まれるもの:
- ドメインエンティティ
- バリューオブジェクト
- ドメインサービス
- ビジネスルール
禁止事項:
- フレームワーク依存
- DB依存(ORM、SQL)
- 外部API依存
2. Use Cases(ユースケース層)
責務: アプリケーション固有のビジネスロジック 特徴:
- Entitiesにのみ依存
- システムの入出力データを定義
含まれるもの:
- ユースケース(Interactor)
- 入出力ポート(Input/Output Boundary)
- リクエスト/レスポンスモデル
依存制約:
- Entitiesにのみ依存可能
- フレームワーク、DB、UIに依存しない
3. Interface Adapters(インターフェースアダプター層)
責務: データ形式変換、外部との橋渡し 特徴:
- Use CasesとEntitiesに依存可能
- 外部形式と内部形式の変換
含まれるもの:
- Controller
- Presenter
- Gateway
- Repository実装
依存制約:
- Use CasesとEntitiesに依存可能
- Frameworks層の詳細に依存しない
4. Frameworks & Drivers(最外層)
責務: フレームワーク、DB、UI、外部サービス 特徴:
- 最も不安定
- 技術的詳細
含まれるもの:
- Webフレームワーク
- DBドライバ
- UIフレームワーク
- 外部サービスSDK
境界の明確化
インターフェースによる依存性逆転
内側のレイヤーは、外側のレイヤーの機能が必要な場合、 インターフェースを定義し、外側がそれを実装する。
Use Cases層:
interface IUserRepository {
findById(id: string): User
}
Interface Adapters層:
class UserRepositoryImpl implements IUserRepository {
findById(id: string): User { /* DB操作 */ }
}
境界設計のチェックリスト
- インターフェースは内側のレイヤーで定義されているか?
- 実装は外側のレイヤーに配置されているか?
- データ形式の変換は境界で行われているか?
- 内側から外側への直接参照がないか?
ワークフロー
Phase 1: レイヤー構造の確認
目的: プロジェクトのレイヤー構造を理解する
ステップ:
- ディレクトリ構造の確認
- 各ディレクトリの責務特定
- レイヤーへのマッピング
判断基準:
- 4層(または3層)構造が明確か?
- 各ディレクトリの責務が単一か?
- レイヤー間の境界が明確か?
Phase 2: 依存関係の検証
目的: 依存関係ルールの違反を検出する
ステップ:
- インポート文の抽出
- 依存の方向性チェック
- 違反箇所の特定
検証パターン:
# Entities層の外部依存チェック
grep -r "import.*from.*framework" src/core/entities/
# Use Cases層の不正な依存チェック
grep -r "import.*from.*adapters" src/core/usecases/
判断基準:
- 内側から外側への依存がないか?
- 各レイヤーが適切な依存のみを持つか?
- 技術的詳細が内側に漏出していないか?
Phase 3: 境界設計の評価
目的: インターフェース境界の適切性を評価する
ステップ:
- インターフェース定義の確認
- 実装の配置確認
- 依存性逆転の検証
判断基準:
- インターフェースが内側で定義されているか?
- 実装が外側に配置されているか?
- 依存性逆転が正しく適用されているか?
Phase 4: レポート生成
目的: 検出結果を構造化してレポートする
ステップ:
- 違反の分類(Critical/High/Medium/Low)
- 影響範囲の評価
- 是正方針の提案
ベストプラクティス
すべきこと
依存関係の可視化:
- 依存グラフを定期的に生成
- 自動チェックをCI/CDに組み込み
インターフェースの適切な配置:
- 抽象はドメイン層に
- 実装はインフラ層に
技術的詳細の隔離:
- ORM、フレームワーク依存を外側に
- ビジネスロジックをPure関数で
避けるべきこと
レイヤー飛び越し:
- ❌ Presentation → Entitiesへの直接参照
- ✅ 各レイヤーを順番に通過
技術的詳細の漏出:
- ❌ Entities層でのORM使用
- ✅ Entities層は純粋なドメインモデル
暗黙の依存:
- ❌ グローバル変数、シングルトン
- ✅ 明示的な依存性注入
トラブルシューティング
問題1: Entities層に外部依存が存在
症状: ドメインモデルがフレームワークに依存している
原因: アーキテクチャ理解不足、急ぎの実装
解決策:
- 外部依存を特定
- インターフェースを定義
- 実装を外側に移動
- 依存性注入で接続
問題2: 循環依存が発生
症状: A→B→C→Aのような循環参照
原因: レイヤー境界の曖昧さ、責務の不明確さ
解決策:
- 共通部分を抽出
- 依存方向を一方向に整理
- インターフェースで切り離し
問題3: テストが困難
症状: ユニットテストで多くのモックが必要
原因: 依存関係が密結合
解決策:
- インターフェースの導入
- 依存性注入の適用
- テスト用スタブの作成
関連スキル
- .claude/skills/solid-principles/SKILL.md (
.claude/skills/solid-principles/SKILL.md): SOLID原則、特にDIP - .claude/skills/dependency-analysis/SKILL.md (
.claude/skills/dependency-analysis/SKILL.md): 循環依存検出 - .claude/skills/architectural-patterns/SKILL.md (
.claude/skills/architectural-patterns/SKILL.md): Hexagonal、Onion等 - .claude/skills/project-architecture-integration/SKILL.md (
.claude/skills/project-architecture-integration/SKILL.md): プロジェクト固有設計
メトリクス
依存関係健全性スコア
評価基準:
- 内→外依存数: 0が理想(違反数)
- 循環依存数: 0が理想
- インターフェース境界率: 高いほど良い
レイヤー分離スコア
測定方法: (正しい方向の依存数 / 総依存数) × 100
目標: >95%
変更履歴
| バージョン | 日付 | 変更内容 |
|---|---|---|
| 1.0.0 | 2025-11-25 | 初版作成 - Clean Architecture原則の体系化 |
参考文献
- 『Clean Architecture』 Robert C. Martin著
- Part V: Architecture - 依存関係ルールの理論
- Chapter 22: The Clean Architecture - 4層構造の詳細