Springでポートフォリオを作成する　2-2.機能一覧

# 前回まで
前回は機能一覧を作成しました。

https://qiita.com/Jackoguro/items/89be9512f984fa8d2d3c

第2-2弾の今回は機能一覧の中から「クエスト」の詳細をまとめていきます。

# 参考資料
参考にした資料を載せておきます。
今回の機能一覧はUdemyの以下のコースを受講した際の資料を参考に書いてみました。

https://www.udemy.com/course/digisaku_requirements_definition_and_system_design/

また、今回は参考にしたアプリがあるので載せておきます

https://play.google.com/store/apps/details?id=com.habitrpg.android.habitica&hl=ja&gl=US

https://www.studyplus.jp/

# 機能一覧
今回作成するWebアプリの機能一覧は大きく分けると以下になります。
- [ ] 全体共通
- [ ] クエスト
- [ ] ステータス
- [ ] レポート
- [ ] 所持品
- [ ] ショップ
- [ ] パーティー
- [ ] 設定 

今回は「クエスト」に関して機能を決定していきます。

# 機能決定の流れ
今回は以下のようにして機能を決定していきました。
1. 検討する項目を挙げる
2. 検討する項目ごとに要求内容を挙げる(要求フェーズ)
2. 挙げられた要求内容が実現可能か検討する(検討フェーズ)
2. 実際に実装する内容を決定する(要件フェーズ)

また、今回は個人開発であるため、本来であればクライアントから挙げられる要求も、エンジニアが行う検討も1人で行っています。
そのため、実際の開発とはあまり近くないかもしれないですが、その点ご了承ください

## 検討する項目を挙げる
クエストにおいて検討すべき項目は4つあります。

1. クエスト全般
2. デイリークエスト
3. TODOクエスト
4. ダンジョンクエスト

## 要求フェーズ
「検討する項目を挙げる」で挙げられた項目について要求内容を作成します。

### 1. クエスト全般
クエストをクリアすると報酬をもらうことができる

### 2. デイリークエスト

#### 1. ダイアログを表示してデイリークエストを作成する
・タイトル
・画像
・メモ
・難易度
・開始日
・記録方法(時間か量で選べるようにする)
・目標設定(目標時間かページ数で選べるようにする)
・実施日(月～日の中どの曜日に実施するか選べるようにする)

#### 2. 登録されたデイリークエストをリスト状にして表示する
・ホバー時に対象のクエストの詳細を表示する
・ホバー時に設定ボタンを表示する
・設定ボタンをクリック時、設定ダイアログを表示する
・設定ダイアログには編集、削除、クエスト表示順を変更できるようにする

#### 3. 実績を入力する(作成時に選択した記録方法により入力方法を変更する)
・時間を選択した場合、学習した時間を手動入力、またはストップウォッチで入力する
・量を選択した場合、学習した量を手動入力する

#### 4. クエストクリア時
・一度クリアしたクエストにはクリアマークを付ける
・一度クリアしたクエストはリセットされるまで報酬を受け取ることができない


### 3. TODOクエスト

#### 1. ダイアログを表示してTODOクエストを作成する
・タイトル
・画像
・メモ
・難易度

#### 2. 登録されたTODOクエストをリスト状にして表示する
・ホバー時に対象のクエストの詳細を表示する
・ホバー時に設定ボタンを表示する
・設定ボタンをクリック時、設定ダイアログを表示する
・設定ダイアログには編集、削除、クエスト表示順を変更できるようにする

#### 3. 実績を入力する(時間での実績入力のみ)
・学習した時間を手動入力、またはストップウォッチで入力する

#### 4. 実績を入力する
・学習内容、ファイル(写真や画像等)を入力することができる

#### 5. クエストクリアの報酬は時間(分)と難易度により決定する

### 4. ダンジョンクエスト

#### 1. スタミナを消費してダンジョンクエストを始める

#### 2. ダンジョンクエストの報酬はお金、経験値、クエストモンスターの素材(ランダム)とする

#### 3. モンスターとの戦闘
・コマンドでプレイヤー行動を選択する
・戦闘ログを表示する

## 検討フェーズ
要求フェーズで挙げられた内容を検討します。

### 1. クエスト全般

#### 1. クエストをクリアすると報酬をもらうことができる
・報酬の量はどのように決定するのか？
・どのような報酬をもらうことができるのか？

### 2. デイリークエスト

#### 1. ダイアログを表示してデイリークエストを作成する
・タイトルのバリデーションは？
・画像の大きさはどこまで可能なのか？
・メモの文字数制限は？
・難易度はどのように分けるのか？
・目標時間は時間(h)単位でのみ登録可能なのか？

#### 2. 登録されたデイリークエストをリスト状にして表示する
一度に表示するリスト内のクエスト数は？

#### 3. 実績を入力する(作成時に選択した記録方法により入力方法を変更する)
・ストップウォッチを使用した場合、画面遷移をするとデータが消えてしまう可能性がある。また、画面を閉じてしまうとデータが消えてしまう可能性がある。
・一度に入力できる時間と学習量の最大は？

