AgentSkillsCN

Archive

归档

SKILL.md

SKILL. md

code
---
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設計プロンプト生成

code

**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の詳細データ

code

### 初期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 - ステップ開始前のコード調査: 質問を開始する前に、必ず以下を実行:

  1. ユーザーが言及した画面・機能・コンポーネントをコードから特定
  2. 現状の実装、UI構成、データ構造を把握
  3. E2Eテストやテストプランがあれば確認
  4. 把握した情報を前提に、本当に必要な質問のみを行う

Step 2: 代替案・既存機能の検討

目的: 新規開発の必要性を検証

完了条件: 代替案を3つ以上提示し、推奨案を選定

詳細: .agent\demand_definition\references\step2_alternatives.mdを参照

出力先: セッションディレクトリ内の2_alternatives.md

IMPORTANT - 自動コードベース調査: Step 2開始時、必ずユーザーに確認せず自動的に以下を実行すること:

  1. Step 1で特定された機能・画面に関連するコードを調査
  • ユーザーが言及した画面名、コンポーネント名、機能名からファイルを特定
  • mcp__serena__find_fileでファイルを検索
  • mcp__serena__get_symbols_overviewでコンポーネント構造を把握
  • mcp__serena__find_symbolで関連する関数やクラスを特定
  1. 既存の実装パターンを調査
  • 類似機能が既に存在するかmcp__serena__search_for_patternで検索
  • UIコンポーネント、API関数、状態管理の実装を確認
  • 既存のトグル機能、表示\非表示機能、レイアウト変更機能を探す
  1. 現状の仕様を把握
  • コードから現在の動作、データ構造、UI構成を理解
  • 制約条件(スクロール設定、カラム定義、状態管理など)を特定
  • E2Eテストやテストプランがあれば確認
  1. 調査結果を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 - ステップ開始前のコード調査: スコープ定義前に、必ず以下を実行:

  1. 既存実装の複雑度を確認(シンプルな変更か、大規模な改修か)
  2. 依存する機能やコンポーネントを特定
  3. 技術的な制約や既存パターンを把握
  4. 実装難易度を踏まえてMVP\Nice to Have\Futureを提案

Step 4: 要件定義ドキュメント生成

目的: ユーザー視点での要件定義書を作成

完了条件: ユーザーストーリーと受け入れ条件を記載(プログラムの詳細は不要)

詳細: .agent\demand_definition\references\step4_requirements.mdを参照

出力先: セッションディレクトリ内の4_requirements.md

Note: API仕様やデータベーススキーマなどの技術的な詳細は記載せず、ユーザーの動きに焦点を当てる

IMPORTANT - ステップ開始前のコード調査: 要件定義前に、必ず以下を実行:

  1. 現状のユーザー操作フローを把握
  2. 既存のバリデーションルールや制約を確認
  3. 類似機能の要件や受け入れ条件を参考にする
  4. 現実的で実装可能な要件を定義

Step 5: UI設計プロンプト生成

目的: UI設計のためのプロンプトを生成

完了条件: 画面ごとのプロンプトを作成

詳細: .agent\demand_definition\references\step5_ui_prompt.mdを参照

出力先: セッションディレクトリ内の5_ui_prompt.md

IMPORTANT - ステップ開始前のコード調査: UI設計プロンプト生成前に、必ず以下を実行:

  1. 既存のUIコンポーネント(ボタン、モーダル、フォームなど)を確認
  2. デザインシステム、カラーパレット、スタイルガイドを把握
  3. 再利用可能なコンポーネントを特定
  4. 既存のUIパターンに沿ったプロンプトを生成

セッション管理コマンド

ユーザーが以下のように言った場合の対応:

