clean-architect について
Uncle Bob の Clean Architecture に基づく、Gravito と TypeScript でアプリケーションを構築する開発者向けの設計ガイドです。依存関係の方向、ドメイン層の分離、エンティティから HTTP コントローラーまでの実装手順を示します。
主な機能
- 01Domain や Application の層構成
- 02内側から外側への依存ルール
- 03エンティティと値オブジェクトの区別
- 04ユースケース単位のロジック整理
- 05契約と実装のバインド
活用シーン
- 01Clean Architecture の構成設計
- 02コアドメインとフレームワークや DB の分離
- 03ドメインモデルから HTTP コントローラーまでの実装
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ gravito-framework/ gravito --skill clean-architectインストール後、Claude Code で/clean-architectを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/.keepreferences/.keepscripts/.keep詳細
クリーンアーキテクチャマスター
Uncle Bob のクリーンアーキテクチャに厳密に取り組むアーキテクトです。「コアドメイン」を「外側のシェル」(フレームワーク、UI、DB)から隔離することを目指します。
🏢 ディレクトリ構造(厳格な分離)
src/
├── Domain/ # Innermost: Business Logic (Pure TS)
│ ├── Entities/ # Core business objects
│ ├── ValueObjects/ # Immutables (Email, Price)
│ ├── Interfaces/ # Repository/Service contracts
│ └── Exceptions/ # Domain-specific errors
├── Application/ # Orchestration Layer
│ ├── UseCases/ # Application-specific logic
│ ├── DTOs/ # Data Transfer Objects
│ └── Interfaces/ # External service contracts
├── Infrastructure/ # External Layer (Implementations)
│ ├── Persistence/ # Repositories (Atlas)
│ ├── ExternalServices/# Mail, Payment gateways
│ └── Providers/ # Service Providers
└── Interface/ # Delivery Layer
├── Http/Controllers/# HTTP Entry points
└── Presenters/ # Response formatters
📜 レイヤーのルール
1. 依存関係のルール
- 内側から外側は参照できません。
DomainはApplicationやInfrastructureをインポートしてはいけません。 - 純粋なドメイン:
Domainレイヤーは@gravito/coreや@gravito/atlasに一切依存してはいけません。
2. エンティティと値オブジェクト
- エンティティ:ID を持ちます。ドメインメソッドによる変更が可能です。
- 値オブジェクト:不変です。識別子はありません。値が等しければ、2 つの値オブジェクトは等しいとみなされます。
🏗️ コードの設計図
ユースケースのパターン
export class CreateUserUseCase extends UseCase<Input, Output> {
constructor(private userRepo: IUserRepository) { super() }
async execute(input: Input): Promise<Output> {
// 1. Domain logic...
// 2. Persist...
// 3. Return DTO...
}
}
🚀 ワークフロー(SOP)
- エンティティ:コアの状態を
src/Domain/Entities/に定義します。 - インターフェース:永続化の契約を
src/Domain/Interfaces/に定義します。 - ユースケース:ビジネスアクションを
src/Application/UseCases/に実装します。 - 実装:具体的なリポジトリを
src/Infrastructure/Persistence/に構築します。 - 配線:サービスプロバイダーでインターフェースを実装にバインドします。
- デリバリー:ユースケースを呼び出すコントローラーを
src/Interface/Http/に作成します。
コメント
Markdown 対応