アジャイルソフトウェア開発においてドキュメント管理方法（ユーザーストーリーの書き方）

## ユーザーストーリーとは

ユーザーストーリーは、アジャイルソフトウェア開発において、顧客や利用者の視点から見た製品の要求事項を表現する方法です。ステークホルダーと開発者が協力して、ユーザーストーリーを作成、議論、洗練させていくことで、顧客のニーズに合ったソフトウェアを開発することができます。

ユーザーストーリーは、以下の3つの要素で構成されています。

- 役割（As a）：ストーリーの主体となるユーザーの役割や属性を明確にします。
- 目的（I want）：ユーザーが達成したい目的や実現したい機能を簡潔に記述します。
- 利益（So that）：ユーザーがその機能を使うことで得られる利益や価値を説明します。

## ユーザーストーリーの作成プロセス

ユーザーストーリーは、ステークホルダーと開発者が協力して作成、議論、洗練させていくプロセスを経て完成します。このプロセスでは、以下のようなステップが含まれます。

1. アイデアの収集
   - ステークホルダーと開発者が、ソフトウェアに必要な機能やユーザーの要求事項についてアイデアを出し合います。
   - 収集されたアイデアは、ユーザーストーリーの形式で記録されます。

2. ストーリーポイントの見積もり
   - 各ユーザーストーリーに対して、ストーリーポイントを割り当てます。
   - ストーリーポイントは、ストーリーの複雑さ、リスク、実装に必要な労力を相対的に表す数値です。
   - ストーリーポイントの見積もりは、開発チームの経験に基づいて行われます。

3. 優先順位付け
   - ユーザーストーリーの優先順位を決定します。
   - 優先順位は、ストーリーの価値、リスク、依存関係などを考慮して決定されます。

4. 継続的な洗練化
   - プロジェクトの進行に伴い、ユーザーストーリーとストーリーポイントは継続的に洗練化されます。
   - 新しい情報や要求の変更に基づいて、ストーリーの追加、変更、削除が行われます。
   - スプリントを重ねるごとに、ストーリーポイントの見積もりが調整され、より正確になっていきます。

## ユーザーストーリーの書き方

ユーザーストーリーを書く際は、以下の点に留意します。これらのガイドラインは、アイデアを整理し、メモとして記録する際に役立ちます。

1. 簡潔で明確な表現
   - ユーザーストーリーは、シンプルで分かりやすい文章で書きます。
   - 専門用語や技術的な詳細は避け、ステークホルダー全員が理解できる表現を使います。

2. 具体化や詳細化は避ける
   - ユーザーストーリーは、具体的な実装方法や詳細な仕様を記述するのではありません。
   - 目的や価値を中心に書き、開発チームの創造性を引き出します。
   - 詳細は、開発チームとステークホルダーの対話を通じて徐々に明らかにしていきます。

3. ユーザー視点の維持
   - ユーザーストーリーは、常にユーザーの視点で書きます。
   - "ユーザーは〜したい"という形式で書くことで、ユーザー中心の開発を促します。

4. 受け入れ基準の明示
   - ユーザーストーリーには、受け入れ基準を含めます。
   - 受け入れ基準は、ストーリーが完了したと判断するための条件を示します。
   - 受け入れ基準は、テスト可能な形で書きます。

5. 適切な粒度
   - ユーザーストーリーは、適切な大きさで書く必要があります。
   - 大きすぎるストーリーは、複数の小さなストーリーに分割します。
   - 小さすぎるストーリーは、まとめて1つのストーリーにします。

6. INVEST原則の適用
   - ユーザーストーリーを書く際は、INVEST原則（Independent, Negotiable, Valuable, Estimable, Small, Testable）を満たすようにします。
   - INVEST原則に沿ったストーリーは、理解しやすく、実装しやすくなります。

ユーザーストーリーの一般的なテンプレートは以下のようになります。

`[役割]として、[目的]を実現したい。なぜなら、[利益]を得られるからだ。`

### 例

1. ECサイトの開発プロジェクトにおけるユーザーストーリー
   - `購入者として、商品をカートに追加できるようにしたい。なぜなら、後で見返してまとめて購入できるようにするためだ。`

2. 社内の経費精算システムの開発におけるユーザーストーリー
   - `経理担当者として、経費申請の承認プロセスを自動化したい。なぜなら、手作業での確認や承認に時間がかかるためだ。`

3. モバイルアプリのユーザー認証機能の開発におけるユーザーストーリー
   - `ユーザーとして、SNSアカウントを使ってアプリにログインしたい。なぜなら、新たにアカウントを作成する手間を省きたいからだ。`

## ストーリーポイントの書き方とフォーマット

ストーリーポイントは、ユーザーストーリーに付与される相対的な見積もり値です。ストーリーポイントの書き方とフォーマットは以下のようになります。

1. 相対的な尺度
   - ストーリーポイントは、ユーザーストーリー間の相対的な複雑さや工数を表します。
   - 絶対的な時間ではなく、ストーリー間の相対的な大きさを示します。