発言アクション
「壁打ち開始:〇〇機能」新規セッション作成(機能名からslugを生成)、Step 1開始
「次のステップ」「進めて」現在のステップを完了し次へ
「戻って」「前のステップ」前のステップに戻る
「今どこ?」「進捗は?」現在のステップと完了状況を表示
「一覧」「セッション一覧」過去のセッション一覧を表示(機能名とセッションID)
「再開:〇〇」指定セッション(機能名またはセッションID)を再開
Note: セッションIDは機能名から生成されたkebab-caseスラッグ(例: progress-layout-improvement

進行時の表示フォーマット

各ステップ開始時:

code
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📋 壁打ちセッション: <機能名>
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
現在: Step <N>\5 - <ステップ名>

進捗: [██████░░░░] 60%

[質問や確認事項]

ステップ完了時:

code
✅ Step <N> 完了: <ステップ名>
→ <簡潔なサマリー>
次へ進みますか?(「次へ」で続行)

壁打ちの心得

やってはいけないこと

  1. すぐに解決策を提示する
  • ❌「〇〇機能を作りましょう」
  • ✅「その機能で解決したい課題は何ですか?」
  1. ユーザーの言葉をそのまま受け取る
  • ユーザーは解決策で語りがち
  • 本当の課題を掘り下げる
  1. ステップをスキップする
  • 「時間がないから」は理由にならない

  • 後工程で手戻りが発生する

良い壁打ちの進め方

  1. 傾聴する - まずユーザーの話を聞く

  2. 深掘りする - 「なぜ?」を繰り返す

  3. 整理する - 情報を構造化して返す

  4. 確認する - 理解が合っているか確認

  5. 提案する - 選択肢を複数提示

ステップ進行時のJSON更新

各ステップを完了するたびに、session.jsonを以下のように更新:

  1. 該当ステップのフラグをfalsetrueに変更

  2. currentStepを次のステップ番号に更新

  3. updatedAtをISO8601形式で更新 更新例(Step 1完了時):

json
{

"currentStep": 2,

"steps": {

"1_purpose": true,
"2_alternatives": false,
...

},
"updatedAt": "2025-01-15T10:30:00Z"
}

: 各ステップの詳細データは<stepNumber>_<stepName>.mdとして保存されます。

セッション完了条件

全ステップが true の場合:

json
{
"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:

code
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📋 壁打ちセッション: ユーザーのお気に入り機能
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
現在: Step 1\5 - 課題・目的の深掘り

進捗: [██░░░░░░░░] 20%

この機能で解決したい課題は何ですか?

誰のための機能でしょうか?

ユーザー: 「リピートユーザーが過去の相談を見返せるようにしたい」 agent:

code
なるほど。もう少し詳しく教えてください:
- その課題は、どのくらいの頻度で発生していますか?

- 今はその課題をどうやって回避していますか?
- この機能がないと、具体的にどんな不便がありますか?

(以下、対話を続けてStep 1を完了し、Step 2へ進む...)

code
.agent\demand_definition\references\discussion_log_format.md

ディスカッション議事録フォーマット

記録のルール(CRITICAL)

絶対に守るべきルール:

  1. 既存の内容は絶対に編集・削除しない - 履歴を保持するため
  2. 必ず下から追記する - 時系列順に記録
  3. 変更があった場合は変更履歴として記録 - 初期決定と変更後の両方を残す
  4. ファイル全体を書き換えない - Edit toolで追記のみ行う

記録フォーマット

各ステップでユーザーとの対話を行うたびに、discussion_log.mdに以下の形式で必ず追記する:

markdown
## [ステップ名] - YYYY-MM-DD HH:MM

### ユーザー発言
> [ユーザーの発言内容]

### Claude提案\質問
[Claudeの提案や質問内容]

### 決定事項
- [決まったこと]
- [却下されたこと]

### 理由\背景
[なぜその決定をしたのか]

---

記録タイミング

  • ユーザーからの回答を受け取った時
  • 重要な提案をした時
  • 意思決定が行われた時
  • ステップを完了した時

記録内容

  • ユーザーの発言(そのまま引用)
  • Claudeの提案や質問
  • 決定事項(採用\却下)
  • 決定の理由や背景
  • コードベース調査の結果(重要な発見)

記録例

markdown
## Step 2: 代替案・既存機能の検討 - 2025-01-15 10:30

### ユーザー発言
> カラムの順番は変えたくなくて...かつ、未着手に関しても、通常時は非表示にしておきたいかも

### Claude提案
4つの代替案を提示:
1. カラム順序変更 + 完了カラム非表示
2. 進行中カラムの幅を広げる
3. 完了カラムをアコーディオン式に折りたたむ
4. 完了カラムをサイドバー化

### 決定事項
- ❌ カラムの順序変更は却下
- ✅ 未着手も通常時は非表示にする
- ✅ 進行中カラムのみ表示 + トグルで未着手・完了を表示

### 理由\背景
- カラムの順序は既存のユーザー体験を維持したい
- 未着手も頻繁に見るわけではないので非表示にできる
- スクロール問題を完全に解決するため、1カラム表示が最適

---

変更履歴の記録方法

初期決定を変更する場合:

  1. 既存の決定事項は絶対に削除・編集しない
  2. ファイルの末尾に「[Step X修正]」セクションを追加
  3. 何が変更されたか、なぜ変更されたかを明記

変更履歴のフォーマット:

markdown
## [Step X修正] 変更内容の簡潔な説明 - YYYY-MM-DD HH:MM

### ユーザー発言
> [変更を促した発言]

### 変更内容
- ❌ 却下: [初期決定の内容]
- ✅ 採用: [新しい決定の内容]

### 理由\背景
[なぜ変更したのか]

### 影響を受けるステップ
- Step X: [初期決定のセクション名]

---

変更履歴の記録例

markdown
## 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
---

code
.agent\demand_definition\references\step1_purpose.md

Step 1: 課題・目的の深掘り

目的: 機能の本質的な価値を明確化

必ず確認する質問

  • この機能で解決したい課題は何?
  • 誰のための機能?(ペルソナ)
  • なぜ今それが必要?
  • それがないと何が困る?
  • 成功の定義は?

完了条件

ユーザーが課題と目的を明確に言語化できた

質問テンプレート

code
「〇〇機能」について壁打ちを始めましょう。
まず教えてください:

この機能を作ろうと思ったきっかけは何ですか?

深掘り質問

  • 「その課題は、どのくらいの頻度で発生していますか?」
  • 「その課題が解決されると、誰がどう嬉しいですか?」
  • 「今はその課題をどうやって回避していますか?」
  • 「この機能がなくても、他の方法で解決できませんか?」

完了確認フォーマット

code
整理させてください:

課題: 〇〇
対象ユーザー: △△
解決後の状態: □□

この理解で合っていますか?

出力先

セッションディレクトリ内の1_purpose.mdに以下の内容を保存:

  • 解決したい課題
  • 対象ユーザー(ペルソナ)
  • なぜ今必要か
  • それがないと何が困るか
  • 成功の定義
code
.agent\demand_definition\references\step2_alternatives.md

Step 2: 代替案・既存機能の検討

目的: 新規開発の必要性を検証

確認事項

  • 既存機能で代替できない?
  • もっとシンプルな解決策はない?
  • 他サービスではどう解決してる?
  • 本当に新規開発が必要?

アクション

  1. 既存コードベースを検索して類似機能を探す(Glob, Grepツール使用)
  2. 代替案を3つ以上提示

コードベース検索のトリガー

code
既存のコードベースを確認させてください。
類似の機能や再利用できそうな部分があるか調べます。

代替案提示フォーマット

IMPORTANT: 各代替案には必ずUIイメージ図を添付すること

code
代替案を3つ考えました:

1. [案A]: [概要]
工数: [小\中\大]
価値: [低\中\高]
メリット: ...
デメリット: ...

**UIイメージ**:
[ASCII artまたはMarkdownで視覚的に表現]

2. [案B]: ...

**UIイメージ**:
[...]

3. [案C]: ...

**UIイメージ**:
[...]

どれが最も適切だと思いますか?

UIイメージ図の作成ガイドライン

目的: ユーザーが各案を視覚的に理解できるようにする

作成方法:

  1. ASCII art \ Markdownテーブル - シンプルなレイアウトの場合
  2. 詳細な説明 + 配置図 - 複雑なUIパターンの場合

図に含めるべき要素:

  • 主要なコンポーネントの配置
  • ユーザーインタラクション(クリック、スワイプなど)
  • 状態の変化(開閉、表示\非表示など)
  • レスポンシブ対応(PC\スマホの違い)

UIイメージ例:

markdown
### 案A: カラム順序変更

**PC\タブレット**:
┌────────────────────────────────────────┐
│  ┌──────┐  ┌──────┐  ┌──────┐        │
│  │進行中│  │未着手│  │完了  │        │
│  │      │  │      │  │      │        │
│  │      │  │      │  │      │        │
│  └──────┘  └──────┘  └──────┘        │
└────────────────────────────────────────┘

**スマホ**:
┌──────────┐
│ 進行中   │
│          │
├──────────┤
│ 未着手   │
│          │
├──────────┤
│ 完了     │
│          │
└──────────┘
markdown
### 案B: ドロワー式(推奨)

**PC\タブレット**:
┌─┬──────────────────────────────────┐
│○│  ┌──────────────────────┐        │
│ │  │ 進行中(全幅表示)    │        │
│未│  │                      │        │
│着│  │                      │        │
│手│  │                      │        │
│ │  └──────────────────────┘        │
└─┴──────────────────────────────────┘
↑ クリックでドロワー開く

ドロワー展開時:
┌────────┬─────────────────────────┐
│未着手  │  進行中(全幅表示)      │
│        │                         │
│タスク1 │                         │
│タスク2 │                         │
│        │                         │
│ [×]   │                         │
└────────┴─────────────────────────┘
↑ 背景クリックで閉じる

出力先

セッションディレクトリ内の2_alternatives.mdに以下の内容を保存:

  • 既存機能の調査結果
  • 代替案3つ以上(工数・価値・メリット・デメリット)
  • 推奨案とその理由
code
.agent\demand_definition\references\step3_scope.md

Step 3: スコープ決定(MVP定義)

目的: 最小限の実装範囲を決定

確認事項

  • MVP(絶対必要)な機能は?
  • Nice to Have(あったら嬉しい)は?
  • 将来拡張として残すものは?
  • 制約条件は?(期間、技術、リソース)

MVP質問

code
この機能をリリースする最小限の形を考えましょう。

もし1週間しかなかったら、何を削りますか?
逆に、絶対に外せない機能は何ですか?

優先度マトリクス

code
機能を整理しました:

🔴 MVP(絶対必要)
- ...
- ...

🟡 Nice to Have(あったら嬉しい)
- ...
- ...

🟢 Future(将来拡張)
- ...
- ...

この分類で進めていいですか?

制約条件の確認

  • 期限:いつまでにリリースしたい?
  • 体制:開発リソースは?
  • 技術:既存の技術スタックを維持?
  • 予算:コスト制約は?

出力先

セッションディレクトリ内の3_scope.mdに以下の内容を保存:

  • MVPに含める機能リスト
  • Nice to Haveの機能リスト
  • Futureに回す機能リスト
  • 制約条件(期限、体制、技術、予算など)
code
.agent\demand_definition\references\step4_requirements.md

Step 4: 要件定義ドキュメント生成

目的: ユーザー視点での要件定義書を作成

重要: このステップではプログラムの詳細(API仕様、データベーススキーマ、技術実装など)は記載しません。ユーザーの動きと体験に焦点を当てます。

出力内容

  1. 機能概要
  2. ユーザーストーリー(As a \ I want \ So that)
  3. 受け入れ条件(Given \ When \ Then)
  4. 非機能要件(ユーザー体験に関わる部分のみ)

ユーザーストーリー形式

code
As a [ユーザー種別]
I want [達成したいこと]
So that [得られる価値]

:

code
As a リピートユーザー
I want 過去の相談履歴を見返せるようにしたい
So that 同じ相談を繰り返さずに済む

受け入れ条件形式

code
Given [前提条件]
When [アクション]
Then [期待される結果]

:

code
Given ユーザーがログインしている
When お気に入りボタンをクリックする
Then その相談がお気に入り一覧に追加される

非機能要件

ユーザー体験に関わる部分のみ記載:

  • 応答性: レスポンス時間の目安(ユーザーが感じる速さ)
  • 使いやすさ: キーボード操作、モバイル対応など
  • アクセシビリティ: スクリーンリーダー対応、色覚対応など
  • エラー時の挙動: ユーザーへのフィードバック方法

記載しない技術的詳細:

  • ❌ API エンドポイント仕様
  • ❌ データベーススキーマ
  • ❌ 具体的な技術スタック
  • ❌ セキュリティ実装の詳細(SQLインジェクション対策など)
  • ❌ 実装の優先順位やフェーズ分け

ドキュメント構成

markdown
# [機能名] 要件定義書

## 1. 機能概要
[1段落で機能の目的と価値を説明]

## 2. ユーザーストーリー
- As a ... I want ... So that ...
- ...

## 3. 受け入れ条件
### [ユーザーストーリー1]
- Given ... When ... Then ...
- ...

## 4. 非機能要件
### 応答性
- ユーザーが操作してから結果が表示されるまでの体感速度

### 使いやすさ
- キーボード操作の対応
- モバイルでの使いやすさ

### アクセシビリティ
- スクリーンリーダー対応
- 色覚サポート

### エラー時の挙動
- ユーザーへのフィードバック方法

良い例と悪い例

✅ 良い例(ユーザー視点)

markdown
### 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)のワークフローで扱います。

code
.agent\demand_definition\references\step5_ui_prompt.md

Step 5: UI設計プロンプト生成

目的: UI設計のためのプロンプトとイメージ図を生成

出力内容

各画面・コンポーネントについて以下を作成:

  1. UI設計プロンプト - 実装者向けの詳細な仕様
  2. レイアウト図 - テキストベースの視覚的な配置図
  3. ビジュアルイメージ - (オプション)画像生成ツールでモックアップを作成

出力フォーマット

markdown
## 画面: [画面名]

### 目的
[この画面で達成したいこと]

### レイアウト図

┌─────────────────────────────────────────────────┐ │ [ヘッダー要素] [アイコン] │ ├─────────────────────────────────────────────────┤ │ │ │ ┌───────────────────────────────────────┐ │ │ │ [コンポーネント1] │ │ │ │ - 要素A │ │ │ │ - 要素B │ │ │ └───────────────────────────────────────┘ │ │ │ │ ┌───────────────────────────────────────┐ │ │ │ [コンポーネント2] │ │ │ └───────────────────────────────────────┘ │ │ │ │ [フッター要素] [ボタン] │ └─────────────────────────────────────────────────┘

code

### 主要コンポーネント
- [コンポーネント1]: [説明]
- [コンポーネント2]: [説明]

### ユーザーフロー
1. [ステップ1]
2. [ステップ2]

### デザイントーン
- スタイル: [既存UIとの一貫性についての指示]
- カラー: [使用する色について]
- 参考: [既存の類似画面があれば]

### 実装プロンプト
[frontend-design Skillや実装者に渡すための詳細なプロンプト]

レイアウト図の作成ガイドライン

目的: 実装前に画面構成を視覚的に共有

基本的な記号

code
┌─┬─┐  上辺・角
│ │ │  縦線・区切り
├─┼─┤  中間の区切り
└─┴─┘  下辺・角

[要素]   コンポーネントやUI要素
[🔍]     アイコン(絵文字で表現)
━━━━━   強調する区切り線

レイアウト図の例

モーダルダイアログ

code
┌─────────────────────────────────────┐
│  タスク作成                    [×]  │
├─────────────────────────────────────┤
│                                     │
│  タスク名                           │
│  ┌─────────────────────────────┐   │
│  │ [入力欄]                    │   │
│  └─────────────────────────────┘   │
│                                     │
│  優先度                             │
│  ○ 今やる  ○ 後でやる  ○ いつかやる │
│                                     │
│  カテゴリー                         │
│  [▼ 選択してください]               │
│                                     │
├─────────────────────────────────────┤
│              [キャンセル] [作成]    │
└─────────────────────────────────────┘

リスト画面

code
┌─────────────────────────────────────────────────┐
│  [🔍] 検索...                              [+]  │
├─────────────────────────────────────────────────┤
│                                                 │
│  ┌───────────────────────────────────────┐      │
│  │ ☐ タスクタイトル1          [仕事]     │ [⋮] │
│  │   説明文...                2024\01\15  │      │
│  └───────────────────────────────────────┘      │
│                                                 │
│  ┌───────────────────────────────────────┐      │
│  │ ☑ タスクタイトル2          [個人]     │ [⋮] │
│  │   説明文...                2024\01\14  │      │
│  └───────────────────────────────────────┘      │
│                                                 │
│  ┌───────────────────────────────────────┐      │
│  │ ☐ タスクタイトル3          [趣味]     │ [⋮] │
│  │   説明文...                2024\01\13  │      │
│  └───────────────────────────────────────┘      │
│                                                 │
└─────────────────────────────────────────────────┘

3カラムレイアウト

code
┌────────────┬────────────┬────────────────────┐
│  今やる     │  後でやる   │  いつかやる         │
├────────────┼────────────┼────────────────────┤
│ ┌────────┐ │ ┌────────┐ │ ┌────────┐         │
│ │ Task 1 │ │ │ Task 3 │ │ │ Task 5 │         │
│ └────────┘ │ └────────┘ │ └────────┘         │
│            │            │                    │
│ ┌────────┐ │ ┌────────┐ │ ┌────────┐         │
│ │ Task 2 │ │ │ Task 4 │ │ │ Task 6 │         │
│ └────────┘ │ └────────┘ │ └────────┘         │
│            │            │                    │
└────────────┴────────────┴────────────────────┘

ビジュアルイメージの生成(オプション)

画像生成ツールを使って、より詳細なモックアップを作成できます。

生成方法

svg-logo-designerスキルを使用(シンプルなUIコンポーネント向け)

code
\svg-logo-designer を使って以下のUIコンポーネントを作成:
- ボタンデザイン
- アイコンセット
- ロゴやバッジ

image-generateツールを使用(画面全体のモックアップ向け)

code
mcp__image-generate__generate_image を使って:
- 画面全体のモックアップ
- 複雑なレイアウトのビジュアライゼーション

プロンプト例

code
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

日本語プロンプト例

code
タスク管理アプリのメイン画面を作成してください:
- シンプルでモダンなデザイン
- 3カラムレイアウト(今やる・後でやる・いつかやる)
- 各カラムにはチェックボックス付きのタスクカード
- 上部に検索バーと追加ボタン
- 柔らかい影と角丸
- 配色:白背景、青のアクセント(#3B82F6)
- モバイル対応のレスポンシブデザイン

良いプロンプトの構成要素

  1. 画面の目的(1文で)
  • 「何のための画面か」を明確に
  1. レイアウト図(テキストベース)
  • コンポーネントの配置を視覚化
  • ユーザーが一目で構造を理解できる
  1. 主要コンポーネント(箇条書き)
  • ヘッダー、フォーム、ボタン、リストなど
  • 各コンポーネントの役割を簡潔に
  1. ユーザーフロー(ステップ形式)
  • ユーザーがどのように操作するか
  • 画面遷移の流れ
  1. デザイントーン(既存との一貫性)
  • 既存のデザインシステムとの整合性
  • カラーパレット、フォント、余白など
  1. 実装プロンプト(詳細仕様)
  • frontend-design Skillや実装者に渡す用
  • 具体的な要件とデザイン指示
  1. ビジュアルイメージ(オプション)
  • 画像生成ツールで作成したモックアップ
  • より具体的なイメージ共有

完全なプロンプト例

markdown
## 画面: お気に入り一覧画面

### 目的
ユーザーが保存した相談履歴を一覧で確認し、詳細を見返せるようにする

### レイアウト図

┌─────────────────────────────────────────────────┐ │ お気に入り一覧 [← 戻る] │ ├─────────────────────────────────────────────────┤ │ │ │ ┌───────────────────────────────────────┐ │ │ │ [画像] タイトル1 2024\01\15 │ [★] │ │ │ 相談内容の抜粋... │ │ │ └───────────────────────────────────────┘ │ │ │ │ ┌───────────────────────────────────────┐ │ │ │ [画像] タイトル2 2024\01\14 │ [★] │ │ │ 相談内容の抜粋... │ │ │ └───────────────────────────────────────┘ │ │ │ │ ┌───────────────────────────────────────┐ │ │ │ [画像] タイトル3 2024\01\13 │ [★] │ │ │ 相談内容の抜粋... │ │ │ └───────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────┘

(空状態) ┌─────────────────────────────────────────────────┐ │ お気に入り一覧 [← 戻る] │ ├─────────────────────────────────────────────────┤ │ │ │ [★ アイコン] │ │ │ │ お気に入りがありません │ │ 相談をお気に入りに追加してみましょう │ │ │ └─────────────────────────────────────────────────┘

code

### 主要コンポーネント
- **ヘッダー**: 「お気に入り一覧」タイトル + 戻るボタン
- **お気に入りカード**: サムネイル、タイトル、日付、お気に入り解除ボタン(★)
- **空状態**: お気に入りがない場合の案内メッセージとアイコン

### ユーザーフロー
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追加(「タイトル、日付、お気に入り解除ボタン」)
- キーボード操作対応

ビジュアルイメージ

(オプション)画像生成ツールで以下のようなモックアップを作成:

  • お気に入り一覧画面のフル画面デザイン
  • カードのホバー状態
  • 空状態のデザイン
code

## 画面ごとにプロンプトを作成

複数の画面が必要な場合は、それぞれの画面について上記フォーマットでプロンプトを作成します。

例:
- 画面1: タスク一覧画面
- 画面2: タスク作成モーダル
- 画面3: タスク詳細画面
- 画面4: カテゴリー設定画面

## 出力先

セッションディレクトリ内の`5_ui_prompt.md`に上記フォーマットで保存

## 完了条件

- [ ] 全画面のレイアウト図を作成
- [ ] 主要コンポーネントを明記
- [ ] ユーザーフローを記載
- [ ] 実装プロンプトを作成
- [ ] (オプション)ビジュアルイメージを生成