本文へ移動
cccskills
無料GitHub で公開

eventstorming-facilitator

Facilitate DDD domain modeling sessions via EventStorming conversation and DML (Domain Modeling Language). Use whenever the user wants to model a business domain by discovering domain events, commands, aggregates, policies, read models, and bounded contexts through dialogue. Produces incrementally-built DML as the primary artifact, plus a Markdown session report. Also invoke for refining existing DML, mapping out a new feature's domain model, or when the user says "ドメインモデリングしたい", "イベントストーミング", "DDDで整理したい", "DMLを育てたい".

インストール方法を見る

含まれるファイル(35)

  • SKILL.md30.1 KB
  • examples/sample.dml.yaml15.1 KB
  • references/chat-output-format.md23.7 KB
  • references/checks/agg-purpose-quality.md2.3 KB
  • references/checks/bc-vocabulary-consistency.md2.6 KB
  • references/checks/causal-chain-completeness.md3.9 KB
  • references/checks/decision-rationale-clarity.md4.0 KB
  • references/checks/saga-completeness.md4.2 KB
  • references/checks/scenario-rules-quality.md3.2 KB
  • references/ddd-playbook.md35.0 KB
  • references/dml-spec.md2.0 KB
  • references/dml.schema.yaml25.4 KB
  • references/domain-starters.md8.0 KB
  • references/quality-check.md8.8 KB
  • references/session-guide.md17.8 KB
  • references/template.dml.yaml3.0 KB
  • references/term-glossary.md11.5 KB
  • scripts/dml_filters/__init__.py463 B
  • scripts/dml_filters/checks.py49.8 KB
  • scripts/dml_filters/flow_walk.py1.8 KB
  • scripts/dml_filters/hints.py12.3 KB
  • scripts/dml_filters/refs.py7.3 KB
  • scripts/dml_filters/views.py17.9 KB
  • scripts/dmlctl.py44.5 KB
  • scripts/eventstorming_build.py86.6 KB
  • scripts/hooks/block_direct_dml.py3.8 KB
  • scripts/RENDER_SPEC.md20.9 KB
  • scripts/tests/smoke_test_dmlctl.sh9.2 KB
  • scripts/tests/test_block_direct_dml.py1.9 KB
  • scripts/tests/test_flow_causality.py10.3 KB
  • scripts/tests/test_hints.py3.2 KB
  • scripts/tests/test_html_escaping.py1.6 KB
  • scripts/tests/test_provisional_flow.py4.7 KB
  • scripts/validate_dml.py5.6 KB
  • templates/event-flow.html47.3 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

EventStorming + DDD モデリング ファシリテーター

会話でドメインイベントを発見し DML(Domain Modeling Language)に情報圧縮する。docs/eventstorming/<session>.dml.yaml 1 ファイルがモデル唯一の真実源。モデル本体(contexts/aggregates/scenarios/policies/decisions)も散文(narratives/actions/questions/queries/contexts[].description)もすべて DML 内のトップレベル項目として保持される(別の .md は無い)。

AI は scripts/dmlctl.py 経由でしか DML を読み書きできない(PreToolUse フック hooks/block_direct_dml.py が Read/Edit/Write を技術的にブロック)。新規作成は dmlctl init、参照は dmlctl view --view=<name>(観点別スライス)、編集は dmlctl set/add/remove/update。リスト要素の更新は dmlctl update --where=<key=value> を使う。dmlctl 経由の書き込みは内部で build + validate を自動実行する(--no-postprocess で抑止可能)。

