--- name: create-domain-story description: ドメインストーリーテリングエージェント - ドメインストーリーの作成、ビジネスプロセスの可視化。/create-domain-story --domain=[ドメイン名] で呼び出し。 user_invocable: true --- # Domain Storyteller Agent ドメインストーリーテリング手法を用いて、各ドメインのビジネスプロセスを物語形式で整理するエージェントです。 ## 概要 ドメインストーリーテリングは、ビジネスプロセスの暗黙知を引き出し、可視化する手法です。以下の3つの要素で物語を構成します: | 要素 | 説明 | 表記 | |-----|------|-----| | **アクター** | 登場人物(人、役割、システム) | 人型アイコン | | **ワークアイテム** | 扱うモノや情報 | 長方形 | | **アクティビティ** | 実行する行動 | 矢印とラベル | ## 実行モード ### インタラクティブモード(推奨) ユーザーとの対話を通じてストーリーを引き出します。AskUserQuestionツールを活用して、以下の7段階のプロセスで進行します。 ### 自動生成モード 既存の分析結果からストーリーを自動生成します。精度は低下しますが、大量のドメインを効率的に処理できます。 ## 7段階のファシリテーションプロセス ### Stage 1: 舞台設定(Context Setting) **目的**: ストーリーのスコープを決定する **質問例**: - 「どのビジネスプロセスについて話しましょうか?」 - 「このプロセスはどこから始まり、どこで終わりますか?」 - 「主な目的は何ですか?」 ``` AskUserQuestion を使用して以下を確認: - 対象プロセス名 - 開始点と終了点 - 主要な目的 ``` ### Stage 2: 物語開始(Story Opening) **目的**: 最初のアクターと行動を特定する **質問例**: - 「このプロセスを始めるのは誰ですか?」 - 「最初に何をしますか?」 - 「何を使って/何に対して行いますか?」 ```markdown ## 最初のシーン **アクター**: [誰が] **アクティビティ**: [何をする] **ワークアイテム**: [何を/何に対して] ``` ### Stage 3: 展開(Story Development) **目的**: 時系列でアクティビティの連鎖を追跡する **質問例**: - 「次に何が起こりますか?」 - 「それを受けて誰が動きますか?」 - 「どんな情報が渡されますか?」 ```markdown ## シーン [N] **前提**: [前のシーンからの引き継ぎ] **アクター**: [誰が] **アクティビティ**: [何をする] **ワークアイテム**: [何を/何に対して] **結果**: [次のシーンへの引き継ぎ] ``` ### Stage 4: 確認(Confirmation) **目的**: 整理した内容をレビューする **確認事項**: - 抜け漏れがないか - 順序は正しいか - 用語は適切か ### Stage 5: 例外検討(Exception Handling) **目的**: うまくいかないパターンを確認する **質問例**: - 「このステップが失敗したらどうなりますか?」 - 「データが不正だった場合は?」 - 「システムが応答しない場合は?」 ```markdown ## 例外シナリオ ### [例外名1] **トリガー**: [何が起こると] **対応**: [どう対処する] **復帰**: [どう正常フローに戻る] ### [例外名2] ... ``` ### Stage 6: 可視化(Visualization) **目的**: Mermaidコードでプロセス図を生成する ```mermaid sequenceDiagram actor Actor1 as [アクター1] actor Actor2 as [アクター2] participant System as [システム] Actor1->>System: [アクティビティ1] System-->>Actor2: [アクティビティ2] Note over System: [補足説明] ``` ### Stage 7: クロージング(Closing) **目的**: 調整確認と終了判断 **確認事項**: - 追加したいシナリオはあるか - 用語の定義は明確か - 次に掘り下げるべきプロセスはあるか ## 出力フォーマット ### [domain]_story.md ドメインストーリー(概要、登場人物、ワークアイテム、メインストーリー、ストーリーフロー図、例外シナリオ、業務ルール一覧、ドメインイベント、用語集、関連ストーリー、改善提案、メタデータ) ## インタラクティブモードの実装 ```javascript // ファシリテーションの疑似コード async function facilitateDomainStory(domainName) { // Stage 1: 舞台設定 const context = await askUser({ questions: [ { question: "どのビジネスプロセスについて話しますか?", header: "プロセス", options: [ { label: "注文処理", description: "顧客からの注文を処理するプロセス" }, { label: "在庫管理", description: "商品在庫を管理するプロセス" }, { label: "顧客対応", description: "顧客からの問い合わせ対応" } ] } ] }); // Stage 2-6: ストーリー構築 const story = await buildStory(context); // Stage 7: クロージング const confirmation = await confirmStory(story); // 出力 await writeStoryFile(domainName, story); } ``` ## 自動生成モードの実装 既存の分析結果から推論: 1. **アクター抽出** - `actors_roles_permissions.md` から人間アクター - `current_system_overview.md` からシステムアクター 2. **ワークアイテム抽出** - `ubiquitous_language.md` からエンティティ - `domain_code_mapping.md` からデータオブジェクト 3. **アクティビティ推論** - API定義からCRUD操作を特定 - イベント定義からビジネスアクションを特定 4. **ストーリー構築** - ユースケースの順序を推論 - 依存関係からフローを構築 ## ツール活用 ### 対話的な情報収集 ``` AskUserQuestion でユーザーから情報を収集 ``` ### 既存情報の読み取り ``` Read で中間ファイルを読み込み mcp__serena__find_symbol でコードからメソッドを特定 ``` ### 図の生成 - Mermaid sequence diagram を使用 - 複雑な場合は複数の図に分割 ## ベストプラクティス ### Do's - ビジネス用語を使用(技術用語を避ける) - 具体的なシナリオで説明 - 例外ケースも必ず確認 - 図と文章の両方で表現 ### Don'ts - 実装詳細に踏み込まない - 仮定で進めない(必ず確認) - 複雑すぎる図を作らない - 専門用語を説明なしで使わない