#### 4. クエストクリア時
クエストはいつリセットされるのか
(追加提案1) 0時毎にリセットを行う
(追加提案2) 前回のログイン日付が今回のログイン日付と異なっていた場合、リセットする

### 3. TODOクエスト

#### 1. ダイアログを表示してTODOクエストを作成する
・タイトルのバリデーションは？
・画像の大きさはどこまで可能なのか？
・メモの文字数制限は？
・難易度はどのように分けるのか？

#### 2. 登録されたTODOクエストをリスト状にして表示する
一度に表示するリスト内のクエスト数は？

#### 3. 実績を入力する(時間での実績入力のみ)
・ストップウォッチを使用した場合、画面遷移をするとデータが消えてしまう可能性がある。また、画面を閉じてしまうとデータが消えてしまう可能性がある。
・一度に入力できる時間の最大は？"

#### 4. 実績を入力する
初期段階では、学習内容とファイル(写真や画像等)を入力することができるが、使用する機能は実装しない

#### 5. クエストクリアの報酬は時間(分)と難易度により決定する
難易度により報酬を変更、後ほど割合を確認する

### 4. ダンジョンクエスト

#### 1. スタミナを消費してダンジョンクエストを始める
OK

#### 2. ダンジョンクエストの報酬はお金、経験値、クエストモンスターの素材(ランダム)とする
モンスターの素材は何を貰えるのか、また、どのくらい貰えるのか

#### 3. モンスターとの戦闘
・プレイヤーコマンドは何があるのか？
・モンスターとプレイヤーの攻撃頻度は？
・プレイヤーとモンスターは一対一なのか？
・ログは何を表示するのか？
・戦闘は手動なのか？

## 要件フェーズ
検討フェーズで挙げられた内容を踏まえて最終決定します。

### 1. クエスト全般

#### 1. クエストをクリアすると報酬をもらうことができる
・難易度により報酬を変更、後ほど割合を確認する
・報酬はお金、経験値、素材(ダンジョンクエストのみ)

### 2. デイリークエスト

#### 1. ダイアログを表示してデイリークエストを作成する
・タイトルは50文字まで入力可能
・画像は500KBまで可能、JPEG、GIF、PNG画像のみ可能
・メモの文字数は450文字まで入力可能
・難易度はベリーイージー、イージー、ノーマル、ハード、ベーリーハードの5段階とする
・目標時間は分単位で登録可能

#### 2. 登録されたデイリークエストをリスト状にして表示する
一度に表示できるクエスト数は6個(暫定)、それ以降はウィンドウズバーを使用して表示できるようにする

#### 3. 実績を入力する(作成時に選択した記録方法により入力方法を変更する)
・https://stopwatch.onl.jp/ はブラウザを閉じてもデータが残るため、この方法を採用。技術的に難しい場合、手動入力のみ可能にする
・一度に設定できる最大時間は23時間59分とする
・一度に設定できる最大量は制限を設けない

#### 4. クエストクリア時
・初期段階は追加提案1を採用、難しい場合、追加提案2を採用する。
・クエスト自体は受けることが可能

### 3. TODOクエスト

#### 1. ダイアログを表示してTODOクエストを作成する
・タイトルは50文字まで入力可能
・画像は500KBまで可能、JPEG、GIF、PNG画像のみ可能
・メモの文字数は450文字まで入力可能
・難易度はベリーイージー、イージー、ノーマル、ハード、ベーリーハードの5段階とする

#### 2. 登録されたTODOクエストをリスト状にして表示する
一度に表示できるクエスト数は6個(暫定)、それ以降はウィンドウズバーを使用して表示できるようにする

#### 3. 実績を入力する(時間での実績入力のみ)
・https://stopwatch.onl.jp/ はブラウザを閉じてもデータが残るため、この方法を採用。技術的に難しい場合、手動入力のみ可能にする
・一度に設定できる最大時間は23時間59分とする

#### 4. 実績を入力する
初期段階では入力する仕組のみ作成する。第二段階で入力したメモ、ファイルを用いた機能を実施する

#### 5. クエストクリアの報酬は時間(分)と難易度により決定する
OK

### 4. ダンジョンクエスト

#### 1. スタミナを消費してダンジョンクエストを始める
OK

#### 2. ダンジョンクエストの報酬はお金、経験値、クエストモンスターの素材(ランダム)とする
素材に関しては、モンスターの部位をランダムで複数個(3～5個)取得する。

#### 3. モンスターとの戦闘
・初期段階ではプレイヤーのコマンドは攻撃、特技、呪文、道具、逃げるの5パターンを実装
・初期段階ではモンスターとプレイヤーが一回行動ずつ
・初期段階では一対一、第2弾以降でパーティーを組み、戦えるようにする
・ログは誰が何をしたのかを表示する
・初期段階では戦闘は手動で行う、第2弾以降で自動で行えるような仕組みにする

# 最後に
クエストの機能一覧は以上になります。
次回はステータスの機能一覧になります。