dmlctl の書き方(要点):

  • 値はインラインで渡す — --value/--item は YAML としてパースされる(スカラー・配列・dict すべて可)。一時ファイルを Write で作るのはアンチパターン。例外は、長文 prose 1 個だけを渡す set --value-file(生テキスト扱い。配列・dict に使うと全体が 1 文字列になり schema 違反)と、大型構造の add --item-file
  • 書く前に hint、初カテゴリは --dry-run — dmlctl hint --path=<a.b.c>(ファイル引数不要)で期待型・enum・必須キーとコピペ可能な例が schema から出る。そのセッションで初めて書く要素カテゴリは hint → --dry-run(書かずに schema 検証だけ実行)を通してから本書き込みする。型ミスの往復はこれでゼロにできる
  • ネストは狙った枝だけ書く — set --path='contexts[name=billing].lang.states' のように key[selKey=selVal] でリスト要素に降りられる。update --merge-yaml は再帰マージ(nested を壊さず葉だけ置換)。dict 全体を置換したいときだけ update --set-key
  • 複数コマンドの連鎖はシェル関数で — d() { python3 .claude/skills/eventstorming-facilitator/scripts/dmlctl.py "$@"; } を定義して d set … と呼ぶ(D="python3 …"; $D set は zsh で exit 127)。--no-postprocess を連ね最後だけ postprocess すると速い

頻出の落とし穴(基本則は「単数を表すキー=文字列/複数を表すキー=配列」。例外や詳細は hint が教える):

項目正
session.phasedmlctl advance <file> を使う(enum '1'..'7' の文字列。数値 3 は type 違反)
queries[].users=文字列 / sources=配列非対称に注意。scenarios[].pol は配列のみ、brs[].pol と transition.to は単数/複数両方可の oneOf
値内の : 等 YAML メタ文字クォートする(素のまま書くと mapping 誤解釈で parse error)
transitions[] は via 必須/AGG・EVENT・POLICY 名は PascalCase同名 state は BC ごとに lang.states でラベル差別化

PostToolUse hook が scripts/eventstorming_build.py を起動して dist/eventstorming/<session>.html を再生成する(AI は HTML を直接編集しない)。チャットには DML 全文を流さず、構造化テーブル+HTML パス案内に留める(Claude Code のチャット本文では SVG/Mermaid が描画されないため)。

ヒント(ユーザーへ): 質問に迷ったら ? と送ってください(半角 ? でも可)。判断の軸を提示して一緒に考えます。


ワークフロー(9フェーズ)と DML 出力タイミング

各フェーズの「書き出し対象」は .dml.yaml のトップレベルフィールド(更新は dmlctl 経由)。 フェーズ完了ごとに該当フィールドを書き出す。ユーザーが「保存して」と言ったら即座に反映する。

フェーズ書き出し対象(.dml.yaml フィールド)
1. スコープ確認session(id/domain/goal/status。実書き込みはフェーズ 2 冒頭の dmlctl init でまとめて行う — フェーズ 1 では HTML を作らないため)
2. ストーリー確認初回 dmlctl init → narratives[](kind: happy のハッピーパス散文 1 本 + kind: alt の代替シナリオ 2〜3 本、prose は粗で可) → Bash open <session>.html 初回起動
3. イベント発見scenarios[] 仮 entries + contexts[].lang 新規識別子 + 節目イベント選定(scenarios[].pivotal: true 2〜4 個) → HTML §2 に「暫定フロー」が自動描画される(下記)
4. CMD→EVT→POLICY チェーンscenarios[](next/brs[].terminal 付き)/ policies[] / narratives[].entry(happy + 代替 1〜2)/ contexts[] の up/dn・description(BC 散文)
4.5. BC 境界contexts[].lang 充実(文脈で意味が変わる言葉を記録)+ サブドメイン分類(domains[].subs[] の CORE/SUPPORTING/GENERIC + contexts[].sub 割り当て)
4.6. 目的・背景・制約aggregates[] の name/ctx/purpose/background/constraints[]/states + contexts[].aggs に AGG 名
5. 不変条件・エラー+属性・イベントペイロードscenarios[].rules[](rule/why)/scenarios[].errs[](cond/err/when)/aggregates[].transitions[]/aggregates[].attrs[]/aggregates[].events[].params[] + queries[](リードモデル候補)
6. 意思決定ログ(棚卸し)decisions[] は随時記録が原則(§毎ターンの行動)。このフェーズは新規に書く場ではなく、書き溜めた decisions[] の棚卸しをする場 — 記録漏れの補完、why/why_not が抽象用語だけになっている項目の書き直し、questions[].status を closed にして decision_id を紐付け
7. 整合性チェック → 出力dmlctl check --all で全構造観点を一括実行 → 観点別 LLM 評価 → actions[].done 更新 → 確定版 .dml.yaml

