enPiT個人レポート

筑波大学のenPiTという授業でチーム開発をしたときの個人レポートです。
開発したプロダクトや学んだことなどについて書いていこうと思います。

## はじめに
今回2024年度のenPiTに参加し、6人チームでWebアプリ（最終的にはAndroid,IOSアプリにする予定)を開発しました。

## 開発したプロダクト
私たちが開発したアプリ「SuStudy,」です。
![スクリーンショット 2025-02-04 215650.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4002237/e9603f45-50dd-de13-b4af-2605b0cf5cb0.png)

このアプリは学習アプリであり
・受動的な勉強
・能動的な勉強
・継続的な勉強
をサポートしています。

以下で開発したアプリを体験することができます。
・https://sustudy.netlify.app/

## プロダクトのエレベーターピッチ
<dl>
<dt>課題</dt>
<dd>・勉強するときに後回し癖がある</dd>
<dd>・継続して勉強できない</dd>
<dd>・勉強のやる気が出ない</dd>
<dt>解決策</dt>
<dd>・通知による受動的な勉強</dd>
<dd>・日々の勉強の記録と達成度</dd>
<dd>・ランキングやSNSにより楽しく勉強</dd>
</dl>

上記の課題と解決策を踏まえ
習慣的に勉強したい後回し癖がある中高大学生向けのコミュニティ型勉強習慣化アプリSuStudy,を作成しました。
このアプリでは受動的に簡単な問題を解くことで能動性を促し、後回し癖を改善することができます。

## プロダクトの使い方・できること
#### ・アプリの開始
アプリを開始し、ログインもしくはアカウントを作成するとログイン問題（やらないとアプリの機能を利用できない問題）を開始することができます。問題は自分が選択したジャンル、難易度の問題です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4002237/a77ce755-e73d-bad4-e1ac-16bc5de87cc6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4002237/0abaf7da-d7b9-e0da-2d7d-aa3c07502776.png)

#### ・ホーム画面
ログイン問題を解くとホーム画面に飛びます。ホームからはSNSを閲覧・投稿できたり、ランキングの閲覧、検索、勉強の記録、勉強などに飛ぶことができます。
![スクリーンショット 2025-02-06 041855.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4002237/606f3d94-f691-4a1e-a6ee-16583205997d.png)


#### ・勉強の開始
ホーム画面の右下のフローティングボタンを押すとアプリ内で用意されている問題を解くことができます。
問題は英語の単語問題だけでなく短文の問題などもあります。
![スクリーンショット 2025-02-06 042023.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4002237/d48fbb12-f693-80f6-a08f-3044479de759.png)

#### ・ランキング
ホーム画面下のランキングを押すとランキングを見ることができます。ランキングは解いた問題数をもとに計算され、その日ログインしているユーザーの全体のランキング、フォロー中のユーザーのランキング、参加しているグループのランキングを確認することができます。
![Image (2).jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4002237/af516f3b-e2d9-9b62-8d1e-04dca5ed4ec4.jpeg)

#### ・日々の記録
ホーム画面右下のデータを押すとこれまでの学習記録を見ることができます。
![スクリーンショット 2025-02-06 044923.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4002237/be64adbc-0fdf-e240-e60a-3921f0c6bf9d.png)


以上の機能を中心として受動的な勉強、能動的な勉強、継続的な勉強のサポートをしています。

## プロダクトの軌跡
ここではプロダクトを作成するに当たって生じた問題点とその解決について書きます。

#### ・どうすれば実際に使われるか
SuStudy,を開発するに当たって問題となったこととして、どうすればこれから作るプロダクトで顧客の要件を満たすことができる（実際に利用される）のだろうかということでした。
これを解決するために実際に存在するプロダクトから発想を借りてこようという考えになりました。そのためにチームで各自、実際に習慣化させる方法や継続利用させる方法などについて調べ、授業に話し合いの時間を設けて意見交換をしました。

#### ・開発の仕方がこのままで良いのか
自分たちのプロダクトの開発の仕方がこのままで良いのかという問題がありました。というのもチームでの開発の仕方としてあまりアジャイル開発ぽくないということがありました。これ自体はあまり問題ではないが、授業がアジャイル開発について学ぶ授業であるため本当にこのままでいいのかとメンターの方々にも言われました。一回の授業中には開発の時間とレビューの時間、振り返りの時間があります。自分たちの作り方は、時間中に一つの機能を作りそれをレビューで評価してもらうというものでした。プロダクト全体を触ってもらうことができるのがかなり後半になってしまうため、プロダクト全体のレビューをしてもらい改良していくというアジャイル開発とは少しずれていました。
その問題について一度チームで授業の時間まるまる話し合う時間を作りました。その話し合いの結果、最終的にはこのまま進むという方向性になりました。またこの話し合いの結果、チームでの方向性がしっかりと定まり、それまであった開発についての不安などがなくなりました。

## チームの軌跡
ここではチーム開発において生じた問題点とその解決について書きます。

まずTeam AMFについて示します。これは各スプリントごとに生じた問題点やその解決策などの振り返りをまとめた物です。

![スクリーンショット 2025-02-08 124417.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4002237/a1b60da4-0a71-620f-8776-5426b9bc78bc.png)

