アプレンティスシップ、二度目のチーム開発の振り返り

# はじめに
アプレンティスシップ三期生のMatsudaです。

以前もご紹介したアプレンティスシップで行われるチーム開発の二度目の振り返りを書いていこうと思います。

今回の開発のテーマは 『**ワクワクするものを開発せよ**』 です。

前回とは違うメンバーと三人チームで開発に取り掛かります。
プロダクトの内容や設計を考えるのに８週間、実装は１週間でした。

# 1.アイデア決め
まず前回と同じようにNotionを議事録として使用し、アイデアを挙げていきます。
多数決で数を絞った後で、そのアイデアが技術的に実現可能かどうかをそれぞれで調べます。


その後、テーマである「ワクワク」を前提に話し合い、

![moodtune3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3660432/d3d4c91b-de8f-2b98-097a-a5d54d5bdcbd.gif)

* **ユーザーが今の気分とジャンルを選択し、それに適した音楽を提供するアプリ**


に決定しました。

### ユーザーへの価値提供
まず従来の音楽提供アプリには以下の***課題***がありました。

* 同じ傾向のおススメが多く、同じ音楽ばかり聴いている
* 自分の知らない音楽との出会いが難しい


その課題に対して、今回のプロダクトは以下のような***解決***をします。

* 本屋の選書サービスのような需要を満たす
* 新しい音楽との出会いを、その日の**気分**ですぐに決めることができる
* ジャンルも自分で選択できるので偏りを無くすことができる



# 2.スライド作成、要件定義
以前のチーム開発ではメンバーの方がスライドを作成してくれたので、今回は自分がスライド作成をしました。
![moodtune1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3660432/9653e160-77b8-7a23-f8e2-abe3c39b82b4.jpeg)

文章を見返してみると、完成版とは違った内容が書いてありますが、大体の方向性はこの時点で出来ているように思います。

この時点ではデザインなどは決まっていませんでしたが、**ChatGPTに自分の気分を解析してもらう**という要件定義を出していました。
（※後でその機能は諦めることになります。）

### プロダクト名
それぞれで持ち寄ったプロダクト名を多数決で決めた結果、プロダクト名は
#### 「MoodTune」

に決まりました。

意味は「**気分(Mood)を音楽で調律(Tune)する**」です。

# 3.設計、タスク出し、環境構築
まずどのような技術が必要かがあやふやだったので、メンバー全員でそれぞれSpotifyのAPIを使用した試作品を作ることにしました。

結果としてChatGPTを使用するのは一週間では難しい。ということが分かり、クリックのみで選曲する方向性に変更しました。


その後チームメンバーの方がDockerの環境構築をしてくださり、それを使って開発を進めていく事に。

使用技術は
フロントエンド：Next.js
バックエンド:Next.js
開発環境：Docker
コード管理：GitHub
API : Spotify for Developers

開発の割り振りでは機能ごとに分けるということになり、自分はバックエンドとしてクリックしたボタンのデータを次のページに渡し、APIに選曲を指示する。という部分を担当することになりました。

# 4.実装
### チーム会
毎日朝と夜にチーム会を開き、それぞれの進捗状況や互いの連携や課題について話し合いました。
このチーム会のおかげで、以下に書いてある課題や変更を早期に共有し、対策を行うことができました。

### Docker
まず初日にDockerが上手く動かないということがありました。
しかしDockerの環境構築をしてくれたメンバーの方がオンライン上で画面共有をして解消をしてくれました。
実装する前からDockerを自分の環境でも動かしておくべきだったと感じました。

### API Routes
そして次に、自分は当初の予定ではNext.jsのAPI Routesを中間APIとして使用して、Spotify APIからデータを取得する予定だったのですが、それが上手く実装できませんでした。

そのため三日目の時点で、メンバーの方がそれぞれ担当されているページに直接APIのコードを書かせてもらうことにしました。

### Postman
Spotify for Developersの公式にコードがあり、それらを参考にコードを書いていましたが、Next.jsではどうやって書くべきか、どのようなレスポンスを返すのかが分かりづらかったです。
しかしメンバーの方からの助言でPostmanを使用してAPIにリクエストを送ることで、レスポンス内容が表示され、コード作成の効率化になりました。

### ジャンルの複数選択
プレゼンは他のメンバーの方がすることになったので、自分はプレゼン前日の夜からジャンルを複数選択できるように改良を加えることにしました。
すぐに出来ると思っていたのですが、意外と手間取り、時間がかかってしまいました。
しかし実用的な機能の追加だと思うので、加えてよかったと思います。

![moodtune4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3660432/5df66882-fe84-eb2e-88ad-d6cde36cff83.jpeg)

# 5.結果
選曲された曲を聴いて、気分による曲の振り分けがされているのがすぐに分かりました。

チームメンバー二人のデザインとプレゼンのおかげで、メンターからの評価が最も高いチームに与えられる Best Award を授与しました。

# 6.振り返り
### 良かった点
* 実装が難しいと感じたことは早めに実装を取りやめる、もしくは代替案を採用することができた
* メンバーと密な連絡を取り合うことができた
* ChatGPTの機能は諦めましたが、メンバーそれぞれのアイデアが実装されており、初めに想像していたのよりもずっと良いものができた

### 反省点
* API Routesで実装できなかったこと
* そのために開発初期の時間を無駄にしてしまった点

### まとめ
以前の開発記事で、

>『納期を気にし過ぎていて新しいことに挑戦できていなかった』という反省点を活かして、新しい技術に挑戦しながら納期を守れるようにしたい

と書きましたが、今回の開発は、

新しいことに挑戦した上で、納期を守るため、期間内で実現できない部分は削除するか、代替を用意する。

という判断ができていたように感じます。

これも急な変更に対応してくれたチームメンバーのお二人のおかげです。
二人が使用したフロントエンドの技術の数々は自分にとって大きな学びになりました。

また個人的にも利用したいプロダクトを作成することができたのが嬉しいです。

しかし認証の機能が実装されておらず、普段使いとして使用しづらいところもあります。
なのでこれからアプレンティスシップで作成するオリジナルプロダクトでは、このMoodTuneの実装に諦めていたChatGPTの機能や、認証などを加えた物を作成し、より実用性の高い物を作りたいと思っています。

ここまで読んでいただき、ありがとうございました。