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

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

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

第2-5弾の今回は機能一覧の中から「所持品」の詳細をまとめていきます。

# 参考資料
参考にした資料を載せておきます。
今回の機能一覧は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人で行っています。
そのため、実際の開発とはあまり近くないかもしれないですが、その点ご了承ください

## 検討する項目を挙げる
全体共通において検討すべき項目は5つあります。

1. アイテム/装備
2. アイテム
3. 装備

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

### 1. アイテム/装備

#### 1. 所持品を売ることができる
#### 2. 素材を使用して装備を作成することがする

### 2. アイテム

#### 1. 所持品をカテゴリー毎に分けて表示する
全体、食べ物、薬剤、素材、貴重品

#### 2. レア度を分けて表示する
レジェンド、エピック、レア、アンコモン、コモン

#### 3. お気に入り登録することができる

#### 4. 所持数を表示する

#### 5. ホバーしているアイテムの詳細を表示することができる
・アイテム名
・画像
・レア度
・お気に入り登録
・アイテム詳細
・カテゴリー

#### 6. 検索機能
・検索ボックス
・ソート(取得日、レア度、所持数、名前の順)
・フィルター(レア度、お気に入り)

### 3. 装備

#### 1. 所持品をカテゴリー毎に分けて表示する
全体、武器、盾、兜、鎧、グローブ、ブーツ、アクセサリー

#### 2. レア度を分けて表示する
レジェンド、エピック、レア、アンコモン、コモン

#### 3. お気に入り登録することができる

#### 4. 装備しているかどうかを表示する

#### 5. ホバーしているアイテムの詳細を表示することができる
・装備名
・画像
・レア度
・お気に入り登録
・装備詳細
・カテゴリー
・装備マーク

#### 6. 検索機能
・検索ボックス
・ソート(取得日、レア度、名前の順)
・フィルター(レア度、お気に入り)

#### 7. 装備一覧を表示

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

### 1. アイテム/装備

#### 1. 所持品を売ることができる
値段はどのように設定するのか？

#### 2. 素材を使用して装備を作成することがする
OK

### 2. アイテム

#### 1. 所持品をカテゴリー毎に分けて表示する
・食べ物と薬剤の役割が一部かぶっている。食べ物独自の機能は何かあるのか？
・貴重品にはどのようなアイテムが該当するのか？
・表示順はどうするのか？

#### 2. レア度を分けて表示する
OK

#### 3. お気に入り登録することができる
お気に入り登録できるアイテムに上限はあるのか？

#### 4. 所持数を表示する
最大所持数はあるのか？

#### 5. ホバーしているアイテムの詳細を表示することができる
・ホバーが外れた場合はどうするのか？
・アイテム詳細は何を表示するのか？

#### 6. 検索機能
・検索は完全一致と部分一致のどちらを採用するのか？
・検索はアイテム名で行うのか？
・ソートはデフォルトでは何でしているのか？
・ソートは複数掛け合わせることができるのか？
・ソートの各並べ替え順は？
・フィルターとソートは併用することができるのか？

### 3. 装備

#### 1. 所持品をカテゴリー毎に分けて表示する
表示順はどうするのか？

#### 2. レア度を分けて表示する
OK

#### 3. お気に入り登録することができる
お気に入り登録できるアイテムに上限はあるのか？

#### 4. 装備しているかどうかを表示する
OK

#### 5. ホバーしているアイテムの詳細を表示することができる
・ホバーが外れた場合はどうするのか？
・装備詳細は何を表示するのか？

#### 6. 検索機能
・検索は完全一致と部分一致のどちらを採用するのか？
・検索は装備名で行うのか？
・ソートはデフォルトでは何でしているのか？
・ソートは複数掛け合わせることができるのか？
・ソートの各並べ替え順は？
・フィルターとソートは併用することができるのか？

#### 7. 装備一覧を表示
装備一覧から装備を変更することができるのか？

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

### 1. アイテム/装備

#### 1. 所持品を売ることができる
・値段はレア度により変更する
・初期段階では所持品を売る機能は実装しない

#### 2. 素材を使用して装備を作成することがする
初期段階では装備作成は実装しない。第2弾以降で装備を作成する機能を実装

### 2. アイテム

#### 1. 所持品をカテゴリー毎に分けて表示する
・食べ物と薬剤は薬剤に統合する。よってカテゴリーは全体、薬剤、素材、貴重品の3つに分ける
・貴重品は現段階では「宝箱」や「鍵」などを実装する
・表示順は取得日が最新のものから表示する

#### 2. レア度を分けて表示する
OK

#### 3. お気に入り登録することができる
お気に入り登録の上限はない

#### 4. 所持数を表示する
アイテムの最大所持数は99とする

#### 5. ホバーしているアイテムの詳細を表示することができる
・ホバーが外れた場合は、前にクリックしていたアイテムの詳細を表示する
・アイテム詳細には、そのアイテムの効果と一言説明を表示する。

#### 6. 検索機能
・検索ボックスは部分一致、アイテム名と部分一致するアイテムを表示する
・デフォルトでは取得日でソートしておく。
・ソートは単体のみで使用可能
・取得日は最近取得したもの順にソート
・レア度は高い方から順にソート
・所持数は多いものから順にソート
・名前の順はA～Z順にソート
・フィルターはソートとの併用可能

### 3. 装備

#### 1. 所持品をカテゴリー毎に分けて表示する
表示順は取得日が最新のものから表示する

#### 2. レア度を分けて表示する
OK

#### 3. お気に入り登録することができる
お気に入り登録の上限はない

#### 4. 装備しているかどうかを表示する
・新たな装備品を装備しようとした場合、同じ部位の装備品が装備されている場合、自動的に古いほうを外し、新たな装備品を装備する
・違う装備品に変更する場合、現在装備している装備品とのステータス差を表示する

#### 5. ホバーしているアイテムの詳細を表示することができる
・ホバーが外れた場合は、前にクリックしていたアイテムの詳細を表示する
・装備詳細には、その装備の効果と一言説明を表示する。また、現在装備している装備品とのステータス差を表示する

#### 6. 検索機能
・検索ボックスは部分一致、アイテム名と部分一致する装備品を表示する
・デフォルトでは取得日でソートしておく。
・ソートは単体のみで使用可能
・取得日は最近取得したもの順にソート
・レア度は高い方から順にソート
・名前の順はA～Z順にソート
・フィルターはソートとの併用可能

#### 7. 装備一覧を表示
装備一覧から変更は不可とする

# 最後に
所持品の機能一覧は以上になります。
次回はショップの機能一覧になります。