.dml.yaml の編集ごとに HTML は自動再生成されるが、ブラウザの自動リロードはしない(必要に応じて手動)。

§2 Event Walkthrough は途中段階でも描画される(暫定フロー): 正式なフロー図は narratives[].entry + scenarios[].next が揃うフェーズ 4 以降に出るが、それを待つと フェーズ 3 で 10 件以上のイベントを拾っても §2 が「フロー未定義」のままになり、 ユーザーが拾ったイベントを図で俯瞰できない。そこでビルダーは、確定フローが 1 本も無いとき scenarios[] の DML 記載順をそのまま時系列と見なした暫定フロー 1 本に自動フォールバック する(select_flows() → build_provisional_flow())。暫定フローは図の上に ⚠ バッジが付き、 分岐追跡・policy 自動挿入・非同期境界を持たない(brs[] は全 evt を並記するだけ)。

この挙動を前提に フェーズ 3 の完了テンプレでも Bash open で HTML を開いて見せる (フェーズ 2 完了時に続き 2 回目)。あわせて「これは暫定で、フェーズ 4 で連鎖を繋ぐと 分岐とポリシーを含む正式なフローに置き換わる」と 1 行添える。scenarios[] を DML に書く順序が そのまま暫定フローの時系列になるため、フェーズ 3 では業務の流れの順にシナリオを追加する。


毎ターンの行動

① 会話プロトコル

  • 質問は1回に1つ
  • 疑問文・促し文は全角 ? — 半角 ? は DML 記号や [?] マーカーなど機能的な用途のみ
  • EVT 拾い — 「〜された」「〜完了した」を EventName で仮追加
  • [?] を残す — 迷い・矛盾・未確認はすべてマーク。推測で埋めない。選択肢が見えてきたら decisions[] に昇格
  • 決まった瞬間に decisions[] へ記録 — そのターンで選択肢を 2 つ以上提示し、1 つに決まった(ユーザーが選んだ/「おまかせ」で AI が選んだ)なら、同じターンのうちに dmlctl add --to=decisions する。フェーズ 6 まで持ち越さない。理由:決めた直後は why/why_not を業務の言葉で書けるが、数フェーズ後には「なぜその案を捨てたか」が失われ、chosen だけが残った履歴になる。記録する内容は id(D1, D2, … の通し番号)/topic(決めた論点)/chosen/options[](採用案に adopted: true と why、不採用案に why_not)/affects。未確認の前提の上に置いた暫定決定は note にその旨と再検討条件を書き、対応する questions[] を open のまま残す。決着済みの [?] ホットスポットも同様に昇格させる
  • ? シグナル(段階対応) — ユーザーが ? を送ったら同一論点で連続する回数に応じて対応を変える。①1 回目: 判断の軸を 2〜3 点提示(押しつけない) ②2 回目: 角度を変えて噛み砕く(比喩・対比・小さな表。references/term-glossary.md §噛み砕きパターン)か、仮候補を 1 つ添えて反応を見る ③3 回目: エスカレーション — ユーザーが有識者にそのまま口に出せる具体的な質問文を 1 つ渡し(業務の言葉で・DDD 用語を使わず・Yes/No か二択を引き出す粒度。「確認してください」という抽象指示で終わらせない)、論点を questions[] に open で記録し(note 冒頭に [有識者相談推奨]+質問文)、仮置きのリコメンドで進めるかをユーザーに確認する。詳細な出力テンプレと記録コマンドは references/chat-output-format.md §? シグナルの段階対応。カウントは論点が解決するか別の論点に移ったらリセット(セッション通算ではない)
  • 「おまかせ」シグナル — 合理的なデフォルトを判断理由1行付きで選んで進める
  • ポイント解説原則 — DDD/EventStorming の専門用語(EVT / CMD / POLICY / AGG / BC / SAME-TX / EVENTUAL-TX / ACL など)が初出のときは、references/term-glossary.md を引いて 2 行構成(1 行目: 他の専門用語に依存しない日常の業務語で 1 文言い切り/2 行目: 今回のドメインから「⚪️が起きたら△△する」形の具体例)で添える。1 ターンに 1〜2 用語まで(3 つ以上は問いがぼやけるので絞る)。既出は繰り返さない。NG/OK の例文と噛み砕きパターン(比喩・対比・小さな表での再説明)は term-glossary.md §ポイント解説の書き方・§噛み砕きパターンを参照。意思決定の議論では why/why_not を業務文脈の言葉で引き出し、抽象用語(「責務違反」「DDD 的に正しい」等)だけで終わらせない
  • 毎ターン末尾 に > 迷ったら \?` を送ってください`
  • git 操作の禁止 — セッション中は AI から git commit / git push / git add / gh pr create 等を自発的に実行しない。理由:モデルの粒度・ホットスポットの解決はユーザーの判断に依存し、AI が勝手にスナップショットを切るとセッションの一貫性が崩れるため。ユーザーが「コミットして」「push して」と明示的に指示したときのみ実行する。「フェーズ完了したから」「区切りが良いから」を理由にしたコミット提案も避ける(ユーザーが必要なら頼んでくる)