2. フィボナッチ数列の利用
   - ストーリーポイントには、しばしばフィボナッチ数列（1、2、3、5、8、13、21など）が使用されます。
   - 数値が大きくなるほど、不確実性が増すことを表現します。

3. チームによる合意
   - ストーリーポイントは、開発チーム全体で合意した値を割り当てます。
   - プランニングポーカーなどの見積もり手法を用いて、チームメンバーの意見を集約します。

4. 継続的な調整
   - ストーリーポイントは、スプリントを重ねるごとに調整されます。
   - 実際の開発経験を通じて、見積もりの精度を高めていきます。

ストーリーポイントの一般的なフォーマットは以下のようになります。

`ストーリーポイント: [フィボナッチ数列の値]`

### 例

1. ログイン機能の実装
   - `ストーリーポイント: 5`

2. 商品検索機能の実装
   - `ストーリーポイント: 8`

3. 決済処理の実装
   - `ストーリーポイント: 13`

## ユーザーストーリーのアンチパターン

ユーザーストーリーを書く際には、以下のようなアンチパターンに注意が必要です。

### 1. 実装の詳細を含めすぎる

ユーザーストーリーに、具体的な実装方法や技術的な詳細を含めすぎると、開発チームの創造性が制限されます。

| アンチパターン例 | 修正例 |
|-----------------|--------|
| `ユーザーとして、商品をカートに追加する際に、Ajaxを使ってカートの内容を更新したい。` | `購入者として、商品をカートに追加した後、カートの内容をすぐに確認したい。なぜなら、追加した商品が正しいことを確認できるからだ。` |
| `管理者として、ユーザーアカウントをCSVファイルからインポートできるようにしたい。` | `管理者として、複数のユーザーアカウントを一括で登録したい。なぜなら、手動での登録に時間がかかるためだ。` |
| `ユーザーとして、商品詳細ページでReactを使用した高速な描画を実現したい。` | `ユーザーとして、商品詳細ページをスムーズに閲覧したい。なぜなら、ページの読み込み時間が長いとストレスを感じるからだ。` |

### 2. 複数の要求を1つのストーリーに詰め込む

1つのユーザーストーリーに複数の要求やタスクを詰め込むと、ストーリーの粒度が大きくなりすぎます。

| アンチパターン例 | 修正例 |
|-----------------|--------|
| `ユーザーとして、商品を検索し、検索結果をフィルタリングし、商品の詳細を確認できるようにしたい。` | `ユーザーとして、商品をキーワードで検索したい。なぜなら、目的の商品を素早く見つけられるからだ。`<br>`ユーザーとして、検索結果をカテゴリやブランドでフィルタリングしたい。なぜなら、関連する商品に絞り込めるからだ。`<br>`ユーザーとして、商品の詳細情報を確認したい。なぜなら、商品の仕様や画像を確認して購入を決定できるからだ。` |
| `ユーザーとして、プロフィール情報を編集し、アバター画像をアップロードし、プライバシー設定を変更できるようにしたい。` | `ユーザーとして、プロフィール情報を編集したい。なぜなら、最新の情報を反映させるためだ。`<br>`ユーザーとして、アバター画像をアップロードしたい。なぜなら、自分らしさを表現できるからだ。`<br>`ユーザーとして、プライバシー設定を変更したい。なぜなら、公開する情報を制御したいからだ。` |
| `管理者として、ダッシュボードで売上データを表示し、ユーザーアクティビティを追跡し、システム設定を変更できるようにしたい。` | `管理者として、ダッシュボードで売上データを表示したい。なぜなら、ビジネスの状況を把握するためだ。`<br>`管理者として、ユーザーアクティビティを追跡したい。なぜなら、サービスの利用状況を分析するためだ。`<br>`管理者として、システム設定を変更したい。なぜなら、ニーズに合わせてサービスを最適化するためだ。` |

### 3. ユーザーの視点を忘れる

ユーザーストーリーは、ユーザーの視点で書くことが重要です。開発者の視点で技術的な要求を記述しても、ユーザーにとっての価値は伝わりません。

| アンチパターン例 | 修正例 |
|-----------------|--------|
| `システムは、ユーザーのログイン情報を暗号化し、データベースに保存する必要がある。` | `ユーザーとして、安全にログインしたい。なぜなら、個人情報を保護し、安心してサービスを利用できるからだ。` |
| `バックエンドは、リクエストを処理するためにキャッシュ機構を実装する必要がある。` | `ユーザーとして、アプリのレスポンスを高速に得たい。なぜなら、ストレスなくサービスを利用できるからだ。` |
| `フロントエンドは、レスポンシブデザインを適用し、モバイルデバイスとデスクトップの両方に対応する必要がある。` | `ユーザーとして、どのデバイスからでもアプリを快適に使いたい。なぜなら、いつでもどこでもサービスを利用できるようにするためだ。` |

