jpskill.com
📦 その他 コミュニティ

arch-domain-driven

DDD: bounded contexts, aggregates, entities, value objects, domain events, ubiquitous language

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o arch-domain-driven.zip https://jpskill.com/download/22271.zip && unzip -o arch-domain-driven.zip && rm arch-domain-driven.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/22271.zip -OutFile "$d\arch-domain-driven.zip"; Expand-Archive "$d\arch-domain-driven.zip" -DestinationPath $d -Force; ri "$d\arch-domain-driven.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して arch-domain-driven.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → arch-domain-driven フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

目的

このスキルは、コードを効果的に構造化するためにドメイン駆動設計(DDD)の原則を実装しています。境界づけられたコンテキスト、集約、エンティティ、値オブジェクト、およびドメインイベントの生成と管理を支援し、チーム間の連携を向上させるためのユビキタス言語を促進します。

使用する場面

このスキルは、eコマースプラットフォームや金融システムなど、豊富なドメインロジックを持つ複雑なアプリケーションで、明確な境界が結合度を低減する場合に利用してください。特に複数のサブドメインやレガシーシステムとの統合を扱う場合、モノリシックなコードベースを避けるために、アーキテクチャ設計フェーズで適用します。

主要な機能

  • 特定のドメイン向けに分離されたモジュールを持つ境界づけられたコンテキストを生成します。
  • トランザクションの一貫性のために、単一のルートを持つエンティティのクラスターとして集約を定義します。
  • 識別子を持つエンティティと、不変データのための値オブジェクトを作成します。
  • イベントバスへの公開など、反応をトリガーするためにドメインイベントを処理します。
  • ドメイン用語をコードや設定に埋め込むことで、ユビキタス言語を強制します。

使用パターン

常にドメインをマッピングして境界づけられたコンテキストを特定することから始めます。このスキルを使用して構造を足場固めし、その後コンテキスト内で集約を洗練させます。例えば、ビルドスクリプトで生成コマンドを実行することで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

コードスニペット:

  1. Pythonでコンテキストを生成して使用する:
    import openclaw.ddd as oc
    oc.generate_context(name="MyContext", description="User management")
    context = oc.load_context("MyContext")
  2. コードで集約を定義する:
    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にパイプして自動コミットしたり、JenkinsなどのサービスからAPIエンドポイントを呼び出すためにウェブフックを使用したりします。スタックに合わせて言語フラグ(例:--language java)を指定して互換性を確保します。

エラー処理

常にCLIの終了コードを確認してください。ゼロ以外は失敗を示します(例: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フラグを介してコンテキスト名が英数字であることを確認するなど、入力を検証します。

具体的な使用例

  1. eコマース注文システム用の境界づけられたコンテキストを構築する: まず、ドメインを特定します。注文には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)

  2. ユーザー登録フローでドメインイベントを処理する: まず、イベントを生成します: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(例:他のアーキテクチャスキルと依存関係を共有します)。
  • Co
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Purpose

This skill implements Domain-Driven Design (DDD) principles to structure code effectively. It helps generate and manage bounded contexts, aggregates, entities, value objects, and domain events, while promoting ubiquitous language for better team alignment.

When to Use

Use this skill for complex applications with rich domain logic, such as e-commerce platforms or financial systems, where clear boundaries reduce coupling. Apply it during architecture design phases to avoid monolithic codebases, especially when dealing with multiple subdomains or legacy integrations.

Key Capabilities

  • Generate bounded contexts with isolated modules for specific domains.
  • Define aggregates as clusters of entities with a single root for transaction consistency.
  • Create entities with identity and value objects for immutable data.
  • Handle domain events to trigger reactions, like publishing to event buses.
  • Enforce ubiquitous language by embedding domain terms into code and configurations.

Usage Patterns

Always begin by mapping the domain to identify bounded contexts. Use the skill to scaffold structures, then refine aggregates within contexts. For example, integrate with CI/CD by running generation commands in build scripts. Test incrementally: generate an entity, add it to an aggregate, and verify invariants. Avoid over-modeling by limiting contexts to high-cohesion areas, and use events for cross-context communication.

