claude/skills/requirements-user-story/SKILL.md
ユーザーストーリーを作成し、優先順位付けを行う。SLCでスコープが決まった後、実装計画を立てる前に使用。「ユーザーストーリーを書きたい」「機能を整理したい」「優先順位をつけたい」「バックログを作りたい」などのリクエストで起動。
npx skillsauth add skanehira/dotfiles requirements-user-storyInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
対話を通じてユーザーストーリーを作成し、以下を生成する:
対象プロダクトと既存ドキュメントを確認する。
Read({ file_path: "docs/PRODUCT_SPEC.md" })
Read({ file_path: "docs/PROBLEM_DEFINITION.md" })
ファイルが存在する場合:
これらの情報を元に、フェーズ2のユーザータイプ特定を効率化。
遷移条件: フェーズ2へ
ファイルが存在しない場合: AskUserQuestionで対象プロダクトを確認。
AskUserQuestion({
questions: [
{
question: "どのプロダクト/機能のユーザーストーリーを作成しますか?",
header: "対象",
options: [
{ label: "プロダクトを入力", description: "対象のプロダクトや機能領域" }
],
multiSelect: false
}
]
})
遷移条件: コンテキストが把握できたらフェーズ2へ
ストーリーの主語となるユーザータイプを洗い出す。
AskUserQuestion({
questions: [
{
question: "このプロダクトを使うユーザータイプは誰ですか?(複数可)",
header: "ユーザータイプ",
options: [
{ label: "ユーザータイプを入力", description: "例: 開発者、管理者、ゲストユーザー" }
],
multiSelect: false
}
]
})
遷移条件: ユーザータイプが1-3個特定できたらフェーズ3へ
各ユーザータイプについてストーリーを洗い出す。
As a [ユーザータイプ]
I want to [やりたいこと]
So that [得られる価値/理由]
質問パターン:
AskUserQuestion({
questions: [
{
question: "[ユーザータイプ]として、何ができるようになりたいですか?\n\nフォーマット: [やりたいこと] → [得られる価値]",
header: "ストーリー",
options: [
{ label: "ストーリーを入力", description: "例: SQLを入力する → 改善案を得られる" }
],
multiSelect: false
}
]
})
エピック: クエリ最適化機能
├── ストーリー: SQLを入力できる
├── ストーリー: AIが改善案を生成する
├── ストーリー: ベンチマーク結果を比較できる
└── ストーリー: 結果をエクスポートできる
遷移条件: 主要なストーリーが10-20個出たらフェーズ4へ
各ストーリーの完了条件を明確にする。
Given [前提条件]
When [アクション]
Then [期待結果]
例:
ストーリー: As a 開発者, I want to SQLを入力する, So that 改善案を得られる
受け入れ基準:
- Given ログイン済みの状態で
When SQLを入力して送信ボタンを押す
Then AIが改善案を3つ以上提案する
- Given 不正なSQLを入力した場合
When 送信ボタンを押す
Then エラーメッセージが表示される
AskUserQuestion({
questions: [
{
question: "このストーリーが「完了」と言えるのはどんな時ですか?",
header: "受け入れ基準",
options: [
{ label: "基準を入力", description: "Given-When-Then形式で" }
],
multiSelect: false
}
]
})
遷移条件: 主要なストーリーに受け入れ基準がついたらフェーズ5へ
ストーリーの優先順位を決定する。
| カテゴリ | 説明 | | ---------- | ------------------------------ | | Must | なければリリースできない | | Should | 重要だが、なくてもリリース可能 | | Could | あると嬉しい | | Won't | 今回はやらない |
AskUserQuestion({
questions: [
{
question: "このストーリーの優先度は?",
header: "MoSCoW",
options: [
{ label: "Must", description: "必須。これがないとリリースできない" },
{ label: "Should", description: "重要だが、なくてもリリース可能" },
{ label: "Could", description: "あると嬉しい" },
{ label: "Won't", description: "今回はやらない" }
],
multiSelect: false
}
]
})
| 要素 | 説明 | スコア | | -------------- | ------------------ | ------ | | Impact | ユーザーへの影響度 | 1-10 | | Confidence | 実現できる確信度 | 1-10 | | Ease | 実装の容易さ | 1-10 |
ICEスコア = Impact × Confidence × Ease
遷移条件: 全ストーリーに優先度がついたらフェーズ6へ
# ユーザーストーリー
## ユーザータイプ
| タイプ | 説明 |
|--------|------|
| 開発者 | DBA不在チームの開発者 |
## エピック一覧
1. クエリ最適化機能
2. 結果表示機能
3. ...
## ストーリー一覧
### Must(必須)
#### US-001: SQLを入力できる
- **As a** 開発者
- **I want to** SQLとスキーマを入力する
- **So that** 改善案を得られる
**受け入れ基準**:
- [ ] Given ログイン済み When SQL入力して送信 Then 改善案が表示される
- [ ] Given 不正SQL When 送信 Then エラー表示
**エピック**: クエリ最適化機能
---
### Should(重要)
#### US-002: ...
---
### Could(あると嬉しい)
...
---
### Won't(今回はやらない)
...
## 優先順位サマリー
| 優先度 | ストーリー数 |
|--------|-------------|
| Must | X |
| Should | X |
| Could | X |
| Won't | X |
Write({
file_path: "docs/USER_STORIES.md",
content: userStoriesContent
})
生成したドキュメントのレビューをサブエージェントに委譲する。
Task({
description: "ユーザーストーリーレビュー",
subagent_type: "general-purpose",
prompt: `
以下のユーザーストーリードキュメントをレビューし、問題があれば修正してください。
## レビュー対象ファイル
- docs/USER_STORIES.md
## レビュー観点
1. **INVEST基準**: 各ストーリーがIndependent、Negotiable、Valuable、Estimable、Small、Testableか
2. **フォーマットの一貫性**: As a / I want to / So that の形式が守られているか
3. **受け入れ基準の具体性**: Given-When-Then形式で具体的に書かれているか
4. **優先度の妥当性**: MoSCoWの分類が適切か、Must項目が多すぎないか
5. **ストーリーの粒度**: 1-3日で実装可能なサイズか、大きすぎるものはないか
## 出力形式
1. 発見した問題のリスト(問題がない場合は「問題なし」)
2. 各問題の修正内容
3. 修正後のファイル更新(Editツールで修正)
問題がなくなるまでレビューと修正を繰り返すこと。
`
})
| 条件 | 説明 | | --------------- | -------------------------- | | Independent | 他のストーリーに依存しない | | Negotiable | 詳細は交渉可能 | | Valuable | ユーザーに価値がある | | Estimable | 見積もり可能なサイズ | | Small | 小さい(1-3日で完了) | | Testable | テスト可能 |
❌ 「データベースを設計する」
→ ユーザー価値がない(技術タスク)
❌ 「ユーザーとしてすべての機能を使いたい」
→ 大きすぎる、具体性がない
❌ 「管理者としてバグを修正したい」
→ ストーリーではない
tools
ローカルのコミット履歴と差分からDraft PRを作成する。ブランチ未作成・コミット未作成の状態でも、必要に応じてブランチ作成とコミットを行ってからPRを作成する。`.github/` にPRテンプレートがあれば内容を埋めて、なければ作業内容から本文を生成し、`AskUserQuestion`で作成可否を確認してから `gh pr create --draft` を実行する。「PRを出したい」「draft PRを作成」「プルリクを作って」「PR本文を生成」などのリクエストで起動。
tools
複数サブエージェントに異なる立場を与えて議論を反復し、相違が収束するまで議題を検証して結論を提示する。設計妥当性検証・実装方針比較・原因分析のセカンドオピニオン・アイデアの壁打ちに使用。「議論したい」「壁打ちしたい」「セカンドオピニオン」「複数視点で検証したい」などで起動。
tools
変更内容を分析し、Conventional Commit形式でコミットする (pushはユーザが手動)
development
React 19 + Vite+ (`vp`) + TypeScript + Tailwind CSS v4 + React Router v7 (HashRouter) でモバイル向け静的SPAデモサイトをTDDで構築し、Cloudflare Workers (Static Assets) へ自動デプロイするまでの標準ワークフローを提供する。テンプレートリポジトリ `skanehira/demo-site-template` を `gh repo create --template` で clone することで scaffold を省略する。`localStorage` でフロントエンドのみ完結する"フロントのみ完結デモ"に特化。デザインコンセプトの確立には `frontend-design` スキルを呼び出して連携する。起動トリガー:「デモサイトを作りたい」「モバイル向け静的デモ」「SPAを作ってCloudflareにデプロイ」「静的プロトタイプを公開」「localStorage でフロントだけ完結」。ユースケース:(1)クライアント提案用のUI/UXたたき台、(2)新機能のプロトタイプ、(3)モバイル向けランディング。ツールチェーンは Vite+ (`vp`) で統合(内部 PM は pnpm)。