clean-architecture について
ソフトウェアアーキテクトや開発者向けの Clean Architecture ガイドです。影響度順のルールを使い、保守性とテスト性を備えたシステムの設計、レビュー、リファクタリングを支援します。
主な機能
- 018 分野のアーキテクチャルール
- 02影響度順に並んだルール
- 03依存関係とエンティティ設計の指針
- 04境界、アダプター、フレームワーク分離の指針
- 05レイヤー別テストの指針
活用シーン
- 01新しいシステムやモジュールの構成設計
- 02コードのアーキテクチャ違反のレビュー
- 03レイヤー間が結合したシステムのリファクタリング
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill clean-architectureインストール後、Claude Code で/clean-architectureを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
metadata.jsonassets/templates/_template.mdreferences/_sections.mdadapt-anti-corruption-layer.mdadapt-controller-thin.mdadapt-gateway-abstraction.mdadapt-mapper-translation.mdadapt-presenter-formats.mdbound-boundary-cost-awareness.mdbound-defer-decisions.mdbound-humble-object.mdbound-main-component.mdbound-partial-boundaries.mdbound-service-internal-architecture.mdcomp-common-closure.mdcomp-common-reuse.mdcomp-reuse-release-equivalence.mdcomp-screaming-architecture.mdcomp-stable-dependencies.mddep-acyclic-dependencies.mddep-data-crossing-boundaries.mddep-interface-ownership.mddep-inward-only.mddep-no-framework-imports.mddep-stable-abstractions.mdentity-encapsulate-invariants.mdentity-no-persistence-awareness.mdentity-pure-business-rules.mdentity-rich-not-anemic.mdentity-value-objects.md詳細
クリーンアーキテクチャのベストプラクティス
保守性とテスト容易性に優れたソフトウェアシステムを設計するための、クリーンアーキテクチャの原則に関する包括的なガイドです。Robert C. Martin 著『Clean Architecture: A Craftsman's Guide to Software Structure and Design』に基づいています。アーキテクチャへの影響度に応じて優先順位付けされた、8 カテゴリ、42 のルールを掲載しています。
適用する場面
次のような場合に、これらのガイドラインを参照してください。
- 新しいソフトウェアシステムやモジュールを設計するとき
- レイヤー間の依存関係を構成するとき
- ビジネスロジックとインフラストラクチャの境界を定義するとき
- アーキテクチャ上の違反がないかコードをレビューするとき
- 密結合したシステムを、よりクリーンな構造へリファクタリングするとき
優先順位別のルールカテゴリ
| 優先度 | カテゴリ | 影響度 | プレフィックス |
|---|---|---|---|
| 1 | 依存関係の方向 | CRITICAL | dep- |
| 2 | エンティティの設計 | CRITICAL | entity- |
| 3 | ユースケースの分離 | HIGH | usecase- |
| 4 | コンポーネントの凝集性 | HIGH | comp- |
| 5 | 境界の定義 | MEDIUM-HIGH | bound- |
| 6 | インターフェースアダプター | MEDIUM | adapt- |
| 7 | フレームワークの分離 | MEDIUM | frame- |
| 8 | テストアーキテクチャ | LOW-MEDIUM | test- |
クイックリファレンス
1. 依存関係の方向(CRITICAL)
dep-inward-only- ソースコードの依存関係は内側にのみ向けるdep-interface-ownership- インターフェースは実装側ではなくクライアント側に属するdep-no-framework-imports- 内側のレイヤーではフレームワークをインポートしないdep-data-crossing-boundaries- 境界を越えるデータには単純なデータ構造を使うdep-acyclic-dependencies- コンポーネント間の循環依存を排除するdep-stable-abstractions- 変わりやすい具象ではなく、安定した抽象に依存する
2. エンティティの設計(CRITICAL)
entity-pure-business-rules- エンティティには企業のビジネスルールのみを含めるentity-no-persistence-awareness- エンティティは永続化の方法を知ってはならないentity-encapsulate-invariants- ビジネス上の不変条件をエンティティ内にカプセル化するentity-value-objects- ドメインの概念には値オブジェクトを使うentity-rich-not-anemic- 貧血したデータ構造ではなく、豊かなドメインモデルを構築する
3. ユースケースの分離(HIGH)
usecase-single-responsibility- 各ユースケースの変更理由を 1 つにするusecase-input-output-ports- ユースケースの入力ポートと出力ポートを定義するusecase-orchestrates-not-implements- ユースケースはビジネスルールを実装せず、エンティティを統括するusecase-no-presentation-logic- ユースケースにプレゼンテーションロジックを含めないusecase-explicit-dependencies- すべての依存関係をコンストラクターで明示的に宣言するusecase-transaction-boundary- ユースケースでトランザクション境界を定義する
4. コンポーネントの凝集性(HIGH)
comp-screaming-architecture- 構造からフレームワークではなくドメインが伝わるようにするcomp-common-closure- 一緒に変更されるクラスをまとめるcomp-common-reuse- クライアントに未使用コードへの依存を強制しないcomp-reuse-release-equivalence- 凝集性のある単位でコンポーネントをリリースするcomp-stable-dependencies- 安定性の高い方向に依存する
5. 境界の定義(中〜高)
bound-humble-object- アーキテクチャ上の境界では、控えめなオブジェクトを使用しますbound-partial-boundaries- 完全な分離が時期尚早な場合は、部分的な境界を使用しますbound-boundary-cost-awareness- 境界のコストと無知のコストを比較検討しますbound-main-component- main をアプリケーションのプラグインとして扱いますbound-defer-decisions- フレームワークとデータベースに関する決定を先送りにしますbound-service-internal-architecture- サービスには内部クリーンアーキテクチャが必要です
6. インターフェースアダプター(中)
adapt-controller-thin- コントローラーを薄く保ちますadapt-presenter-formats- プレゼンターはビュー向けにデータをフォーマットしますadapt-gateway-abstraction- ゲートウェイによって外部システムの詳細を隠しますadapt-mapper-translation- レイヤー間の変換にはマッパーを使用しますadapt-anti-corruption-layer- 外部システム向けに腐敗防止層を構築します
7. フレームワークの隔離(中)
frame-domain-purity- ドメイン層にはフレームワークへの依存が一切ありませんframe-orm-in-infrastructure- ORM の使用はインフラストラクチャ層に留めますframe-web-in-infrastructure- Web フレームワークに関する関心事はインターフェース層に留めますframe-di-container-edge- 依存性注入コンテナーは境界部分に配置しますframe-logging-abstraction- ドメインインターフェースの背後でロギングを抽象化します
8. テストアーキテクチャ(低〜中)
test-tests-are-architecture- テストはシステムアーキテクチャの一部ですtest-testable-design- 最初からテスト可能性を考慮して設計しますtest-layer-isolation- 各層を個別にテストしますtest-boundary-verification- テストでアーキテクチャ上の境界を検証します
使用方法
詳しい説明やコード例については、個々のリファレンスファイルをお読みください。
- セクションの定義 - カテゴリー構成と影響レベル
- ルールのテンプレート - 新しいルールを追加するためのテンプレート
リファレンスファイル
| ファイル | 説明 |
|---|---|
| references/_sections.md | カテゴリーの定義と順序 |
| assets/templates/_template.md | 新しいルール用のテンプレート |
| metadata.json | バージョンとリファレンス情報 |
コメント
Markdown 対応