② チャット出力フォーマット

ターンごとに2モードを使い分け。完全テンプレ: references/chat-output-format.md。

(a) フェーズ内往復 — Markdown のみ:

(ファシリテーション本文:確認・説明・1つの問い)

### ホットスポット (差分のみ)
- H{n}. [?] <設計判断>:<なぜ迷うか>

### 未確認事項 (差分のみ)
- Q{n}. <項目>:<確認したいこと>

HTML 更新・DML 抜粋は出さない。本文末尾は問い 1 つで終わる。

(b) フェーズ完了 — Markdown + 構造化テーブル + DML 抜粋 + HTML パス案内。 完全テンプレは references/chat-output-format.md §3 を読んで従う。骨子(この順で出す):

  1. **フェーズ{N} 完了: <フェーズ名>** ✅ + 1〜2 文の要約
  2. ### Event Flow — レーン (BC) × 🟨 Actor / 🟦 Command / 🟪 Policy / 🟧 Event のテーブル(⚡ = 非同期遷移)+ HTML パス案内
  3. ### 追加された DML — 該当フェーズで確定した分のみ(```dml フェンス。全文は流さない。粒度: chat-output-format.md §5)
  4. ### 新規ラベルの追加 — contexts[].lang 追加分のテーブル
  5. ### ホットスポット / ### 未確認事項 — H{n}・Q{n} はセッション通し番号(解決済みは欠番、再利用しない)
  6. **次のフェーズ: <名>** + 問い 1 つ + > 迷ったら \?` を送ってください`

③ HTML 出力(AI は触らない)

  • トリガー: dmlctl 経由の書き込み(init / set / add / remove / update)→ dmlctl 自身が build + validate を自動実行 → dist/eventstorming/<session>.html 再生成
  • 出力先: dist/eventstorming/(.dml.yaml は docs/、HTML は dist/)
  • 手動ビルド/全件/監視: python3 scripts/eventstorming_build.py <session>.dml.yaml / --all / --watch
  • Bash open dist/eventstorming/<session>.html はフェーズ 2 完了時とフェーズ 3 完了時(§2 が「散文のみ」→「暫定フロー入り」に変わる 2 つの節目)。それ以降は自動リロードしない
  • Claude Code preview panel への反映 — フェーズ完了テンプレ末尾で Read dist/eventstorming/<session>.html を必ず呼ぶ。HTML は数千行になるため limit 付き(例: 冒頭 数十行)で可。全文をコンテキストに載せる必要はなく、preview panel への反映がトリガーできれば十分
  • スマホアプリ案内 — HTML 新規/再生成のフェーズ完了テンプレに「📱 HTML をダウンロードしてブラウザで」を必ず添える
  • 描画仕様詳細(ビルド改修時のみ): scripts/RENDER_SPEC.md、テンプレ: templates/event-flow.html

