arch-domain-driven について
arch-domain-drivenは、複雑なアプリケーションにドメイン駆動設計を適用するソフトウェアスキルです。境界づけられたコンテキストや集約、エンティティ、値オブジェクト、ドメインイベントに沿ってコードを構成します。
主な機能
- 01境界づけられたコンテキストの生成
- 02集約と不変条件の定義
- 03エンティティと値オブジェクトの作成
- 04ドメインイベントの生成
- 05ユビキタス言語のコードへの反映
活用シーン
- 01ECドメインのモデリング
- 02金融アプリケーションの構成
- 03アプリケーションのサブドメイン分割
- 04ユーザー登録イベントの表現
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill arch-domain-drivenインストール後、Claude Code で/arch-domain-drivenを入力して読み込まれたか確認します。
詳細
目的
このスキルは、コードを効果的に構成するため、ドメイン駆動設計(DDD)の原則を実装します。チームの認識をそろえるためのユビキタス言語を促進しながら、境界づけられたコンテキスト、集約、エンティティ、値オブジェクト、ドメインイベントの生成と管理を支援します。
使用するタイミング
明確な境界によって結合度を下げられる、EC プラットフォームや金融システムなど、ドメインロジックが豊富な複雑なアプリケーションでこのスキルを使用します。モノリシックなコードベースを避けるため、特に複数のサブドメインやレガシーシステムとの統合を扱う場合に、アーキテクチャ設計の段階で適用してください。
主な機能
- 特定のドメインごとに独立したモジュールを備えた、境界づけられたコンテキストを生成します。
- トランザクションの整合性を保つため、単一のルートを持つエンティティのまとまりとして集約を定義します。
- ID を持つエンティティと、不変データを扱う値オブジェクトを作成します。
- イベントバスへの発行などの処理を起動するため、ドメインイベントを扱います。
- ドメイン用語をコードや設定に組み込んで、ユビキタス言語を徹底します。
使用パターン
まずドメインをマッピングし、境界づけられたコンテキストを特定してください。このスキルを使って構造を生成してから、コンテキスト内の集約を洗練します。たとえば、ビルドスクリプトで生成コマンドを実行して CI/CD に統合します。エンティティを生成し、それを集約に追加して、不変条件を検証するというように、段階的にテストします。凝集度の高い領域にコンテキストを限定して過剰なモデル化を避け、コンテキスト間の通信にはイベントを使用します。
主なコマンド/API
OpenClaw の CLI または REST API を通じて操作します。認証には、環境変数に $OPENCLAW_API_KEY を設定する必要があります。
CLI コマンド:
- 境界づけられたコンテキストを生成します:
openclaw ddd generate-context --name MyContext --description "User management" --language python./my_context/のようなディレクトリを作成し、その中に集約とエンティティ用のサブフォルダーを生成します。 - 集約を定義します:
openclaw ddd generate-aggregate --context MyContext --name AccountAggregate --root EntityName --invariants "balance > 0"ルートエンティティと不変条件のチェックを含むaccount_aggregate.pyなどのファイルを追加します。 - エンティティを作成します:
openclaw ddd generate-entity --context MyContext --name UserEntity --properties "id:UUID, name:String" - ドメインイベントを扱います:
openclaw ddd generate-event --context MyContext --name UserCreatedEvent --payload "user_id:UUID"
API エンドポイント:
- POST /api/v1/ddd/contexts、JSON ボディ:
{"name": "MyContext", "description": "User management", "language": "python"}次のヘッダーが必要です:Authorization: Bearer $OPENCLAW_API_KEY - POST /api/v1/ddd/aggregates、ボディ:
{"context": "MyContext", "name": "AccountAggregate", "root": "Account", "invariants": ["balance > 0"]}
設定形式:
設定には YAML を使用します。たとえば、.openclaw/config.yml ファイルでは次のようにします:
ddd:
default_language: python
contexts:
- name: MyContext
description: User management
コードスニペット:
- Python でコンテキストを生成して使用する:
import openclaw.ddd as oc
oc.generate_context(name="MyContext", description="User management")
context = oc.load_context("MyContext")
- コードで集約を定義する:
from openclaw.ddd import Aggregate
class AccountAggregate(Aggregate):
def __init__(self, account_id):
self.root = Entity(account_id) # Assuming Entity is generated
統合に関する注意事項
CLI/API を呼び出す前に $OPENCLAW_API_KEY=your_api_key をエクスポートして統合します。OpenClaw をプロジェクトの依存関係に追加します(例:Python の場合は pip install openclaw)。IDE では、VS Code の拡張機能などのプラグインを使って、キーボードショートカットからコマンドを実行します。たとえば、openclaw ddd generate-context をキーに割り当てます。ほかのツールと連携させるには、CLI の出力を Git にパイプして自動コミットしたり、Webhook を使って Jenkins などのサービスから API エンドポイントを呼び出したりします。使用する技術スタックとの互換性を確保するため、言語フラグ(例:--language java)を指定します。
エラー処理
CLI の終了コードを必ず確認してください。0 以外の場合は、失敗を示します(例:if [ $? -ne 0 ]; then echo "Error: Invalid input"; fi)。API 呼び出しでは、レスポンスのステータスを確認し、検証エラーを示す 400 や認証エラーを示す 401 などの HTTP エラーを処理します。コードでは、操作を try-except ブロックで囲みます:
try:
oc.generate_aggregate(context="MyContext", name="InvalidAggregate", invariants=["invalid"])
except oc.DDDValidationError as e: # Specific error for invariant checks
print(f"Error: {e.message} - Fix invariants and retry")
except oc.AuthError as e: # For $OPENCLAW_API_KEY issues
print("Error: Authentication failed - Set $OPENCLAW_API_KEY")
入力は事前に検証します。たとえば、--validate などの CLI フラグを使い、コンテキスト名が英数字のみであることを確認します。
具体的な使用例
-
EC の注文システムの境界づけられたコンテキストを構築する: まず、ドメインを特定します。注文には Order や LineItems などの集約が関係します。次を実行します:
openclaw ddd generate-context --name OrderContext --description "Manages orders" --modules orders,items次のファイルが出力されます:./order_context/orders.pyと./order_context/items.py。次に、集約を追加します:openclaw ddd generate-aggregate --context OrderContext --name OrderAggregate --root Order --invariants "total > 0"コードでは、インポートして使用します:from order_context.aggregates import OrderAggregate; order = OrderAggregate(order_id=1) -
ユーザー登録フローでドメインイベントを処理する: まず、イベントを生成します:
openclaw ddd generate-event --context UserContext --name UserRegisteredEvent --payload "user_id:UUID, email:String"これにより、./user_context/events/user_registered_event.pyが作成されます。次に、API 経由でイベントをトリガーします:curl -H "Authorization: Bearer $OPENCLAW_API_KEY" -X POST /api/v1/ddd/events -d '{"context": "UserContext", "event": "UserRegisteredEvent", "payload": {"user_id": "123"}}'アプリケーションコードでは、oc.publish_event(context="UserContext", event="UserRegisteredEvent", payload={"user_id": "123"})を使って、ほかのサービスに通知します。
グラフの関係
- 次のクラスターに関連しています:se-architecture(例:ほかのアーキテクチャスキルと依存関係を共有します)。
- 次のタグを介して接続されています:ddd(ドメインモデリングツールにリンクします)、domain(エンティティ管理スキルに接続します)、bounded-context(マイクロサービスのパターンに関連します)、architecture(より幅広い設計ツールを含む se-architecture クラスターに結びつきます)。