初めてのチーム開発【未経験】

## はじめに
初学者が初めてチーム開発を行った記事になります。
チーム全員が未経験の状態で、数多くの困難がありましたがなんと全チーム+メンターの方の投票の結果 **「Best Award」** を獲得することができました!


## 成果物の紹介
### 概要
私のチームは「Health Vision」という1週間に行った運動、消費カロリーを可視化し、運動のモチベーションを継続させるアプリの開発を行いました。
### 背景・目的
チーム内で何を作るか話し合った結果、全員が社会人として働きながら学習も行っており、多忙な生活の中で運動不足になりがちだという共通の課題が浮き彫りになりました。
現代人の運動不足は年々深刻化しており、健康を損なうことで仕事や学習への影響も避けられません。そこで、**健康こそが最も重要な財産** であると考え、今回のプロジェクトとして「Health Vision」を開発することに決定しました。
### 使用した技術ツール
フロントエンド　HTML CSS JavaScript
バックエンド Ruby (Webrick erb mysql2)
データベース MySQL
バージョン管理 Git
タスク管理・連絡 Discode
実装期間　1週間

:::note warn
 今回フレームワークの使用は禁止でした。
:::


## 機能
「Health Vision」は大きく「ホーム画面」「実績入力」「運動履歴」の3つの画面から構成されています。

### ホーム画面
ホーム画面には現在の運動の達成状況、消費カロリー、運動の継続日数、コメント、バッジなど
記録を可視化し、運動のモチベーションを保つためにサポートします。
![スクリーンショット 2024-12-09 21.03.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3842150/16926baa-2ece-6fa0-bf7a-f44dec726282.png)
後述の実績入力に応じて1週間の目標消費カロリー2000kalに対してどれくらいカロリーを消費したのかグラフで表示し継続日数、バッジなどが変化します。
![スクリーンショット 2024-12-09 21.04.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3842150/85fb4174-cab0-f441-52f7-5436d1156612.png)
バッジ機能は運動継続日数に応じてバッジが変化します。
ゲームをしているときに獲得できる実績解除のトロフィーから着想を得ました。


### 実績入力
実績入力はユーザが運動した回数(腕立て伏せやランニングの時間など)を入力しホーム画面へ実績を反映させます。
![スクリーンショット 2024-12-09 21.03.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3842150/266e014a-bd8d-b571-5a97-37db7cb56738.png)

### 運動履歴
運動履歴はその名の通り入力した運動日、運動名、回数が表示されます。
![スクリーンショット 2024-12-09 21.35.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3842150/f6408f76-645d-747a-1884-84337b71ce19.png)

## チーム開発で自分が考えたこと・行動したこと
### アイデア出し・要件定義
アイデア出しでは、運動量を可視化できるアプリケーションという方向性を決定し、どのような機能を実装するか考えました。
特に意識したのは、メンバーとのコミュニケーションを増やすことです。気軽に意見を言い合える様な雰囲気づくりを心掛け、チームの活発的に発言できる様努めました。
また、自分の考えに対してメンバーからのフィードバックを積極的に受け入れ、アイデアをされにブラッシュアップするように努めました。

要件定義ではユーザがモチベーションを維持する様にはやはり、眼に見える成果が重要と考え、初期段階でグラフや消費カロリー、バッジ機能を導入しようと決めました。
ここがスムーズにできたのは意見を言いやすい、雰囲気づくりができたおかげだと感じました。

<details><summary>インセプションデッキは下記の様になりました。</summary>

・消費カロリーの表示、グラフ化

・運動継続日数

・運動継続日に応じて変化するバッジ

・コメント機能

・運動履歴一覧

</details>

:::note warn
### ここでの反省点
DB設計は早い段階で完了していたものの、フロントエンド、バックエンド、DB間のデータ受け渡しやサーバ構築方法がわからず、進展が遅れました。そのため、初期段階で使用するライブラリや実装方法を調べておくべきだったと感じています。
フロントエンド部分についても、デザインや画面遷移図、またタスク管理(ガントチャートなど)であれば技術がなくても対応できる部分でした。そのため、時間の見積もりや作業の進め方に課題があったと感じています。
:::

### 役割分担・タスクばらし
メンバーが3人なので、フロントエンド、バックエンド、DB設計+追加機能のように役割分担を構想しました。
自分は最初にDB設計を担当すべきだと考え、フロントエンドやバックエンドの実装が進められるようにしました。
インセプションデッキから必要な情報を抽出し、それを元に設計を考えた後、逐一報告して意見をもらいながら進めました。DB設計を丁寧に行ったおかげで、DB関連のトラブルが発生することなくスムーズに進行できたと感じています。

:::note warn
### ここでの反省点
役割分担が明確になっていなかったことに加え、メンバー1人が離脱するというイレギュラーな事態もあり、もう1人のメンバーに負担が偏ってしまったことを非常に申し訳なく感じています。
役割分担ができていなかっただけでなく、チームマネジメント能力や技術力が不足していたため、バックエンド側のサポートが十分にできなかったことがとても悔しいです。
:::

### 実装
フロントエンドとコア機能が実装できた後、追加機能に着手しました。追加機能は運動履歴の一覧を表示する部分でしたが、SQL文の誤りや取得した値がnilになっているなど、多くのエラーが発生しました。
エラーが発生した場合、putsで表示して確認する力技でデバック、エラー文を調べ発生した箇所に関連するコードを確認しながら、愚直にエラーを解決していきました。
しかし、振り返ってみると、案外単純な間違いだったり、配列やハッシュの使い方に対する理解不足や、デバッグツールをうまく活用できなかったことが、非効率的な原因になっていたと感じています。

## 全体を通してよかったこと・反省点

### よかったこと
・自分が担当したタスク逐一報告しメンバーから意見をもらい、修正などができたため進めやすかった。
・積極的に発言し、相談しやすい雰囲気を作り問題を早期に共有し解決に繋げた。
・必要最低限のコア機能を優先し、最悪実装しない部分を事前に決めることで、リリースできる状態に持って行けた
・ユーザが入力した数値に基づいてバッジやグラフなどが変化する機能が好評でした
・長時間悩んだエラーを解決したこともスキルアップに繋がり、反省点としても成長の一環として捉えた。

### 反省点
・役割分担の不明確さにより、メンバーの負担が偏った
・バックエンドのスキルに不足があり、ライブラリやデバッグツールの使い方について事前にもっと学んでおくべきだった
・Gitフローを正しく適用しなかったため次回はGitフローに従って進める必要があると感じた。
・過剰にコンフリクトを恐れ、コードの改変ができなかった。またコードレビューが実施できていなかった
・既存サービスとの差別化を重要視できていなかった
・モバイルユーザに対するデザインではない為、ユーザ目線での開発が必要
・CRUD操作部分に不完全なところがあり、実装できなかった機能があった。

## まとめ
今回のチーム開発では、初めての経験ながらもチーム全員が協力し、課題に対して真摯に取り組むことで「Best Award」を獲得することができました。多くの困難に直面しましたが、それ以上に多くの学びと成長が得られたと感じています。

特に、チーム内でのコミュニケーションの重要性、タスク管理の必要性、役割分担の明確化など、開発を進める上で欠かせないスキルを身につけることができました。また、自分の技術力不足やプロジェクト管理能力の課題も明確になり、今後の開発への大きな糧となりました。

次回のチーム開発では、今回の反省点を活かし、より計画的かつスムーズな開発を目指していきたいと思います。初心者ながらも成果を出せたこの経験を大切にし、これからも成長し続けるエンジニアを目指します。最後まで読んでいただき、ありがとうございました。