④ DML ファイル管理(YAML-only)

  • アクティブ: docs/eventstorming/eventstorming-YYYYMMDD-HHMM.dml.yaml 1 ファイル
  • 基本操作は dmlctl 経由(値の渡し方・落とし穴は冒頭「dmlctl の書き方」参照):
    • 読み取り:python3 scripts/dmlctl.py view <file> --view=<name>(全文 Read を回避)
    • 書き込み:python3 scripts/dmlctl.py set/add/remove/update <file> --path=... --value=...
    • 観点一覧:dmlctl views / dmlctl checks
    • 用語統一・識別子リネーム:dmlctl refs <file> --name=<id> で全出現を確認 → dmlctl rename <file> --from=<old> --to=<new> [--ctx=<bc>] で一括置換(完全一致のみ。散文中の言及は ⚠ で報告されるので手動フォロー。set/update で 1 箇所ずつ書き換えるのはリネーム漏れの元)
  • フェーズ 2 で dmlctl init <path> --session-id=... --domain=... [--goal=...] で新規 DML を生成(テンプレートから session 入り空 DML を作成)
  • 書き出し後は 必ず Agent tool で品質チェックを起動(references/quality-check.md §標準フロー)。HTML は派生物なのでチェック不要
  • ユーザーが DML を直接編集した場合: 次ターン応答前に dmlctl view で観点別に再読み込みし変更を把握、必要なら品質チェックを起動

Event Flow(DML 駆動)

§3 のフロー図は narratives[].entry を起点に scenarios[].next を辿り、scenarios[].evt → policies[].trg のマッチで policy を自動挿入してビルダーが自動生成する。AI/人間が手書きの DSL を書く場面は無い。

narratives:
  - id: happy
    title: ハッピーパス — イベント作成から参加確定まで
    kind: happy
    entry: 主催者がイベントを下書きする         # フロー開始 scenarios[].name
    prose: |
      <ハッピーパス散文>
  - id: alt-waitlist
    title: 代替シナリオ — 残席ゼロで繰上待ち
    kind: alt
    entry: 参加者がイベントに参加申込する     # 任意。指定なし → §3 描画は省略
    prose: |
      <代替シナリオ散文>

scenarios:
  - name: 主催者がイベントを下書きする
    cmd: DraftEvent
    evt: EventDrafted
    next: 参加者がイベントに参加申込する      # 全フロー共通の次(文字列)

  - name: 参加者がイベントに参加申込する
    cmd: ApplyForEvent
    next: システムが申込を確定し監査記録する  # 通常分岐の継続先
    brs:
      - { cond: "...", evt: ParticipationApplied }
      - { cond: "...", evt: ParticipationWaitlisted, terminal: alt-waitlist }  # この分岐は alt-waitlist 終端

  - name: 注文確定(分岐点の例)
    cmd: PlaceOrder
    evt: OrderPlaced
    next:                                     # フロー分岐時は dict 形式
      happy: 旧機種発送
      alt-timeout: タイムアウト検知
  • scenarios[].next: 文字列 = 全フロー共通の次/dict = narratives[].id ごとの次。省略 = フロー終端
  • scenarios[].brs[].terminal: <narratives[].id> を指定すると「この brs 分岐が発火したらそのフローはここで終わる」と宣言
  • 同一 ctx の連続ステップはビルダー側で 1 レーンに併合され、ctx 変化やポリシー遷移は非同期矢印で描画
  • POLICY が trgs(複数トリガー join)を持てば BPMN シンクバー(Σ N) で表現、bulk: true であれば fanout(× N) で描画
  • 図の HTML 表現詳細は scripts/RENDER_SPEC.md §5(ビルド改修時のみ)

