ddd-aggregate について
ddd-aggregateは、既存の境界づけられたコンテキスト内にドメイン駆動設計の集約ルートを作成する開発スキルです。ドメイン層のファイルとテストのひな型を用意し、モデルをRufloに記録します。
主な機能
- 01既存の境界づけられたコンテキストを検証
- 02集約ルートと値オブジェクトを作成
- 03リポジトリーインターフェースを定義
- 04作成・更新のドメインイベントを追加
- 05ユニットテストのひな型とbarrel exportを生成
- 06モデルをRufloに保存
活用シーン
- 01既存コンテキスト内で新しい集約を開始
- 02ドメインエンティティとIDの構造を整備
- 03リポジトリーとイベント定義をひな型化
MCP 対応
RufloのMCPツールを使い、集約をドメインモデルグラフとタスクメモリーに保存します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ruvnet/ ruflo --skill ddd-aggregateインストール後、Claude Code で/ddd-aggregateを入力して読み込まれたか確認します。
詳細
バウンデッドコンテキスト内に、完全な集約ルートをスキャフォールディングします。
$ARGUMENTS を <context-name> <aggregate-name>(どちらも kebab-case)として解析します。コンテキストは src/ 配下にすでに存在している必要があります。
手順
-
検証:
src/<context>/domain/が存在することを確認します。存在しない場合は、最初に/ddd-context <context>を実行するよう提案します。 -
タスク前フック:
npx @claude-flow/cli@latest hooks pre-task --description "DDD aggregate: <aggregate-name> in <context>" -
集約ルートエンティティの作成:
- ファイル:
src/<context>/domain/entities/<aggregate-name>.entity.ts - 含める内容:一意の ID フィールド、不変条件の検証を行うコンストラクター、ビジネスルールを適用するドメインメソッド、ID に基づく
equals() - ベースの
AggregateRootインターフェースを拡張または実装する TypeScript クラスをエクスポートします。
- ファイル:
-
値オブジェクトの作成:
- ファイル:
src/<context>/domain/value-objects/<aggregate-name>-id.value-object.ts - 含める内容:ファクトリーメソッドと検証を備えた不変の ID 値オブジェクト
- 集約のプロパティとして適切な追加の値オブジェクトを追加します。
- ファイル:
-
リポジトリーインターフェースの作成:
- ファイル:
src/<context>/domain/repositories/<aggregate-name>.repository.ts - 含める内容:
findById、save、deleteメソッド - 集約ルートとその ID 値オブジェクトを型として使用します。
- インターフェースのみを作成し、実装は作成しません(インフラストラクチャの関心事です)。
- ファイル:
-
ドメインイベントの作成:
- ファイル:
src/<context>/domain/events/<aggregate-name>-created.event.ts - ファイル:
src/<context>/domain/events/<aggregate-name>-updated.event.ts - 含める内容:イベント名(過去形)、タイムスタンプ、集約 ID、ペイロード
- ファイル:
-
ユニットテストのスタブを作成:
- ファイル:
src/<context>/domain/entities/<aggregate-name>.entity.test.ts - 含める内容:コンストラクターの不変条件、ドメインメソッド、等価性のテストケース
describe/itを使用し、名前はshould [behavior] when [condition]の形式にします。
- ファイル:
-
バレルエクスポートの更新:関連する
index.tsバレルファイルに新しいファイルを追加します。 -
ドメインモデルグラフへの保存:
mcp__plugin_ruflo-core_ruflo__agentdb_hierarchical-store --parent "context:<context>" --child "aggregate:<aggregate-name>" --relation "contains" mcp__plugin_ruflo-core_ruflo__memory_store --key "ddd-aggregate-<context>-<aggregate-name>" --value "AGGREGATE_SUMMARY" --namespace tasks -
タスク後フック:
npx @claude-flow/cli@latest hooks post-task --task-id "ddd-aggregate-<aggregate-name>" --success true --train-neural true