APM

>Agent Skill

@mattnigh/claude-skills-clean-architecture-principles-skill-md

skillcode-quality

ロバート・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 compli

code-quality
apm::install
$apm install @mattnigh/claude-skills-clean-architecture-principles-skill-md
apm::skill.md
---
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        # レビューチェックリスト
```

## コマンドリファレンス

### リソース読み取り

```bash
# 依存関係ルールの詳細
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
```

### スクリプト実行

```bash
# レイヤー違反検出スクリプト
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/
```

### テンプレート参照

```bash
# アーキテクチャレビューチェックリスト
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: レイヤー構造の確認

**目的**: プロジェクトのレイヤー構造を理解する

**ステップ**:

1. ディレクトリ構造の確認
2. 各ディレクトリの責務特定
3. レイヤーへのマッピング

**判断基準**:

- [ ] 4層(または3層)構造が明確か?
- [ ] 各ディレクトリの責務が単一か?
- [ ] レイヤー間の境界が明確か?

### Phase 2: 依存関係の検証

**目的**: 依存関係ルールの違反を検出する

**ステップ**:

1. インポート文の抽出
2. 依存の方向性チェック
3. 違反箇所の特定

**検証パターン**:

```bash
# Entities層の外部依存チェック
grep -r "import.*from.*framework" src/core/entities/

# Use Cases層の不正な依存チェック
grep -r "import.*from.*adapters" src/core/usecases/
```

**判断基準**:

- [ ] 内側から外側への依存がないか?
- [ ] 各レイヤーが適切な依存のみを持つか?
- [ ] 技術的詳細が内側に漏出していないか?

### Phase 3: 境界設計の評価

**目的**: インターフェース境界の適切性を評価する

**ステップ**:

1. インターフェース定義の確認
2. 実装の配置確認
3. 依存性逆転の検証

**判断基準**:

- [ ] インターフェースが内側で定義されているか?
- [ ] 実装が外側に配置されているか?
- [ ] 依存性逆転が正しく適用されているか?

### Phase 4: レポート生成

**目的**: 検出結果を構造化してレポートする

**ステップ**:

1. 違反の分類(Critical/High/Medium/Low)
2. 影響範囲の評価
3. 是正方針の提案

## ベストプラクティス

### すべきこと

1. **依存関係の可視化**:
   - 依存グラフを定期的に生成
   - 自動チェックをCI/CDに組み込み

2. **インターフェースの適切な配置**:
   - 抽象はドメイン層に
   - 実装はインフラ層に

3. **技術的詳細の隔離**:
   - ORM、フレームワーク依存を外側に
   - ビジネスロジックをPure関数で

### 避けるべきこと

1. **レイヤー飛び越し**:
   - ❌ Presentation → Entitiesへの直接参照
   - ✅ 各レイヤーを順番に通過

2. **技術的詳細の漏出**:
   - ❌ Entities層でのORM使用
   - ✅ Entities層は純粋なドメインモデル

3. **暗黙の依存**:
   - ❌ グローバル変数、シングルトン
   - ✅ 明示的な依存性注入

## トラブルシューティング

### 問題1: Entities層に外部依存が存在

**症状**: ドメインモデルがフレームワークに依存している

**原因**: アーキテクチャ理解不足、急ぎの実装

**解決策**:

1. 外部依存を特定
2. インターフェースを定義
3. 実装を外側に移動
4. 依存性注入で接続

### 問題2: 循環依存が発生

**症状**: A→B→C→Aのような循環参照

**原因**: レイヤー境界の曖昧さ、責務の不明確さ

**解決策**:

1. 共通部分を抽出
2. 依存方向を一方向に整理
3. インターフェースで切り離し

### 問題3: テストが困難

**症状**: ユニットテストで多くのモックが必要

**原因**: 依存関係が密結合

**解決策**:

1. インターフェースの導入
2. 依存性注入の適用
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層構造の詳細