DML 記述ルール(要点)

DML は docs/eventstorming/<session>.dml.yaml 1 ファイルに YAML 直書き(フェンス不要)で書く。構文は references/dml.schema.yaml(JSON Schema)で機械検証。設計判断・モデリングルールの正典は references/ddd-playbook.md(DDD 概念軸で定義・命名・設計判断・検証観点を横断集約)。

本節は playbook の要点要約(インコンテキストの早見用)。各項の詳細・根拠・NG/OK 例は playbook の該当 § を参照。要約と正典が食い違ったら playbook が優先。

  • トップレベル: 下表「DML トップレベル構成」の 11 フィールド。scenarios/policies/aggregates の各要素は ctx: で所属 BC を参照。フロー連鎖は narratives[].entry + scenarios[].next / brs[].terminal で表現(flows[] は存在しない)
  • AGG 詳細はトップレベル aggregates[] に集約(詳細: playbook §8):name(必須)/ctx(必須)/purpose/background/constraints[]/states/transitions[](from/to/via/when)/attrs[](name/type/required/note)/events[](name/params[])。contexts[].aggs は AGG 名(PascalCase 文字列)の軽量名簿
  • scenarios[].name は日本語でアクター+行為。actor 必須(典型値: Organizer Member System)(詳細: playbook §2)
  • キー順 name → ctx → actor → qry → cmd → evt|brs → agg → rules → errs → pol を推奨
  • cmd/evt/agg/trg/emits/qry の値は英語識別子。日本語補足は rules[].why / errs[].when / note へ
  • errs は cond + err(ErrorType)+ 任意 when、rules は rule(英語の不変条件)+ 任意の why
  • contexts[] の up/dn は推奨(schema 上は optional だが、依存方向を明示すると BC マップが立体化する)。依存なしは空リスト [] を書いて「考慮済み」と示す。rel を併記すれば CML リレーション語彙が HTML §6 に描画される。BC 名は lowercase-with-hyphen(詳細: playbook §9)
  • 節目イベントは scenarios[].pivotal: true で宣言(1 モデルに 2〜4 個が目安。詳細: playbook §5)。タイムラインを大きく区切り BC 境界候補の手がかりになる EVT の発火元 scenario に付ける。HTML §3 で ⭐ バッジ+強調枠で描画
  • サブドメイン分類は domains[].subs[] + contexts[].sub(詳細: playbook §10)。type は CORE_SUBDOMAIN / SUPPORTING_SUBDOMAIN / GENERIC_SUBDOMAIN。未分類・CORE 不在・全件 CORE は subdomain_classification チェックが検出
  • policies は EVENTUAL-TX 専用。SAME-TX 分岐は発行元 scenario の brs で書く(詳細: playbook §6)
  • 副作用専用 POLICY(通知・メール送信など)は cmd 省略可(trg/qry/bulk/evt のみ)
  • POLICY の cmd が AGG を変更するなら agg を併記する(scenarios と対称化)。dangling_cmd チェックは policies[].cmd も declared として扱う
  • qry は判断材料のみ(コマンド実装内部のデータは含めない)
  • scenarios[].next / brs[].terminal の参照は dmlctl check --check=flow_chain_resolution で検証(typo・存在しない narrative ID を検出)
  • decisions[] は「採用/不採用理由つきの選択肢ログ」(詳細: playbook §11)。chosen は options[].name のいずれかと一致し、採用 option には adopted: true を対で付ける(chosen だけで adopted を落とすと decision_chosen_adopted チェックが弾く)。各 option に why(採用なら)または why_not(不採用なら)を書く

フェーズ別の書き出し規律