### 4. 曖昧な表現を使う

「〜のようにする」「〜に対応する」など、曖昧な表現を使うと、要求の理解に齟齬が生じます。

| アンチパターン例 | 修正例 |
|-----------------|--------|
| `ユーザーとして、商品をカートに追加する際に、適切なメッセージを表示するようにしたい。` | `購入者として、商品をカートに追加した際に、「商品がカートに追加されました」というメッセージを表示したい。なぜなら、追加が成功したことを明確に確認できるからだ。` |
| `管理者として、ユーザーを適切に管理できるようにしたい。` | `管理者として、ユーザーのアカウントを作成、編集、削除したい。なぜなら、ユーザー管理を効率的に行うためだ。` |
| `ユーザーとして、アプリが提供する機能を適切に使えるようにしたい。` | `ユーザーとして、アプリの各機能について詳細なドキュメントを参照したい。なぜなら、機能を効果的に使いこなすためだ。` |

## ユーザーストーリーの管理方法

ユーザーストーリーの管理には、オフラインとオンラインの2つの方法があります。プロジェクトの規模や参加メンバーの分散状況に応じて、適切な方法を選択することが重要です。

### オフラインでのユーザーストーリー管理

オフラインでユーザーストーリーを管理する際は、以下のような方法が一般的です。

1. 方眼紙とポストイットの使用
   - 大きな方眼紙を用意し、ユーザーストーリーをポストイットに書き出します。
   - ポストイットを方眼紙に貼り付け、ストーリーの関連性や優先順位に応じて配置します。
   - ポストイットの色分けを活用して、ストーリーの状態（未着手、進行中、完了など）を視覚的に管理できます。
   - 方眼紙上でストーリーマッピングを行うこともできます。横軸にユーザーの行動の流れ、縦軸にストーリーの粒度を設定し、ストーリー間の関連性や依存関係を可視化します。

オフラインでのユーザーストーリー管理は、チームメンバーが同じ場所に集まる必要がありますが、直接対面でのコミュニケーションや協働作業が可能となります。

### オンラインでのユーザーストーリー管理

オンラインでユーザーストーリーを管理する際は、以下のようなツールを活用します。

1. [Figma](https://www.figma.com/ja/)
   - Figmaは、オンラインのデザインツールですが、ユーザーストーリーの管理にも利用できます。
   - ストーリーカードをFigma上に作成し、ドラッグ＆ドロップで簡単に配置や移動ができます。
   - リアルタイムコラボレーション機能により、チームメンバーが同時に編集や議論に参加できます。
   - Figma上でストーリーマッピングを行うことも可能です。カンバンボードのようにストーリーを配置し、関連性や順序を可視化できます。
   - ストーリーカードの色分けを活用して、ストーリーの状態や優先度を視覚的に管理できます。

2. [Miro](https://miro.com/)
   - Miroは、オンラインのホワイトボードツールです。
   - ストーリーカードをMiro上に配置し、矢印や線でつなげることで関連性を表現できます。
   - テンプレートやアイコンを活用して、ストーリーの状態や優先度を視覚的に管理できます。
   - Miro上でもストーリーマッピングが可能です。横軸と縦軸を設定し、ストーリーを時系列や粒度に応じて配置することで、全体像を把握しやすくなります。
   - ストーリーカードの色分けを行うことで、状態や優先度を一目で確認できます。

オンラインでのユーザーストーリー管理は、チームメンバーが物理的に離れている場合でも、リアルタイムでのコラボレーションや情報共有が可能となります。ただし、ツールの習熟に時間を要する場合があります。

プロジェクトの特性に合わせて、オフラインとオンラインの管理方法を使い分けたり、組み合わせたりすることで、効果的なユーザーストーリーの管理が実現できます。特に、オンラインツールであるFigmaやMiroを活用することで、ストーリーマッピングや色分けなどの視覚的な管理手法をリモートでも実践できるようになります。

## まとめ

ユーザーストーリーは、アジャイルソフトウェア開発において、顧客の視点から製品の要求事項を表現する重要な手法です。ユーザーストーリーの作成から管理までのプロセスを適切に行うことで、開発チームとステークホルダー間のコミュニケーションを円滑にし、顧客のニーズに合ったソフトウェアを開発することができます。

ユーザーストーリーの作成では、シンプルで明確な表現を心がけ、ユーザー視点を維持することが大切です。ストーリーポイントの見積もりにはINVEST原則を適用し、継続的な調整を行います。管理には、オフラインとオンラインの方法があり、方眼紙とポストイットやFigma、Miroなどのツールを活用することで、効果的なコラボレーションが可能となります。

適切なユーザーストーリーの作成と管理を通じて、ユーザー中心の開発を進め、優先順位の高い価値を早期に提供し、変化に柔軟に対応することができます。本記事で紹介した手法を活用し、アジャイルソフトウェア開発の実践に役立てていただければ幸いです。