Common Commands/API

Interact via OpenClaw's CLI or REST API. Authentication requires setting $OPENCLAW_API_KEY in your environment.

CLI Commands:

  • Generate a bounded context: openclaw ddd generate-context --name MyContext --description "User management" --language python This creates a directory like ./my_context/ with subfolders for aggregates and entities.
  • Define an aggregate: openclaw ddd generate-aggregate --context MyContext --name AccountAggregate --root EntityName --invariants "balance > 0" Adds files like account_aggregate.py with the root entity and invariant checks.
  • Create an entity: openclaw ddd generate-entity --context MyContext --name UserEntity --properties "id:UUID, name:String"
  • Handle domain events: openclaw ddd generate-event --context MyContext --name UserCreatedEvent --payload "user_id:UUID"

API Endpoints:

  • POST /api/v1/ddd/contexts with JSON body: {"name": "MyContext", "description": "User management", "language": "python"} Requires header: Authorization: Bearer $OPENCLAW_API_KEY
  • POST /api/v1/ddd/aggregates with body: {"context": "MyContext", "name": "AccountAggregate", "root": "Account", "invariants": ["balance > 0"]}

Config Formats: Use YAML for configurations, e.g., in a .openclaw/config.yml file:

ddd:
  default_language: python
  contexts:
    - name: MyContext
      description: User management

Code Snippets:

  1. Generate and use a context in Python:
    import openclaw.ddd as oc
    oc.generate_context(name="MyContext", description="User management")
    context = oc.load_context("MyContext")
  2. Define an aggregate in code:
    from openclaw.ddd import Aggregate
    class AccountAggregate(Aggregate):
     def __init__(self, account_id):
         self.root = Entity(account_id)  # Assuming Entity is generated

Integration Notes

Integrate by exporting $OPENCLAW_API_KEY=your_api_key before CLI/API calls. Add OpenClaw as a dependency in your project (e.g., pip install openclaw for Python). For IDEs, use plugins like VS Code extensions to trigger commands via keyboard shortcuts, such as binding openclaw ddd generate-context to a key. Chain with other tools: pipe CLI output to Git for auto-commits, or use webhooks to call API endpoints from services like Jenkins. Ensure compatibility by specifying language flags (e.g., --language java) to match your stack.

Error Handling

Always check CLI exit codes; non-zero indicates failure (e.g., if [ $? -ne 0 ]; then echo "Error: Invalid input"; fi). For API calls, handle HTTP errors like 400 for validation failures or 401 for auth issues by checking response status. In code, wrap operations in try-except blocks:

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 inputs upfront, e.g., ensure context names are alphanumeric via CLI flags like --validate.

Concrete Usage Examples

  1. Building a bounded context for an e-commerce order system: First, identify the domain: orders involve aggregates like Order and LineItems. Run: openclaw ddd generate-context --name OrderContext --description "Manages orders" --modules orders,items This outputs: ./order_context/orders.py and ./order_context/items.py. Next, add an aggregate: openclaw ddd generate-aggregate --context OrderContext --name OrderAggregate --root Order --invariants "total > 0" In code, import and use: from order_context.aggregates import OrderAggregate; order = OrderAggregate(order_id=1)

  2. Handling domain events in a user registration flow: Start by generating the event: openclaw ddd generate-event --context UserContext --name UserRegisteredEvent --payload "user_id:UUID, email:String" This creates ./user_context/events/user_registered_event.py. Then, trigger it via API: curl -H "Authorization: Bearer $OPENCLAW_API_KEY" -X POST /api/v1/ddd/events -d '{"context": "UserContext", "event": "UserRegisteredEvent", "payload": {"user_id": "123"}}' In your application code: oc.publish_event(context="UserContext", event="UserRegisteredEvent", payload={"user_id": "123"}) to notify other services.

Graph Relationships

  • Related to cluster: se-architecture (e.g., shares dependencies with other architecture skills).
  • Connected via tags: ddd (links to domain modeling tools), domain (connects to entity management skills), bounded-context (relates to microservices patterns), architecture (ties into se-architecture cluster for broader design tools).