mcpField
C
clean-architect

clean-architect

github.com/gravito-framework開発248 回インストール27 週間前に更新
リポジトリ

clean-architect について

Uncle Bob の Clean Architecture に基づく、Gravito と TypeScript でアプリケーションを構築する開発者向けの設計ガイドです。依存関係の方向、ドメイン層の分離、エンティティから HTTP コントローラーまでの実装手順を示します。

主な機能

  1. 01Domain や Application の層構成
  2. 02内側から外側への依存ルール
  3. 03エンティティと値オブジェクトの区別
  4. 04ユースケース単位のロジック整理
  5. 05契約と実装のバインド

活用シーン

  1. 01Clean Architecture の構成設計
  2. 02コアドメインとフレームワークや DB の分離
  3. 03ドメインモデルから HTTP コントローラーまでの実装

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/gravito-framework/gravito --skill clean-architect

インストール後、Claude Code で/clean-architectを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/
.keep
references/
.keep
scripts/
.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)

  1. エンティティ:コアの状態を src/Domain/Entities/ に定義します。
  2. インターフェース:永続化の契約を src/Domain/Interfaces/ に定義します。
  3. ユースケース:ビジネスアクションを src/Application/UseCases/ に実装します。
  4. 実装:具体的なリポジトリを src/Infrastructure/Persistence/ に構築します。
  5. 配線:サービスプロバイダーでインターフェースを実装にバインドします。
  6. デリバリー:ユースケースを呼び出すコントローラーを src/Interface/Http/ に作成します。

コメント