出力タイミングと対象フィールドは冒頭「ワークフロー(9フェーズ)」の表を参照。加えて:

  • フェーズ 3 の ctx は仮置きで良い: scenarios[].ctx は schema 必須だが、BC 境界はフェーズ 4.5 で確定するので、フェーズ 3 では暫定 slug(例 ordering payment)で仮置きしてよい。4.5 で境界が固まったら dmlctl rename <file> --from=<old-ctx> --to=<new-ctx> --ctx= で一括見直しする(1 件ずつ set し直すのはリネーム漏れの元)。
  • フェーズ 5 の rules/errs は全 scenario 義務ではない: goal に直結し、不変条件・業務エラーが業務価値を持つ scenario に絞る。単純な CRUD・導線 scenario は空でよい。dmlctl view --view=coverage に出る残欠は「意図的に許容した箇所」と「未着手」を区別して読む(残欠=バグではない)。詳細: playbook §3。
  • decisions[] はフェーズを問わず随時 add する: フェーズ 1〜5 の途中で決まった選択(イベントを畳む/分ける、境界の引き方、精算の形など)はその場で記録する。フェーズ 6 は棚卸し専用。
  • aggregates[]/policies[] を足したら lang にも同時登録: 所属 BC の contexts[].lang.aggs/lang.pols にも英→日ラベルを同時登録する(contexts[].aggs の軽量名簿とは別物)。漏れは dmlctl check --check=language_coverage が検出する。

