SKILL. md
--- name: "demand-definition" description: "新機能のアイデアを壁打ちし、本当に必要な要件を見極めるためのスキル。JSON進捗管理でステップバイステップに進行。トリガー:「壁打ちしたい」「機能を考えたい」「要件を整理したい」「この機能について相談」「新機能のアイデア」「要求定義」「要件定義」" allowed-tools: "Read, Write, Edit, Glob, Grep, Task, mcp__serena__find_file, mcp__serena__get_symbols_overview, mcp__serena__find_symbol, mcp__serena__search_for_pattern, mcp__serena__list_dir" --- # Demand Definition - 要求定義・要件定義スキル 新機能のアイデアを壁打ちし、要件定義・UI設計プロンプト生成まで段階的に進めるスキル。 ## コア原則 1. **すぐに解決策を出さない** - まず「なぜ?」を深掘りする 2. **各ステップを確実に完了** - 進捗をJSONで管理 3. **既存資産を活用** - コードベースを参照して代替案を検討 4. **コードファーストの調査** - **全フェーズで必ず現状のコードを把握してから質問する** ## 行動方針(CRITICAL) **各ステップ開始時、必ず以下の順序で実行すること**: 1. ✅ **ドメイン知識ドキュメントを読み込む**(最優先) - `docs\domain\`配下のドキュメントを確認 - ユーザーが言及した画面に関連するドキュメント(`http:\\task-board.md`, `http:\\plan.md`, `http:\\progress.md`)を読む - アプリケーション全体の機能概要、目的、ユースケースを把握 2. ✅ **コードを調査する**(ユーザーに聞く前に) - ユーザーが言及した画面、機能、コンポーネントを特定 - `mcp__serena__*`ツールで現状の実装を把握 - 既存のパターン、制約、類似機能を確認 3. ✅ **調査結果から不要な質問を省く** - ドメイン知識ドキュメント・コードから分かることは質問しない - 既に実装されている機能は前提として扱う - 現状の制約を理解した上で提案する 4. ✅ **本当に分からない部分だけ質問する** - ドメイン知識・コードからは読み取れないユーザーの意図 - ビジネス要件や優先順位 - 将来の拡張計画 **NG例**: - ❌「現在の画面構成はどうなっていますか?」→ ドメイン知識ドキュメント・コードを見れば分かる - ❌「どんな状態がありますか?」→ ドメイン知識ドキュメント・コードを見れば分かる - ❌「既存の類似機能はありますか?」→ ドメイン知識ドキュメント・コードを検索すれば分かる - ❌「この画面の目的は何ですか?」→ ドメイン知識ドキュメントに記載されている **OK例**: - ✅ ドメイン知識ドキュメント・コードから現状を把握 → 「`docs\domain\progress.md`を確認しました。現在は3カラム構成(未着手\進行中・保留\完了)ですが、スクロール問題が課題とのこと。どのくらいの頻度で困っていますか?」 - ✅ ドメイン知識ドキュメント・既存実装を確認 → 「ドメイン知識ドキュメントと既存実装を確認しましたが、完了タスクのトグル機能は見つかりませんでした。完了タスクを確認したい頻度はどのくらいですか?」 ## ワークフロー概要
Step 1: 課題・目的の深掘り ↓ Step 2: 代替案・既存機能の検討 ↓ Step 3: スコープ決定(MVP定義) ↓ Step 4: 要件定義ドキュメント生成 ↓ Step 5: UI設計プロンプト生成
**Note**: 依存関係分析はcc-sdd(Claude Code Spec-Driven Development)に任せるため、このスキルでは扱いません。 ## セッション開始 壁打ちセッション開始時、以下を実行: 1. **セッション名(feature-slug)を生成**: - 機能名を英語のkebab-caseスラッグに変換 - 日本語の場合は英訳してからスラッグ化 - 既存セッションと重複する場合は末尾に連番を付与 **生成例**: - 「進捗管理画面レイアウト改善」 → `progress-layout-improvement` - 「ユーザーのお気に入り機能」 → `user-favorite-feature` - 「カテゴリーフィルター追加」 → `category-filter-addition` - 「タスク一括削除機能」(既存あり) → `task-bulk-delete-2` 2. `.agent\demand_definition\sessions\<feature-slug>\` ディレクトリを作成 3. 新規セッションファイル `session.json` を作成 4. **ディスカッション議事録** `discussion_log.md` を作成 5. Step 1 から開始 ## ディスカッション議事録(CRITICAL) 各ステップでユーザーとの対話を行うたびに、セッションディレクトリの `discussion_log.md` に対話内容を**必ず追記**する。 **詳細**: `.agent\demand_definition\references\discussion_log_format.md` を参照 **ディレクトリ構造**:
.agent\demand_definition\sessions
└── <feature-slug>
├── session.json # セッション進捗管理
├── discussion_log.md # ディスカッション議事録(全会話を記録)
├── 1_purpose.md # Step 1の詳細データ
├── 2_alternatives.md # Step 2の詳細データ
├── 3_scope.md # Step 3の詳細データ
├── 4_requirements.md # Step 4の詳細データ
└── 5_ui_prompt.md # Step 5の詳細データ
### 初期JSONテンプレート
```json
{
"sessionId": "<feature-slug>",
"feature": "<機能名>",
"status": "in_progress",
"currentStep": 1,
"createdAt": "<ISO8601>",
"updatedAt": "<ISO8601>",
"steps": {
"1_purpose": false,
"2_alternatives": false,
"3_scope": false,
"4_requirements": false,
"5_ui_prompt": false
}
}
注: 各ステップは完了時にtrueに設定されます。詳細なデータは別途Markdownファイルとして保存されます。
各ステップの詳細
各ステップの詳細な質問テンプレート、出力フォーマット、完了条件については、.agent\demand_definition\references\ディレクトリ内の対応ファイルを参照してください。
Step 1: 課題・目的の深掘り
目的: 機能の本質的な価値を明確化
完了条件: ユーザーが課題と目的を明確に言語化できた
詳細: .agent\demand_definition\references\step1_purpose.mdを参照
出力先: セッションディレクトリ内の1_purpose.md
IMPORTANT - ステップ開始前のコード調査: 質問を開始する前に、必ず以下を実行:
- •ユーザーが言及した画面・機能・コンポーネントをコードから特定
- •現状の実装、UI構成、データ構造を把握
- •E2Eテストやテストプランがあれば確認
- •把握した情報を前提に、本当に必要な質問のみを行う
Step 2: 代替案・既存機能の検討
目的: 新規開発の必要性を検証
完了条件: 代替案を3つ以上提示し、推奨案を選定
詳細: .agent\demand_definition\references\step2_alternatives.mdを参照
出力先: セッションディレクトリ内の2_alternatives.md
IMPORTANT - 自動コードベース調査: Step 2開始時、必ずユーザーに確認せず自動的に以下を実行すること:
- •Step 1で特定された機能・画面に関連するコードを調査
- •ユーザーが言及した画面名、コンポーネント名、機能名からファイルを特定
- •
mcp__serena__find_fileでファイルを検索 - •
mcp__serena__get_symbols_overviewでコンポーネント構造を把握 - •
mcp__serena__find_symbolで関連する関数やクラスを特定
- •既存の実装パターンを調査
- •類似機能が既に存在するか
mcp__serena__search_for_patternで検索 - •UIコンポーネント、API関数、状態管理の実装を確認
- •既存のトグル機能、表示\非表示機能、レイアウト変更機能を探す
- •現状の仕様を把握
- •コードから現在の動作、データ構造、UI構成を理解
- •制約条件(スクロール設定、カラム定義、状態管理など)を特定
- •E2Eテストやテストプランがあれば確認
- •調査結果を
2_alternatives.mdに含める
- •現状のコード実装の概要
- •既存の類似機能や再利用可能なコンポーネント
- •技術的な制約や考慮事項
使用するツール:
- •
mcp__serena__find_file- ファイル検索 - •
mcp__serena__get_symbols_overview- コンポーネント構造把握 - •
mcp__serena__find_symbol- 関数\クラス検索 - •
mcp__serena__search_for_pattern- パターン検索 - •
Read- ファイル内容確認
Step 3: スコープ決定(MVP定義)
目的: 最小限の実装範囲を決定
完了条件: MVP・Nice to Have・Futureに分類完了
詳細: .agent\demand_definition\references\step3_scope.mdを参照
出力先: セッションディレクトリ内の3_scope.md
IMPORTANT - ステップ開始前のコード調査: スコープ定義前に、必ず以下を実行:
- •既存実装の複雑度を確認(シンプルな変更か、大規模な改修か)
- •依存する機能やコンポーネントを特定
- •技術的な制約や既存パターンを把握
- •実装難易度を踏まえてMVP\Nice to Have\Futureを提案
Step 4: 要件定義ドキュメント生成
目的: ユーザー視点での要件定義書を作成
完了条件: ユーザーストーリーと受け入れ条件を記載(プログラムの詳細は不要)
詳細: .agent\demand_definition\references\step4_requirements.mdを参照
出力先: セッションディレクトリ内の4_requirements.md
Note: API仕様やデータベーススキーマなどの技術的な詳細は記載せず、ユーザーの動きに焦点を当てる
IMPORTANT - ステップ開始前のコード調査: 要件定義前に、必ず以下を実行:
- •現状のユーザー操作フローを把握
- •既存のバリデーションルールや制約を確認
- •類似機能の要件や受け入れ条件を参考にする
- •現実的で実装可能な要件を定義
Step 5: UI設計プロンプト生成
目的: UI設計のためのプロンプトを生成
完了条件: 画面ごとのプロンプトを作成
詳細: .agent\demand_definition\references\step5_ui_prompt.mdを参照
出力先: セッションディレクトリ内の5_ui_prompt.md
IMPORTANT - ステップ開始前のコード調査: UI設計プロンプト生成前に、必ず以下を実行:
- •既存のUIコンポーネント(ボタン、モーダル、フォームなど)を確認
- •デザインシステム、カラーパレット、スタイルガイドを把握
- •再利用可能なコンポーネントを特定
- •既存のUIパターンに沿ったプロンプトを生成
セッション管理コマンド
ユーザーが以下のように言った場合の対応:
| 発言 | アクション |
|---|---|
| 「壁打ち開始:〇〇機能」 | 新規セッション作成(機能名からslugを生成)、Step 1開始 |
| 「次のステップ」「進めて」 | 現在のステップを完了し次へ |
| 「戻って」「前のステップ」 | 前のステップに戻る |
| 「今どこ?」「進捗は?」 | 現在のステップと完了状況を表示 |
| 「一覧」「セッション一覧」 | 過去のセッション一覧を表示(機能名とセッションID) |
| 「再開:〇〇」 | 指定セッション(機能名またはセッションID)を再開 |
Note: セッションIDは機能名から生成されたkebab-caseスラッグ(例: progress-layout-improvement) |
進行時の表示フォーマット
各ステップ開始時:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📋 壁打ちセッション: <機能名> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 現在: Step <N>\5 - <ステップ名> 進捗: [██████░░░░] 60% [質問や確認事項]
ステップ完了時:
✅ Step <N> 完了: <ステップ名> → <簡潔なサマリー> 次へ進みますか?(「次へ」で続行)
壁打ちの心得
やってはいけないこと
- •すぐに解決策を提示する
- •❌「〇〇機能を作りましょう」
- •✅「その機能で解決したい課題は何ですか?」
- •ユーザーの言葉をそのまま受け取る
- •ユーザーは解決策で語りがち
- •本当の課題を掘り下げる
- •ステップをスキップする
- •
「時間がないから」は理由にならない
- •
後工程で手戻りが発生する
良い壁打ちの進め方
- •
傾聴する - まずユーザーの話を聞く
- •
深掘りする - 「なぜ?」を繰り返す
- •
整理する - 情報を構造化して返す
- •
確認する - 理解が合っているか確認
- •
提案する - 選択肢を複数提示
ステップ進行時のJSON更新
各ステップを完了するたびに、session.jsonを以下のように更新:
- •
該当ステップのフラグを
false→trueに変更 - •
currentStepを次のステップ番号に更新 - •
updatedAtをISO8601形式で更新 更新例(Step 1完了時):
{
"currentStep": 2,
"steps": {
"1_purpose": true,
"2_alternatives": false,
...
},
"updatedAt": "2025-01-15T10:30:00Z"
}
注: 各ステップの詳細データは<stepNumber>_<stepName>.mdとして保存されます。
セッション完了条件
全ステップが true の場合:
{
"status": "completed",
"completedAt": "<ISO8601>",
"steps": {
"1_purpose": true,
"2_alternatives": true,
"3_scope": true,
"4_requirements": true,
"5_ui_prompt": true
}
}
生成物(全て.agent\demand_definition\sessions\<feature-slug>\配下):
- •
session.json- セッション進捗管理 - •
discussion_log.md- ディスカッション議事録(全会話の記録) - •
1_purpose.md- 課題・目的の深掘り結果 - •
2_alternatives.md- 代替案検討結果 - •
3_scope.md- スコープ定義結果 - •
4_requirements.md- 要件定義書(ユーザー視点、プログラム詳細なし) - •
5_ui_prompt.md- UI設計プロンプト
使用例
ユーザー: 「壁打ち開始:ユーザーのお気に入り機能」 agent:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📋 壁打ちセッション: ユーザーのお気に入り機能 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 現在: Step 1\5 - 課題・目的の深掘り 進捗: [██░░░░░░░░] 20% この機能で解決したい課題は何ですか? 誰のための機能でしょうか?
ユーザー: 「リピートユーザーが過去の相談を見返せるようにしたい」 agent:
なるほど。もう少し詳しく教えてください: - その課題は、どのくらいの頻度で発生していますか? - 今はその課題をどうやって回避していますか? - この機能がないと、具体的にどんな不便がありますか?
(以下、対話を続けてStep 1を完了し、Step 2へ進む...)
.agent\demand_definition\references\discussion_log_format.md
ディスカッション議事録フォーマット
記録のルール(CRITICAL)
絶対に守るべきルール:
- •既存の内容は絶対に編集・削除しない - 履歴を保持するため
- •必ず下から追記する - 時系列順に記録
- •変更があった場合は変更履歴として記録 - 初期決定と変更後の両方を残す
- •ファイル全体を書き換えない - Edit toolで追記のみ行う
記録フォーマット
各ステップでユーザーとの対話を行うたびに、discussion_log.mdに以下の形式で必ず追記する:
## [ステップ名] - YYYY-MM-DD HH:MM ### ユーザー発言 > [ユーザーの発言内容] ### Claude提案\質問 [Claudeの提案や質問内容] ### 決定事項 - [決まったこと] - [却下されたこと] ### 理由\背景 [なぜその決定をしたのか] ---
記録タイミング
- •ユーザーからの回答を受け取った時
- •重要な提案をした時
- •意思決定が行われた時
- •ステップを完了した時
記録内容
- •ユーザーの発言(そのまま引用)
- •Claudeの提案や質問
- •決定事項(採用\却下)
- •決定の理由や背景
- •コードベース調査の結果(重要な発見)
記録例
## Step 2: 代替案・既存機能の検討 - 2025-01-15 10:30 ### ユーザー発言 > カラムの順番は変えたくなくて...かつ、未着手に関しても、通常時は非表示にしておきたいかも ### Claude提案 4つの代替案を提示: 1. カラム順序変更 + 完了カラム非表示 2. 進行中カラムの幅を広げる 3. 完了カラムをアコーディオン式に折りたたむ 4. 完了カラムをサイドバー化 ### 決定事項 - ❌ カラムの順序変更は却下 - ✅ 未着手も通常時は非表示にする - ✅ 進行中カラムのみ表示 + トグルで未着手・完了を表示 ### 理由\背景 - カラムの順序は既存のユーザー体験を維持したい - 未着手も頻繁に見るわけではないので非表示にできる - スクロール問題を完全に解決するため、1カラム表示が最適 ---
変更履歴の記録方法
初期決定を変更する場合:
- •既存の決定事項は絶対に削除・編集しない
- •ファイルの末尾に「[Step X修正]」セクションを追加
- •何が変更されたか、なぜ変更されたかを明記
変更履歴のフォーマット:
## [Step X修正] 変更内容の簡潔な説明 - YYYY-MM-DD HH:MM ### ユーザー発言 > [変更を促した発言] ### 変更内容 - ❌ 却下: [初期決定の内容] - ✅ 採用: [新しい決定の内容] ### 理由\背景 [なぜ変更したのか] ### 影響を受けるステップ - Step X: [初期決定のセクション名] ---
変更履歴の記録例
## Step 3: スコープ決定(MVP定義) - 2025-12-24 08:00 ### 決定事項 - ✅ **スマホ**: タブ切り替え方式(デフォルト: 未着手 | 進行中) - ✅ **スワイプ対応**(左右スワイプでタブ移動) ### 理由\背景 - スクロールがしんどいので、タブで1画面に1カラムのみ表示 - スワイプで直感的に切り替えられるとモバイルフレンドリー --- ## [Step 3修正] スマホUIパターンの変更 - 2025-12-24 08:20 ### ユーザー発言 > こっちさ、Drawerじゃダメかな?(モバイル対応のセクションを見て) ### Claude質問 スマホでもドロワー方式を採用するということですね?デメリットを整理しました。 ### ユーザー回答 > タブ切り替えだと、Dragした時の挙動操作が若干めんどくさそうだなと思った ### 変更内容 - ❌ 却下: スマホのタブ切り替え方式 - ❌ 却下: スワイプ対応 - ✅ 採用: スマホもドロワー方式に統一 - ✅ 採用: ドロワー幅はレスポンシブ対応(PC: 300px、スマホ: 80-85%) ### 理由\背景 - ドラッグ&ドロップの操作性を重視 - タブ切り替えだと、タブをまたいだドラッグが複雑になる - PC\スマホで統一されたUX体験を提供 ### 影響を受けるステップ - Step 3: スコープ定義の「スマホ」セクション - Step 4: 要件定義の US-5, US-6 ---
.agent\demand_definition\references\step1_purpose.md
Step 1: 課題・目的の深掘り
目的: 機能の本質的な価値を明確化
必ず確認する質問
- •この機能で解決したい課題は何?
- •誰のための機能?(ペルソナ)
- •なぜ今それが必要?
- •それがないと何が困る?
- •成功の定義は?
完了条件
ユーザーが課題と目的を明確に言語化できた
質問テンプレート
「〇〇機能」について壁打ちを始めましょう。 まず教えてください: この機能を作ろうと思ったきっかけは何ですか?
深掘り質問
- •「その課題は、どのくらいの頻度で発生していますか?」
- •「その課題が解決されると、誰がどう嬉しいですか?」
- •「今はその課題をどうやって回避していますか?」
- •「この機能がなくても、他の方法で解決できませんか?」
完了確認フォーマット
整理させてください: 課題: 〇〇 対象ユーザー: △△ 解決後の状態: □□ この理解で合っていますか?
出力先
セッションディレクトリ内の1_purpose.mdに以下の内容を保存:
- •解決したい課題
- •対象ユーザー(ペルソナ)
- •なぜ今必要か
- •それがないと何が困るか
- •成功の定義
.agent\demand_definition\references\step2_alternatives.md
Step 2: 代替案・既存機能の検討
目的: 新規開発の必要性を検証
確認事項
- •既存機能で代替できない?
- •もっとシンプルな解決策はない?
- •他サービスではどう解決してる?
- •本当に新規開発が必要?
アクション
- •既存コードベースを検索して類似機能を探す(
Glob,Grepツール使用) - •代替案を3つ以上提示
コードベース検索のトリガー
既存のコードベースを確認させてください。 類似の機能や再利用できそうな部分があるか調べます。
代替案提示フォーマット
IMPORTANT: 各代替案には必ずUIイメージ図を添付すること
代替案を3つ考えました: 1. [案A]: [概要] 工数: [小\中\大] 価値: [低\中\高] メリット: ... デメリット: ... **UIイメージ**: [ASCII artまたはMarkdownで視覚的に表現] 2. [案B]: ... **UIイメージ**: [...] 3. [案C]: ... **UIイメージ**: [...] どれが最も適切だと思いますか?
UIイメージ図の作成ガイドライン
目的: ユーザーが各案を視覚的に理解できるようにする
作成方法:
- •ASCII art \ Markdownテーブル - シンプルなレイアウトの場合
- •詳細な説明 + 配置図 - 複雑なUIパターンの場合
図に含めるべき要素:
- •主要なコンポーネントの配置
- •ユーザーインタラクション(クリック、スワイプなど)
- •状態の変化(開閉、表示\非表示など)
- •レスポンシブ対応(PC\スマホの違い)
UIイメージ例:
### 案A: カラム順序変更 **PC\タブレット**: ┌────────────────────────────────────────┐ │ ┌──────┐ ┌──────┐ ┌──────┐ │ │ │進行中│ │未着手│ │完了 │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └──────┘ └──────┘ └──────┘ │ └────────────────────────────────────────┘ **スマホ**: ┌──────────┐ │ 進行中 │ │ │ ├──────────┤ │ 未着手 │ │ │ ├──────────┤ │ 完了 │ │ │ └──────────┘
### 案B: ドロワー式(推奨) **PC\タブレット**: ┌─┬──────────────────────────────────┐ │○│ ┌──────────────────────┐ │ │ │ │ 進行中(全幅表示) │ │ │未│ │ │ │ │着│ │ │ │ │手│ │ │ │ │ │ └──────────────────────┘ │ └─┴──────────────────────────────────┘ ↑ クリックでドロワー開く ドロワー展開時: ┌────────┬─────────────────────────┐ │未着手 │ 進行中(全幅表示) │ │ │ │ │タスク1 │ │ │タスク2 │ │ │ │ │ │ [×] │ │ └────────┴─────────────────────────┘ ↑ 背景クリックで閉じる
出力先
セッションディレクトリ内の2_alternatives.mdに以下の内容を保存:
- •既存機能の調査結果
- •代替案3つ以上(工数・価値・メリット・デメリット)
- •推奨案とその理由
.agent\demand_definition\references\step3_scope.md
Step 3: スコープ決定(MVP定義)
目的: 最小限の実装範囲を決定
確認事項
- •MVP(絶対必要)な機能は?
- •Nice to Have(あったら嬉しい)は?
- •将来拡張として残すものは?
- •制約条件は?(期間、技術、リソース)
MVP質問
この機能をリリースする最小限の形を考えましょう。 もし1週間しかなかったら、何を削りますか? 逆に、絶対に外せない機能は何ですか?
優先度マトリクス
機能を整理しました: 🔴 MVP(絶対必要) - ... - ... 🟡 Nice to Have(あったら嬉しい) - ... - ... 🟢 Future(将来拡張) - ... - ... この分類で進めていいですか?
制約条件の確認
- •期限:いつまでにリリースしたい?
- •体制:開発リソースは?
- •技術:既存の技術スタックを維持?
- •予算:コスト制約は?
出力先
セッションディレクトリ内の3_scope.mdに以下の内容を保存:
- •MVPに含める機能リスト
- •Nice to Haveの機能リスト
- •Futureに回す機能リスト
- •制約条件(期限、体制、技術、予算など)
.agent\demand_definition\references\step4_requirements.md
Step 4: 要件定義ドキュメント生成
目的: ユーザー視点での要件定義書を作成
重要: このステップではプログラムの詳細(API仕様、データベーススキーマ、技術実装など)は記載しません。ユーザーの動きと体験に焦点を当てます。
出力内容
- •機能概要
- •ユーザーストーリー(As a \ I want \ So that)
- •受け入れ条件(Given \ When \ Then)
- •非機能要件(ユーザー体験に関わる部分のみ)
ユーザーストーリー形式
As a [ユーザー種別] I want [達成したいこと] So that [得られる価値]
例:
As a リピートユーザー I want 過去の相談履歴を見返せるようにしたい So that 同じ相談を繰り返さずに済む
受け入れ条件形式
Given [前提条件] When [アクション] Then [期待される結果]
例:
Given ユーザーがログインしている When お気に入りボタンをクリックする Then その相談がお気に入り一覧に追加される
非機能要件
ユーザー体験に関わる部分のみ記載:
- •応答性: レスポンス時間の目安(ユーザーが感じる速さ)
- •使いやすさ: キーボード操作、モバイル対応など
- •アクセシビリティ: スクリーンリーダー対応、色覚対応など
- •エラー時の挙動: ユーザーへのフィードバック方法
記載しない技術的詳細:
- •❌ API エンドポイント仕様
- •❌ データベーススキーマ
- •❌ 具体的な技術スタック
- •❌ セキュリティ実装の詳細(SQLインジェクション対策など)
- •❌ 実装の優先順位やフェーズ分け
ドキュメント構成
# [機能名] 要件定義書 ## 1. 機能概要 [1段落で機能の目的と価値を説明] ## 2. ユーザーストーリー - As a ... I want ... So that ... - ... ## 3. 受け入れ条件 ### [ユーザーストーリー1] - Given ... When ... Then ... - ... ## 4. 非機能要件 ### 応答性 - ユーザーが操作してから結果が表示されるまでの体感速度 ### 使いやすさ - キーボード操作の対応 - モバイルでの使いやすさ ### アクセシビリティ - スクリーンリーダー対応 - 色覚サポート ### エラー時の挙動 - ユーザーへのフィードバック方法
良い例と悪い例
✅ 良い例(ユーザー視点)
### US-1: タスクタイトルでの検索 As a タスクを50件以上管理しているヘビーユーザー I want タスクのタイトルをキーワードで検索したい So that スクロールせずに目的のタスクを素早く見つけられる **AC-1.1: 部分一致検索が動作する** Given ユーザーがタスクボードを開いている When 検索バーに「会議」と入力する Then タイトルに「会議」を含むすべてのタスクが表示される ### 非機能要件 #### 応答性 - 検索キーワードを入力してから0.5秒以内に結果が表示される - 入力中も結果がリアルタイムに更新される #### 使いやすさ - 検索バーはTabキーでフォーカス可能 - Escapeキーで検索をクリアできる - モバイルでも検索バーが使いやすいサイズ
❌ 悪い例(技術詳細を含む)
以下のような技術的な詳細は記載しない:
- •API仕様(エンドポイント、リクエスト\レスポンス形式)
- •データベーススキーマ(テーブル定義、インデックス)
- •セキュリティ実装の詳細(SQLインジェクション対策など)
- •実装の優先順位やフェーズ分け
- •具体的な技術スタック(ライブラリ名、フレームワーク名)
出力先
セッションディレクトリ内の4_requirements.mdに上記フォーマットで保存
確認ポイント
作成した要件定義書が以下の条件を満たしているか確認:
- • ユーザーの動きと体験に焦点を当てている
- • API仕様やデータベーススキーマなどの技術詳細を含んでいない
- • ユーザーストーリーが具体的で実装可能
- • 受け入れ条件がテスト可能
- • 非機能要件がユーザー体験に関わる部分のみ
技術詳細はcc-sddに任せる
実装の詳細(API設計、データベース設計、依存関係分析など)は、このスキルの範囲外です。これらはcc-sdd(Claude Code Spec-Driven Development)のワークフローで扱います。
.agent\demand_definition\references\step5_ui_prompt.md
Step 5: UI設計プロンプト生成
目的: UI設計のためのプロンプトとイメージ図を生成
出力内容
各画面・コンポーネントについて以下を作成:
- •UI設計プロンプト - 実装者向けの詳細な仕様
- •レイアウト図 - テキストベースの視覚的な配置図
- •ビジュアルイメージ - (オプション)画像生成ツールでモックアップを作成
出力フォーマット
## 画面: [画面名] ### 目的 [この画面で達成したいこと] ### レイアウト図
┌─────────────────────────────────────────────────┐ │ [ヘッダー要素] [アイコン] │ ├─────────────────────────────────────────────────┤ │ │ │ ┌───────────────────────────────────────┐ │ │ │ [コンポーネント1] │ │ │ │ - 要素A │ │ │ │ - 要素B │ │ │ └───────────────────────────────────────┘ │ │ │ │ ┌───────────────────────────────────────┐ │ │ │ [コンポーネント2] │ │ │ └───────────────────────────────────────┘ │ │ │ │ [フッター要素] [ボタン] │ └─────────────────────────────────────────────────┘
### 主要コンポーネント - [コンポーネント1]: [説明] - [コンポーネント2]: [説明] ### ユーザーフロー 1. [ステップ1] 2. [ステップ2] ### デザイントーン - スタイル: [既存UIとの一貫性についての指示] - カラー: [使用する色について] - 参考: [既存の類似画面があれば] ### 実装プロンプト [frontend-design Skillや実装者に渡すための詳細なプロンプト]
レイアウト図の作成ガイドライン
目的: 実装前に画面構成を視覚的に共有
基本的な記号
┌─┬─┐ 上辺・角 │ │ │ 縦線・区切り ├─┼─┤ 中間の区切り └─┴─┘ 下辺・角 [要素] コンポーネントやUI要素 [🔍] アイコン(絵文字で表現) ━━━━━ 強調する区切り線
レイアウト図の例
モーダルダイアログ
┌─────────────────────────────────────┐ │ タスク作成 [×] │ ├─────────────────────────────────────┤ │ │ │ タスク名 │ │ ┌─────────────────────────────┐ │ │ │ [入力欄] │ │ │ └─────────────────────────────┘ │ │ │ │ 優先度 │ │ ○ 今やる ○ 後でやる ○ いつかやる │ │ │ │ カテゴリー │ │ [▼ 選択してください] │ │ │ ├─────────────────────────────────────┤ │ [キャンセル] [作成] │ └─────────────────────────────────────┘
リスト画面
┌─────────────────────────────────────────────────┐ │ [🔍] 検索... [+] │ ├─────────────────────────────────────────────────┤ │ │ │ ┌───────────────────────────────────────┐ │ │ │ ☐ タスクタイトル1 [仕事] │ [⋮] │ │ │ 説明文... 2024\01\15 │ │ │ └───────────────────────────────────────┘ │ │ │ │ ┌───────────────────────────────────────┐ │ │ │ ☑ タスクタイトル2 [個人] │ [⋮] │ │ │ 説明文... 2024\01\14 │ │ │ └───────────────────────────────────────┘ │ │ │ │ ┌───────────────────────────────────────┐ │ │ │ ☐ タスクタイトル3 [趣味] │ [⋮] │ │ │ 説明文... 2024\01\13 │ │ │ └───────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────┘
3カラムレイアウト
┌────────────┬────────────┬────────────────────┐ │ 今やる │ 後でやる │ いつかやる │ ├────────────┼────────────┼────────────────────┤ │ ┌────────┐ │ ┌────────┐ │ ┌────────┐ │ │ │ Task 1 │ │ │ Task 3 │ │ │ Task 5 │ │ │ └────────┘ │ └────────┘ │ └────────┘ │ │ │ │ │ │ ┌────────┐ │ ┌────────┐ │ ┌────────┐ │ │ │ Task 2 │ │ │ Task 4 │ │ │ Task 6 │ │ │ └────────┘ │ └────────┘ │ └────────┘ │ │ │ │ │ └────────────┴────────────┴────────────────────┘
ビジュアルイメージの生成(オプション)
画像生成ツールを使って、より詳細なモックアップを作成できます。
生成方法
svg-logo-designerスキルを使用(シンプルなUIコンポーネント向け)
\svg-logo-designer を使って以下のUIコンポーネントを作成: - ボタンデザイン - アイコンセット - ロゴやバッジ
image-generateツールを使用(画面全体のモックアップ向け)
mcp__image-generate__generate_image を使って: - 画面全体のモックアップ - 複雑なレイアウトのビジュアライゼーション
プロンプト例
Create a modern task management app interface with: - Clean, minimalist design - Three-column layout (Today, Later, Someday) - Each column contains task cards with checkboxes - Top navigation bar with search and add button - Soft shadows and rounded corners - Color scheme: white background, blue accents (#3B82F6) - Mobile-friendly responsive design
日本語プロンプト例
タスク管理アプリのメイン画面を作成してください: - シンプルでモダンなデザイン - 3カラムレイアウト(今やる・後でやる・いつかやる) - 各カラムにはチェックボックス付きのタスクカード - 上部に検索バーと追加ボタン - 柔らかい影と角丸 - 配色:白背景、青のアクセント(#3B82F6) - モバイル対応のレスポンシブデザイン
良いプロンプトの構成要素
- •画面の目的(1文で)
- •「何のための画面か」を明確に
- •レイアウト図(テキストベース)
- •コンポーネントの配置を視覚化
- •ユーザーが一目で構造を理解できる
- •主要コンポーネント(箇条書き)
- •ヘッダー、フォーム、ボタン、リストなど
- •各コンポーネントの役割を簡潔に
- •ユーザーフロー(ステップ形式)
- •ユーザーがどのように操作するか
- •画面遷移の流れ
- •デザイントーン(既存との一貫性)
- •既存のデザインシステムとの整合性
- •カラーパレット、フォント、余白など
- •実装プロンプト(詳細仕様)
- •frontend-design Skillや実装者に渡す用
- •具体的な要件とデザイン指示
- •ビジュアルイメージ(オプション)
- •画像生成ツールで作成したモックアップ
- •より具体的なイメージ共有
完全なプロンプト例
## 画面: お気に入り一覧画面 ### 目的 ユーザーが保存した相談履歴を一覧で確認し、詳細を見返せるようにする ### レイアウト図
┌─────────────────────────────────────────────────┐ │ お気に入り一覧 [← 戻る] │ ├─────────────────────────────────────────────────┤ │ │ │ ┌───────────────────────────────────────┐ │ │ │ [画像] タイトル1 2024\01\15 │ [★] │ │ │ 相談内容の抜粋... │ │ │ └───────────────────────────────────────┘ │ │ │ │ ┌───────────────────────────────────────┐ │ │ │ [画像] タイトル2 2024\01\14 │ [★] │ │ │ 相談内容の抜粋... │ │ │ └───────────────────────────────────────┘ │ │ │ │ ┌───────────────────────────────────────┐ │ │ │ [画像] タイトル3 2024\01\13 │ [★] │ │ │ 相談内容の抜粋... │ │ │ └───────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────┘
(空状態) ┌─────────────────────────────────────────────────┐ │ お気に入り一覧 [← 戻る] │ ├─────────────────────────────────────────────────┤ │ │ │ [★ アイコン] │ │ │ │ お気に入りがありません │ │ 相談をお気に入りに追加してみましょう │ │ │ └─────────────────────────────────────────────────┘
### 主要コンポーネント - **ヘッダー**: 「お気に入り一覧」タイトル + 戻るボタン - **お気に入りカード**: サムネイル、タイトル、日付、お気に入り解除ボタン(★) - **空状態**: お気に入りがない場合の案内メッセージとアイコン ### ユーザーフロー 1. 画面を開く → お気に入り一覧が表示される 2. カードをタップ → 相談詳細画面へ遷移 3. ★ボタンをタップ → お気に入り解除の確認ダイアログ表示 4. 確認 → お気に入りから削除され、リストから消える 5. お気に入りが0件の場合 → 空状態の案内を表示 ### デザイントーン - **スタイル**: 既存のチャット履歴画面と統一 - **カラー**: - プライマリ: #3B82F6(青) - 背景: #FFFFFF(白) - テキスト: #1F2937(濃いグレー) - サブテキスト: #6B7280(グレー) - **角丸**: 12px(カード) - **シャドウ**: subtle(0 2px 4px rgba(0,0,0,0.1)) - **参考**: チャット履歴画面と同じカードデザイン ### 実装プロンプト お気に入り一覧画面のUIコンポーネントを作成してください。 **画面構成**: 1. ヘッダー - 左: 戻るボタン(<アイコン) - 中央: 「お気に入り一覧」タイトル 2. お気に入りカード(リスト形式) - 左: サムネイル画像(正方形、60x60px) - 中央上: タイトル(太字、14px) - 中央下: 相談内容の抜粋(2行まで、12px、グレー) - 右上: 日付(12px、グレー) - 右: お気に入り解除ボタン(★アイコン、黄色) 3. 空状態 - 中央: 星アイコン(大きめ、グレー) - メッセージ: 「お気に入りがありません」 - サブメッセージ: 「相談をお気に入りに追加してみましょう」 **インタラクション**: - カードタップ → 詳細画面へ遷移 - ★ボタンタップ → 確認ダイアログ → 削除 - 削除時はフェードアウトアニメーション **レスポンシブ**: - モバイル: カードを縦に並べる - タブレット以上: 2カラムのグリッド表示も検討 **アクセシビリティ**: - カードにaria-label追加(「タイトル、日付、お気に入り解除ボタン」) - キーボード操作対応
ビジュアルイメージ
(オプション)画像生成ツールで以下のようなモックアップを作成:
- •お気に入り一覧画面のフル画面デザイン
- •カードのホバー状態
- •空状態のデザイン
## 画面ごとにプロンプトを作成 複数の画面が必要な場合は、それぞれの画面について上記フォーマットでプロンプトを作成します。 例: - 画面1: タスク一覧画面 - 画面2: タスク作成モーダル - 画面3: タスク詳細画面 - 画面4: カテゴリー設定画面 ## 出力先 セッションディレクトリ内の`5_ui_prompt.md`に上記フォーマットで保存 ## 完了条件 - [ ] 全画面のレイアウト図を作成 - [ ] 主要コンポーネントを明記 - [ ] ユーザーフローを記載 - [ ] 実装プロンプトを作成 - [ ] (オプション)ビジュアルイメージを生成