ユーザーストーリー
ユーザーの視点で機能要件を記述するアジャイルの手法
ユーザーストーリーとは
ユーザーストーリーは、「誰が」「何をしたいか」「なぜか」をユーザーの視点で記述する要件定義の手法である。技術的な仕様ではなく、ビジネス価値に焦点を当てる。
カードに書かれた一文は要件そのものではなく、後で顧客と開発者が会話する約束にすぎない。Ron Jeffries は 2001 年の記事で、ストーリーの本質を Card (カード) / Conversation (会話) / Confirmation (確認) の 3 つに整理した。カードは要件の全部を載せる場所ではなく会話のきっかけであり、要件は会話を通じて伝わり、最後に受け入れテストで完了の合意を取る。この前提を外してカードを仕様書として扱うと、ストーリーは書式だけ整った短い仕様書に退化する。
フォーマット
役割 / 要望 / 理由の 3 点を並べる次の書式が最も広く使われている。Agile Alliance の用語集では、この形式は 2001 年に英国の Connextra 社で考案されたことから Connextra 形式とも呼ばれると説明されている。
As a [ユーザーの種類],
I want [実現したいこと],
so that [得られる価値].
例:
As a 購入者,
I want カートに商品を追加したい,
so that まとめて購入できる.
3 つ目の so that が最も落としやすく、同時に最も重要である。理由が書けないストーリーは、優先順位を決める根拠も、実装後に価値が出たかを確かめる基準も持たない。
ただし書式そのものが目的ではない。Agile Alliance は同じ用語集で、この形式を初心者向けの補助として位置づけ、慣れた後は形式に固執せず会話で伝わる表現に緩めてよいとし、書式を機械的に埋めるだけの運用を典型的な失敗として挙げている。
良いストーリーの条件 (INVEST)
Bill Wake が 2003 年に xp123 で発表した頭字語で、良いストーリーが備える 6 つの性質を示す。
| 条件 | 説明 |
|---|---|
| Independent | 他のストーリーと概念が重ならず、任意の順序で実装できる |
| Negotiable | 機能の契約ではなく、詳細は顧客と開発者が実装時に作り込む |
| Valuable | 誰にでもではなく、顧客にとって価値がある |
| Estimable | 見積もれるだけの理解が揃っている |
| Small | 原典では最大でも数人週、チームによっては数人日に収まる規模 |
| Testable | テストを書けるほど「何が欲しいか」が分かっている |
Small を「1 スプリントに収まればよい」と読むと大きすぎるストーリーが通ってしまう。原典は、1 か月以上かかるという発言はしばしば中身を理解していないことの言い換えだと指摘しており、小さいほど見積もりの精度も上がるとしている。
Negotiable と Testable は対になっている。詳細を固めないまま着手を合意できるのは、受け入れテストで最終確認する道が用意されているからである。
Acceptance Criteria
Acceptance Criteria (受け入れ条件) は 3C の Confirmation に当たり、どうなったら完了かを実装前に合意した箇条書きである。主導するのは開発者ではなく価値を判断する側で、開発者は実現性の観点から補う。
## ストーリー
購入者として、カートに商品を追加したい
## Acceptance Criteria
- [ ] 商品ページに「カートに追加」ボタンがある
- [ ] ボタンをクリックすると商品がカートに追加される
- [ ] カートのアイコンに商品数が表示される
- [ ] 同じ商品を追加すると数量が増える
- [ ] 在庫がない商品はボタンが無効化される
「正常に動くこと」のような検査できない書き方を避け、在庫切れや重複追加といった境界を含めるのが要点である。上の例では下の 2 行がそれに当たる。逆にボタンの色や実装方式まで書き込むと Negotiable が壊れ、会話で詰める余地が消える。
ストーリーの分割
大きなストーリー (エピック) は小さなストーリーに分割する。エピックは 1 イテレーションに収まらないほど大きいストーリーを指す呼び方で、別種の成果物ではない。関連するストーリーをまとめた束はテーマと呼ばれる。
エピック: ユーザー認証
├── ストーリー: メールアドレスでサインアップ
├── ストーリー: メールアドレスでログイン
├── ストーリー: パスワードリセット
└── ストーリー: Google OAuth ログイン
分割の目安は、分割後の各ストーリーが単独でも価値を出せること、つまり INVEST の Valuable を保つことである。「画面を作る」「API を作る」「テーブルを作る」のような層での分割は、単体では誰の役にも立たないため避ける。上の例は認証機能を利用者から見た用途で切っている。
技術タスクとの違い
ユーザーストーリーと技術タスクは、誰の言葉で書くかが違う。
| 観点 | ユーザーストーリー | 技術タスク |
|---|---|---|
| 視点 | ユーザー | 開発者 |
| 記述 | ビジネス価値 | 技術的な作業 |
| 例 | 「商品を検索したい」 | 「OpenSearch のインデックスを作成」 |
技術タスクをストーリーの体裁に無理に押し込む必要はない。Wake は同じ記事で、タスク側の指針として SMART という別の頭字語を挙げている。ストーリーの下に紐づく作業として素直に管理すればよい。
ストーリーマッピング
ストーリーマッピングは Jeff Patton が広めた整理法で、本人の記述によれば最初に記事化したのは 2005 年 1 月の "How You Slice It" である。ストーリーを平坦な一覧ではなく、利用者の行動の流れに沿って二次元に並べる。
ユーザーの行動フロー (横軸):
商品を探す → カートに追加 → 購入手続き → 支払い → 注文確認
各行動の詳細ストーリー (縦軸):
商品を探す:
- キーワード検索
- カテゴリ絞り込み
- 価格フィルター
横軸がユーザーの行動フロー、縦軸が各行動の詳細ストーリー。上にあるほど優先度が高い。横一列に並ぶ主要な行動は Patton が背骨と呼ぶ骨格に当たる。この形にするとリリース範囲を縦線で決められるようになり、一通り使える状態を保ったまま範囲を削れる。
実務での活用方法は関連書籍にも詳しい。
この記事は役に立ちましたか?
関連用語
アジャイル
短いイテレーションで動くソフトウェアを継続的に届け、変化に適応する開発手法の総称
スパイク
技術的な不確実性を解消するために、短期間で調査 / 検証を行うタイムボックス付きのタスク
テスト駆動開発
テストを先に書き、テストが通るコードを実装し、リファクタリングするサイクルで開発を進める手法
水平スケーリング
サーバーの台数を増やして処理能力を向上させるスケーリング手法
OpenID Connect
OAuth 2.0 の上に構築された認証レイヤーで、ユーザーの身元情報を ID トークンとして提供する
ロングポーリング
サーバーがデータの準備ができるまでレスポンスを保留し、擬似的なリアルタイム通信を実現する手法
関連する記事
チーム開発 / マネジメント本ガイド - 技術リーダーが読むべき本
チーム開発、1on1、技術マネジメントを学べる技術書の選び方を紹介。メンバー時代からマネージャーまで、段階別の読書ロードマップを解説します。
技術書の知識を定着させる間隔反復法 - 読んだのに忘れる問題を解決する
技術書を読んでも内容を忘れてしまう原因を認知科学の観点から分析し、間隔反復法を使って知識を長期記憶に定着させる具体的な方法を紹介します。
ゼロから作る Deep Learning シリーズの読む順番 - 全 6 巻の内容と選び方を整理
ゼロから作る Deep Learning シリーズ全 6 巻 (基礎 / 自然言語処理 / フレームワーク / 強化学習 / 生成モデル / LLM) の読む順番を解説。各巻の内容 / 発売年 / 前提知識を一覧表で整理し、目的別にどの巻から読むべきかを案内します。