書き出し後の品質チェック(必須): 詳細は references/quality-check.md。

  1. 構造チェック(LLM 不要)— dmlctl check <file> --all で全観点を一括実行({clean, results} サマリ + 違反ありは exit 1)。個別に見たいときは --check=<name>
  2. 意味チェック(観点別 Agent 起動)— references/checks/*.md を 1 観点ずつ

途中保存と再開: フェーズ完了ごとに dmlctl advance <file> [--status='Phase 4.6 完了'] で session.phase を前進させる(enum 検証つき。status も同時更新可)。action の完了は dmlctl action <file> --id=A1。再開時は dmlctl view --view=session-meta でフェーズを確認し、 --view=coverage で書き漏れ(rules/errs/attrs/params 等の未記入要素)を俯瞰してから続きに入る。

DML トップレベル構成

フィールド役割
sessionセッションメタ(id/domain/goal/status/started_at)
narratives[]散文。id/kind(happy|alt)/title/entry/prose。kind: happy は 1 本(400〜600 字)、kind: alt は複数可(100〜200 字)。entry を持つ narrative は HTML §2 フロー図 1 行を駆動
actions[]次のアクション(done フラグで進捗管理)
questions[]オープンクエスチョン(status: open/closed・closed は decision_id 必須)
queries[]リードモデル候補(name/ctx/purpose/users/sources/formula)
domains[]ドメイン分類(任意)
contexts[]BC 宣言(name/description 散文/lang/up/dn/aggs 軽量名簿)
aggregates[]AGG 詳細(name/ctx/purpose/background/constraints/states/transitions/attrs/events)
scenarios[]Scenario(name/ctx/actor/cmd/evt/agg/rules/errs/brs/next)。next と brs[].terminal でフロー連鎖を駆動
policies[]Policy / EVENTUAL-TX(name/ctx/trg/cmd/evt/agg)
decisions[]意思決定ログ(id/topic/chosen/options/affects)

HTML の 9 セクションは上記フィールドから機械的に組み立てられる(レンダリング詳細は scripts/RENDER_SPEC.md。ビルド改修時のみ参照)。

contexts[].description(BC 散文): 境界の理由 / 含むシナリオ / 目的 / 背景 / 制約 を Markdown 風の散文として書く。bullet (- foo) と **強調** は HTML 化で解釈される。

queries[] リードモデル候補の粒度: 単一集約への単純ルックアップは省略し、(a) 計算値を含む / (b) 複数集約・複数 BC を横断 / (c) BULK クエリ(一覧取得)のいずれかのみ記載。


サブコマンド

キーワード例参照
「フロー整合性チェック」「因果チェーンチェック」「causal check」references/quality-check.md §因果チェック
「表記チェック」「品質チェック」「quality check」references/quality-check.md §標準フロー

サブエージェントの結果は1行でユーザー報告。


Artifact 化(スマホで HTML を閲覧)

ユーザーが「Artifact 化」「スマホで見たい」と言ったら:

  1. python3 scripts/eventstorming_build.py docs/eventstorming/<session>.dml.yaml --artifact --copy
    • --artifact: Artifact 互換の <session>-artifact.html を出力
    • --copy: 内容を pbcopy でクリップボードへ(macOS 限定)
  2. claude.ai の 新しいチャット に貼り付け「これを Artifact として表示して」と依頼
  3. 1行報告: 📋 <session>-artifact.html を生成 / クリップボードへコピー済み。claude.ai で Artifact 化してください

制約: 単一 HTML のみ/自動更新なし(再ビルド後は再貼り付け)/--copy は macOS 限定。


参照ファイル

ファイル用途
references/ddd-playbook.mdDDD モデリングルールの正典(DDD 概念軸で定義・命名・設計判断・検証観点を横断集約)。設計判断に迷ったらまずここ
references/dml.schema.yamlDML 構文の機械検証スキーマ(JSON Schema Draft 2020-12)。型・必須・enum・命名 pattern の真実源
references/dml-spec.md(→ ddd-playbook.md に統合。旧 § の対応表のみ残置)
scripts/RENDER_SPEC.mdHTML レンダリング実装仕様(ビルドスクリプト改修時のみ。通常セッションでは読まない)
references/session-guide.mdファシリテーション質問パターン(フェーズ別)
references/domain-starters.mdよくあるドメインの候補イベントリスト
references/template.dml.yaml新規セッション用 DML スケルトン(dmlctl init が使用)
references/term-glossary.mdDDD/EventStorming 用語の 1 行ポイント解説辞書。専門用語初出時に AI が引いてチャットに添える
references/quality-check.md品質チェック(構造→意味の 2 段階・Agent 起動テンプレ・因果チェックサブセット)
references/checks/*.md意味チェック 6 観点(scenario-rules-quality / saga-completeness / bc-vocabulary-consistency / agg-purpose-quality / causal-chain-completeness / decision-rationale-clarity)
scripts/dmlctl.pyDML 観点別 I/O CLI(view/set/add/remove/check)
scripts/dml_filters/*.pyview と check の Python 実装
references/chat-output-format.mdチャット出力テンプレート完全版
templates/event-flow.htmlHTML 出力の汎用テンプレート
examples/sample.dml.yamlDML 参照例(コミュニティイベント参加ドメイン、narratives[](entry 付き)/ decisions[] を含む)

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Facilitate Kimball-style dimensional (data warehouse / BI) modeling sessions through conversation, producing DimML (Dimensional Modeling Language, YAML) as the primary artifact plus a bus-matrix + star-schema HTML. Use whenever the user wants to design fact tables, dimensions, a star schema, or a bus matrix — declaring grain, choosing SCD types, identifying conformed dimensions and measures (additivity) — by grilling one step at a time. Also invoke for refining an existing DimML, or when the user says "ディメンショナル・モデリング", "ディメンションモデリング", "スタースキーマ", "バスマトリクス", "ファクト表を設計したい", "グレインを決めたい", "DimML を育てたい", "Kimball で整理したい".

iepyon/pocket-modeling42026年9月6日 更新

yusaburi

無料

Shakes your mental models with critical rigor, challenges assumptions, exposes blind spots, and provides multi-perspective insights as a strict thinking mentor. Deliberately breaks format conventions to stimulate genuine cognitive discomfort. Use when you want to stress-test an idea, shake your mental model, ask to challenge my assumptions, find blind spots, deepen my thinking, or request critical review with phrases like yusaburi or what do you think of this plan.

日本語の概要は準備中です。原文の説明を表示しています。

iepyon/pocket-modeling42026年9月6日 更新

iepyon のスキルをすべて見る

このスキルの問題を報告する