これをもとにチームの問題とその解決について書いていきます。

#### ・チーム全員が初めての言語
今回プロダクトを開発するに当たって最終的にはアンドロイドとIOSのアプリを開発することを目指していたためFlutterでアプリを開発しようという方針になりました。チームのみんなFlutterやDartを扱うのが初めてのため最初は開発環境を構築するのにも手こずりました。しかし参考になった資料や学んだことなどをディスコードで共有したり、教え合ったりすることにより問題に当たった時も乗り越えていくことができました。

#### ・レビューの準備が間に合わない
一回の授業（一回のスプリント）には開発の時間とその後のレビューの時間があります。最初の方は開発の時間が長くなってしまったり、発表したいところまで間に合わなかったりしため、まともなレビューでの発表ができませんでした。その問題を解決するためにまずPBI（その日開発すべき内容）を細分化しました。そうすることにより、レビューまでに何かしらの成果を残すことができ、発表できるようにしました。またレビューの15分前からは開発ではなくレビューの準備をすることにすることによってしっかりとした発表ができ、より良いフィードバックをもらうことができました。

#### ・チーム内の学習状況の差
チーム開発では最初は6人チーム（後半5人チーム）だったため、2人ずつのペアに分けて開発をしていくことになりました。そこで問題になってきたのが、自分とは別のペアが何をやっているのか分からないということでした。この問題を解決するために毎回の授業で、ペアの一人をローテーションさせることによって知識を共有していきました。その結果最終的には、チームのみんながコードをある程度理解できるようになりました。

## チームでの役割・自分の役割
ここではチーム開発において各メンバーが何をしたのか、また自分が何をしたのかについて書いていこうと思います。
#### ・メンバー構成と役回り
自分たちのチームは6人チームでした。後半授業に出ることができなくなった人が1人いたため、後半は5人で開発を進めていきました。
チームの中でプロダクトの案を提案した人はenPiTの授業が終わった後もプロダクトを改良していくつもりで、その人が中心となり開発を進めていきました。今回の開発はみんなが知識ゼロから始めたため、チームの全員が平等に開発に関わっていきました。またしっかりとした開発を経験している人がいなかったため、フロントエンドとバックエンドに分けて開発するのではなく各機能ごとに開発を進めていきました。

#### ・自身の役割
自分が作った機能について書きます。自分は主にログイン関連の機能とランキング関連の機能を作成しました。ログイン関連の機能では簡単なアカウント作成機能からはじまり、ログインの判別機能、ログインした際のデータベースへのログイン情報の登録、また連続ログインや最高連続ログインなどを計算し記録する機能を作成しました。
ランキング関連の機能では、その日解いた問題数を元にログインしている全ユーザーのランキングを計算し表示する機能を作成しました。またフォロー中のなどでランキングの表示範囲を絞る機能を実装しました。
またその他にも、問題の作成にも少し関わり、英語のイディオムの問題の作成、問題表示画面の作成、解いた問題のデータの保存などを実装しました。
またプレゼンの資料作成もやり、普段あまりプレゼンの資料を作成したことがありませんでしたがそのつくり方を学ぶことができました。


## 振り返り
ここではチーム開発を通して学んだことや振り返りについて書いていきたいと思います。

#### ・チーム開発は大変
今回のチーム開発を通して、チーム開発の大変さについて学ぶことができました。自分は今回のenPiTがチーム開発初めてだったためチーム開発のやり方や、どのようなことに気をつけるべきなのか知りませんでした。今回のチーム開発で一番大切だと思ったことはしっかりと話し合いをすることだと思いました。今回の開発では一人で開発するのとは違い、自分が納得いかないまま進んでいくことも時々ありました。そんなとき、話し合いをし自分が納得するまで話し合いをし、方針を決めることが大切だと思いました。

#### ・残業は必要？
自分たちのチームはプロダクトの規模が大きく、どうしても授業の時間だけでは終わりませんでした。そのため時間が空いているときにプロダクトの開発を進めることなどもありました。しかしチームの中には残業をやりたくない人もいます。そんな中誰かが残業をやっていると、自分もやらなくちゃいけないのかなという気持ちになってしまいます。そういった状況を回避するためにプロダクトを作成する前の段階で、現実的に作成できる大きさのプロダクトなのか、またチームの全員が残業をやってもいいと思っているのか話し合うことが重要だと思いました。

#### ・学んだこと
少し前でも述べたように自分たちのチームはアジャイルとは少しずれた方法で開発をしてきました。そのため本当にこのままの開発の仕方で良いのか話し合うことが多々ありました。その結果最終的にはアジャイル開発についてより考えることができ、アジャイル開発をより理解することができたと思います。
また開発ではGitの使い方やデータベースの使い方を学ぶことができました。

## 感想
enPiTを通してチーム開発一連の流れを学ぶことができて良かったです。自分はこれまでまともな開発経験が無かったため、とってもためになる授業でした。個人開発との違いやチーム開発の大変さなど、たくさんの学びがありました。
今後チーム開発をやることがあったら今回学んだことを活かし開発をしていきたいです。
最後に、秋学期かなりの間enPiTがあったけど、最後まで楽しくチーム開発をすることができたので良かったです。