enPiT2022_個人振り返り

# enPiT振り返り
１年を通じて参加してきたenPiT。今回はenPiT内で作成したプロダクトの紹介や、enPiT内の活動の振り返りを行う。


## enPiTとは

筑波大のenPiTに関するページ （https://enpit.coins.tsukuba.ac.jp/） によると、enPiTは次のように書かれている。

>プロジェクト型学習(Project Based Learning, PBL)を基軸に、学生がチームを組んで自律的に自分達のテーマの具現化を目指します。チームでのプロダクト開発を通じて、チーム運営や、ユーザが本当に必要としているものを掘り下げる技術を体験します。

具体的には、チームで開発するプロダクトを学生たちで考え、アジャイルという手法で開発を行なっていく活動である。
また、年間のスケジュールは次のように書かれている。

>「ユーザへの新たな価値提案」を目標に、4月から7月にかけて基礎知識学習を行い、8月にPBL基礎として集中演習に参加します。その後、10月から12月にかけて、チームによる発展学習（PBL開発）を通じて上記目標に沿ったプロダクトを完成させます。完成したプロダクトと、1年の開発経験を12月の成果報告会にて報告します。

今年度は、4月から6月末まで自己学習を行い、7月末に夏合宿を行った。また秋学期は10月から1月の上旬まで開発を行い、1月末の振り返りを以て終了となる。（私の場合、7月末の夏合宿はコロナのせいでラスト1日しか参加できませんでした...コロナ許すまじ。）


## チームについて

私が所属していた注文の多い料理店(bチーム)は、以下の5人で構成される。
* Nakaya(プロダクトオーナー)
* orii(スクラムマスター)
* ギルド
* くま
* なおと

我々のチームは、POのNakayaくんを中心にプロダクトの方向性や開発の内容を決め、ScMのoriiくんをメインに開発内容の詳細化やスプリントの開発内容を決定した。プロダクトの作成では、Nakayaくんやギルドくんを中心に開発を進めていき、コーディングやデプロイを行なっていった。そして、実際にコーディングをするときはくまくんや自分を中心に行っていた。


## 開発したプロダクト

我々のチームは、料理検索サイトの[Cookりさん](https://m7h6jo.deta.dev/)を開発した。本サービスはスマホからの利用を想定しており、以下のQRコードを読み込むことで利用できる。
![QR.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082393/9f9f4ffb-42f9-0100-4ede-f27fed8fc5cf.png)
最初に、本サービスの使い方を紹介する。
上記のリンクからサイトにアクセスすると、以下のような画面が表示される。
![Cookりさん｜トップページ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082393/eb8f5962-31ac-8137-bc6d-9396ffef758a.png)
最初に、冷蔵庫にある食材を選択し、画面の下にある検索ボタンをクリックする。今回は、冷蔵庫に「鶏もも肉」と「ピーマン」があり、これらを消費するレシピを検索する、という場面を想定する。
![IMG_5186.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082393/be9dee0e-8987-9820-1842-b7400e656c17.png)
鶏もも肉とピーマンを使ったレシピを検索するため、これらの食材を入力し検索すると、以下の検索結果にページが遷移する。
![IMG_5187.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082393/8865e447-8077-e07d-f1f1-2043a3e8814c.png)
![IMG_5188.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082393/5b2f2298-df34-866f-95c9-bd814691f447.png)

遷移したページ先にはいろんなレシピが表示され、各レシピの食材タグは全てボタンになっている。例えば、上の例で「塩」と「こしょう」を省きたい場合、塩タグとこしょうタグの右の赤いーボタンを押すことで、「省きたい食材」ボックスに塩とこしょうが追加される。そして、その状態で検索ボタンをクリックすると、今度はレシピに「塩」と「こしょう」が入っているレシピを排除することができる。

![IMG_5189.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082393/ed004a97-f1e0-d77a-99e9-ca6bfe54b96b.png)
![IMG_5190.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082393/bb90b98e-da0f-8131-9cb4-0a745692a29c.png)

次に、本サービスの工夫点を紹介する。工夫点としてまず、メイン画面で選べる食材を厳選した点が挙げられる。メイン画面で選べる食材を決める際には、「１人暮らしの大学生が使いがちな食材」かつ「量が多く余らせがちな食材」かつ「サイトに載ってるレシピで使われがちな食材」という観点から選んだ。次に、検索結果画面での操作も挙げられる。検索結果画面では、同じ食材を2回クリックすると、その食材を検索ボックスから削除することができる。また、検索ボタンを押すために上部へスクロールしなくていいよう、検索タブを画面上部に固定したところも工夫点に挙げられる。その上、検索した食材を全て含むレシピとどれかを含むレシピを検索できるよう、「すべての食材を使う」ボタンと「一部の食材を使う」ボタンを置いたことも工夫点である。


## 秋学期中のプロダクト・チームの軌跡

### プロダクトの決定（PBI#0）

秋学期で作成するプロダクトを考えていくにあたり、カスタマージャーニーマップやジョブストーリー、リーンキャンバスを作成した。そして、エレベーターピッチを練り、プロダクトの方向性を確定させていった。
![miro_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082393/82767438-15ea-316d-7ada-20fda478c461.png)
![スクリーンショット 2023-01-03 18.40.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3082393/bbaa57e2-51f6-4a1e-c1c4-0b12361b3a5d.png)


### 検索の実装（PBI#1〜#6）

レシピを検索できるサービスを目指して開発した。開発を行うにあたり、開発言語はPython、フレームワークはFastAPI、デプロイ環境はDetaを使用した。最初にHTMLの作成やレシピを作成するデータベースの構築、レシピの格納などを行なった。それから、タグからのレシピの絞り込みを実現させ、最終的には1つの食材からレシピが検索できるようになった。

### プロダクトの改良（PBI#7〜）

プロダクトの改良を行なっていった。この辺りから、時間の管理やスプリントプランニング・PBLリファインメントの有効活用を意識して開発を行っていたため、前半よりも中身の濃いスプリントになっていったと感じた。開発の内容としては、複数キーワードでの検索やnot検索、タグ検索の実装を行い、またOR検索の実現も行った。また、後半辺りからプロダクトがより形になり、色々な方からさまざまなレビューをいただくようになった。そうした中で、レビューの取捨選択を行い、意見を取り入れるところは取り入れるというスタンスで開発を進められた点は良かったと考える。


## 期間を通した個人的ふりかえり（学んだこと、次にどう活かすか）

enPiTに参加するまで、1人でwebサイトの作成を行ったことはあったが、「チームで開発を行う」というのは初めてだった。そのため、どう立ち回ったり開発を進めていけばいいのかがわからず大変だったが、その分やりがいのある活動だった。また、アプリ開発の流れや、チームで開発を行うこととは何かを知ることもできて、非常にいい経験になった。一方で、私は他のチームメイトに比べ、あまり積極的に発言しなかった。他のチームメイトのアイデアや考え方が素晴らしく、自分の発言に対して自信を持てなかったためである。しかしenPiTの活動を通じ、チームで開発を行うときは積極的に相手の意見を聞き、積極的に自分の意見を述べるべきだと考えるようになった。そのため、今後チームで開発を行う際には、このことを念頭に置いて開発に携わっていきたいと考えた。こうした学びが得られた点も、enPiTに参加した大きなメリットである。
社会に出てチーム開発を行う際には、今回獲得した経験や知識を最大限に活かし、チームに貢献できたらと考える。