Clean Architecture準拠性を自動チェック(循環依存・namespace階層・レイヤー間参照制約)。新規実装時・リファクタリング時・Step完了時に使用。Phase B1で97点品質を達成した知見を適用。
Scanned 2/10/2026
Install via CLI
openskills install majiayu000/claude-skill-registry---
name: clean-architecture-guardian
description: Clean Architecture準拠性を自動チェック(循環依存・namespace階層・レイヤー間参照制約)。新規実装時・リファクタリング時・Step完了時に使用。Phase B1で97点品質を達成した知見を適用。
allowed-tools: Read, Grep
---
# Clean Architecture Guardian Skill
## 概要
このSkillは、F# + C# Clean Architecture実装の準拠性を自動的にチェックします。Phase B1で確立した97点品質基準を自動維持します。
## 使用タイミング
Claudeは以下の状況でこのSkillを自律的に使用すべきです:
1. **新規実装時**
- 新規クラス・モジュール作成時
- 新規Bounded Context追加時
- レイヤー間の新規依存関係作成時
2. **リファクタリング時**
- コード移動時
- namespace変更時
- プロジェクト参照変更時
3. **Step/Phase完了時**
- Step完了チェック時
- Phase完了検証時
- 統合ビルド前
4. **問題発生時**
- 循環依存エラー発生時
- namespace衝突発生時
- ビルドエラー発生時
## チェック項目
### 1. レイヤー分離原則
**詳細**: [`rules/layer-separation.md`](./rules/layer-separation.md)
**チェックポイント**:
- ✅ C# → F#依存は許可(Application層・UI層からDomain層呼び出し)
- ❌ F# → C#依存は禁止(Clean Architecture依存関係ルール準拠)
- ✅ 各層の責務分離(Domain/Application/Infrastructure/Web)
- ✅ 循環依存ゼロ
**典型的な問題**: `Error: Circular dependency detected between projects`
### 2. namespace階層化ルール
**詳細**: [`rules/namespace-design.md`](./rules/namespace-design.md)
**チェックポイント**:
- ✅ Bounded Context別サブnamespace使用
- ✅ 基本テンプレート準拠: `<ProjectName>.<Layer>.<BoundedContext>[.<Feature>]`
- ✅ 階層制限遵守(3階層推奨、4階層許容)
- ✅ F# Compilation Order制約対応
**典型的な問題**: `Error: The type or namespace name 'ProjectManagement' does not exist`
### 3. Bounded Context境界
**チェックポイント**:
- ✅ Common境界: 全境界文脈共通定義のみ
- ✅ Authentication境界: ユーザー・認証・権限管理
- ✅ ProjectManagement境界: プロジェクト管理
- ✅ UbiquitousLanguageManagement境界: ユビキタス言語管理
- ✅ DomainManagement境界: ドメイン管理(Phase C予定)
**典型的な問題**: 境界を越えた不適切な依存関係
### 4. F# Compilation Order
**チェックポイント**:
- ✅ Common → Authentication → ProjectManagement → UbiquitousLanguageManagement
- ✅ ValueObjects → Errors → Entities → DomainServices
- ✅ 前方参照なし(F#制約)
**典型的な問題**: `Error: The type 'ProjectId' is used before it is defined`
## 品質基準(Phase B1確立)
### Clean Architecture スコア: 97点
| 観点 | 目標 | Phase B1達成 |
|------|------|--------------|
| **依存関係の正しさ** | 100% | ✅ 100% |
| **循環依存** | 0件 | ✅ 0件 |
| **レイヤー責務分離** | 100% | ✅ 100% |
| **namespace階層化** | 100% | ✅ 100% |
| **Bounded Context分離** | 95%+ | ✅ 97% |
### ビルド品質基準
- ✅ **0 Warning**: 警告ゼロ維持
- ✅ **0 Error**: エラーゼロ維持
- ✅ **テスト100%成功**: 全テスト成功維持
## 自動チェック手順
### 1. 依存関係チェック
```
# プロジェクト参照を確認
Grep "ProjectReference" *.csproj *.fsproj
# 不正な依存(Domain → Infrastructure等)を検出
```
### 2. namespace階層チェック
```
# namespace宣言を確認
Grep "namespace UbiquitousLanguageManager" *.cs *.fs
# 基本テンプレート準拠を検証
# 期待: <ProjectName>.<Layer>.<BoundedContext>[.<Feature>]
```
### 3. Bounded Context境界チェック
```
# using/open文を確認
Grep "using UbiquitousLanguageManager" *.cs
Grep "open UbiquitousLanguageManager" *.fs
# 境界を越える不適切な参照を検出
```
### 4. F# Compilation Orderチェック
```
# .fsprojファイルのCompile順序を確認
Read src/UbiquitousLanguageManager.Domain/UbiquitousLanguageManager.Domain.fsproj
# Common → Authentication → ProjectManagement順序を検証
```
## よくある違反パターンと修正方法
### 違反1: F# → C#依存
```
❌ 誤り: Domain層からInfrastructure層への参照
<ProjectReference Include="..\UbiquitousLanguageManager.Infrastructure\..." />
```
**修正**: 依存関係逆転の原則(DIP)適用
```
✅ 正しい: Domain層でInterface定義、Infrastructure層で実装
// Domain層
type IProjectRepository = ...
// Infrastructure層(C#)
public class ProjectRepository : IProjectRepository { ... }
```
### 違反2: フラットnamespace
```
❌ 誤り: Bounded Contextなしのフラットnamespace
namespace UbiquitousLanguageManager.Domain
type Project = ...
type User = ... // 異なる境界文脈が混在
```
**修正**: Bounded Context別サブnamespace
```
✅ 正しい: 境界文脈別に分離
namespace UbiquitousLanguageManager.Domain.ProjectManagement
type Project = ...
namespace UbiquitousLanguageManager.Domain.Authentication
type User = ...
```
### 違反3: 循環依存
```
❌ 誤り: Application ⇄ Infrastructure 循環参照
```
**修正**: Clean Architecture依存方向遵守
```
✅ 正しい: Infrastructure → Application → Domain(一方向のみ)
```
### 違反4: F# Compilation Order違反
```
❌ 誤り: ProjectManagementがCommonより前
<Compile Include="ProjectManagement\ProjectEntities.fs" />
<Compile Include="Common\CommonTypes.fs" />
```
**修正**: 依存順序に並べ替え
```
✅ 正しい: Commonを最初に配置
<Compile Include="Common\CommonTypes.fs" />
<Compile Include="ProjectManagement\ProjectEntities.fs" />
```
## Phase B1での実証結果
### 実装影響(Phase B1 Step5)
- **修正ファイル数**: 42ファイル
- **修正時間**: 3.5-4.5時間
- **エラー種別**: namespace階層化・型衝突解決
- **最終品質**: 0 Warning/0 Error・全32テスト成功
### 確立した知見
1. **事前検証の重要性**: Step開始前にnamespace構造レビュー実施
2. **段階的移行**: プロジェクト単位での段階的移行
3. **ロールバック準備**: Step単位でのgit commit
## 関連Agents
- **design-review**: システム設計・Clean Architecture準拠確認
- **dependency-analysis**: 依存関係特定・実装順序決定
- **code-review**: コード品質・Clean Architecture準拠レビュー
## 注意事項
1. **Phase開始前に必ずチェック**: Phase B1 Step5の教訓
2. **検証プロセス実行**: Step開始時・Phase完了時の検証必須
3. **97点品質維持**: Phase B1で確立した品質基準を下回らない
4. **Bounded Context追加時**: ADR_019再確認必須
## 参考資料
- Phase B1 Step5実装記録: `Doc/08_Organization/Completed/Phase_B1/Step05_namespace階層化.md`
- Phase B1完了報告: `Doc/08_Organization/Completed/Phase_B1/Phase_Summary.md`
- GitHub Issue #42: namespace階層化対応Issue
No comments yet. Be the first to comment!