# 要件定義書（サンプル）

- システム名：Q&A サイト（プログラミング質問・回答サービス）
- 作成日：2026-06-XX
- 作成者：◯◯チーム

## 1. 背景

ソフトウェア開発では、コーディング中にエラーや実装方法で行き詰まる場面が日常的に生じる。開発者はその都度、検索や既存のフォーラムで答えを探すが、情報が古い・断片的で、正しさを判断できないことが多い。信頼できる回答に早くたどり着き、その回答が後から同じ疑問を持つ開発者にも役立つ仕組みが求められている。

## 2. 課題

現在、明らかになっている課題は次のとおりである。

- 検索しても、回答が古い・断片的で、信頼できる答えにたどり着けない
- 良い回答が時系列に埋もれ、どれが正しいか判断できない
- 一度得られた答えが個別のやり取りで終わり、後から検索する人に活用されない

## 3. 目的・方針

上記の課題を解決し、開発者が信頼できる回答に早くたどり着けることを目的として、Q&A サイトを開発する。開発に当たっては、次の3つの方針を掲げる。

- 誰でも質問・回答できるようにし、知識をひとつの場に集める
- 回答への投票で、多くの人が正しいと判断した回答を上位に表示する
- 質問と回答を検索できる形で残し、後から同じ疑問を持つ開発者にも役立てる

## 4. 概要

本システムは、開発者がコーディング中の疑問を質問として投稿し、ほかの開発者が回答する Web アプリケーションである。利用者は回答に投票でき、票数の多い回答が上位に表示される。質問と回答は検索でき、同じ疑問を持つ開発者が後から参照できる。主要機能として、ユーザー認証、質問・回答の投稿、投票、閲覧・検索を提供する。

## 5. 用語の定義

### 5.1 質問

開発者が投稿する、解決したい疑問。タイトルと本文を持つ。

### 5.2 回答

質問に対して投稿される、解決のための情報。

### 5.3 投票

回答の良し悪しを利用者が示す操作。票数が多い回答ほど上位に表示される。

### 5.4 評価（reputation）

利用者の貢献に応じて貯まる数値。一定の評価に達すると、投票や編集ができるようになる。

## 6. 機能要件

主なユースケースを一覧で示す（詳細なフローは設計で定める）。

| アクター | ユースケース | 概要 | 優先度 |
|---|---|---|---|
| 開発者 | ログイン | メールアドレスとパスワードでログインする | Must |
| 開発者 | 質問の投稿 | タイトルと本文で疑問を投稿する | Must |
| 開発者 | 回答 | 質問に回答する | Must |
| 開発者 | 投票 | 役に立った回答に投票し、上位に上げる | Must |
| 閲覧者 | 閲覧・検索 | キーワードで検索して質問と回答を読む | Must |

採用・タグ（Should）、評価（reputation）（Could）は、今回のあとに追加する。

## 7. 非機能要件

| 観点 | 要件 |
|---|---|
| 性能 | 通常の利用で、検索結果の 95% が 2 秒以内に表示される |
| セキュリティ | パスワードは暗号化して保存し、なりすましや不正な連続投票を防ぐ |
| 可用性 | 計画した停止を除き、稼働率 99% 以上で動き続ける |
| 互換性 | 主要なブラウザー（最新版）で動作する |

## 8. ビジネスルールと制約

- ビジネスルール
  - 自分の回答には投票できない
  - 同じ質問は重複させず、既存の質問へ誘導する
- 制約
  - 3 週間で開発する
  - 既習の Spring Boot と MySQL で作る

## 9. システム化の範囲

- 今回作る（MVP）：ユーザー認証、質問の投稿、回答の投稿、回答への投票、閲覧・検索
- 今回は作らない：採用、タグ、評価（reputation）、検索の最適化、高度なモデレーション、外部サービス連携

## 10. 工程計画

| 工程 | 完了予定 |
|---|---|
| 要件定義 | 2026-06-XX |
| 設計 | 2026-06-XX |
| 実装 | 2026-06-XX |
| テスト | 2026-06-XX |
| 導入 | 2026-06-XX |

## 11. 成果物

- 要件定義書（本書）
- 設計書（画面・ER 図・URL設計・アーキテクチャ）
- ソースコード
- テストコード・テスト結果
