こんにちは。私は現在、株式会社ユーブルが提供するエンジニア実習サービス「アプレンティスシップ」に参加しています。
アプレンティスシップのカリキュラムの中で、チーム開発に参加した経験についてまとめたいと思います。
1. はじめに
1.1. 背景
アプレンティスシップでは、エンジニアになるためのトレーニングの一環として、チームでアプリを開発する課題があります。実際のエンジニアの業務では、チームで開発を進めることが求められます。この課題は、その予行演習として機能します。
1.2. 課題の概要
今回のチーム開発の課題は、自分たちに役立つアプリを作ることでした。
技術的な制約として、これまでの課題で学んだ技術を主に使用して作成する必要がありました。具体的には、HTML/CSS/JavaScript、RubyまたはPHP、MySQLを主に使用します。フレームワークやライブラリは、今回は使用できませんが、今後の課題で学ぶ予定です。
また、ローカルで動作するアプリを作成する必要があります。
1.3. チームについて
私たちのチームはバックエンドの言語としてRubyを選択した4人で構成されていました。チームメンバーは全員が開発経験がゼロでした。
2. 何を作ったのか
2.1. 制作物
れしぴよ!
という名前の、料理のレシピから買い物リストを生成するアプリを作成しました。
作りたいレシピを選択すると、必要な材料のリストが自動的に生成されます。
アプリホーム画面
レシピ選択画面
リスト編集画面
リスト画面
3. 開発の流れ
3.1. 大まかなスケジュール
チーム開発全体の期間は5週間でした。そのうち4週間は他の課題をこなしながら実行しました。残りの1週間はチーム開発に専念し、アプリを作成しました。
3.2. 最初の4週間
他の課題を実行しながらの4週間で下記の工程を実行しました。
- アイデア決め: 自分たちが開発するアプリを決める
- スライド作: 発表用のスライドを作成する
- 要件定義: どんな機能が必要か、要件を定義する
- 設計: 全体像を整理し、機能を実現できるように設計する
- タスク出し: 実装する際にどのような作業が必要か、またその作業がどのくらいの時間で遂行できそうか見積もる。
3.3. 最後の1週間
最後の1週間でアプリの実装とプレゼンの準備をしました。
3.4. 自分の担当
最後の1週間は、私はバックエンドの処理の実装を担当しました。webrickを使用してサーバーを立ち上げ、フロントエンドとの通信を作成しました。また、mysql2を使用してデータベースの操作を実装しました。
4. チーム開発を進めていく上で行き当たった課題
このセクションでは、今回のチーム開発を行っていくうえで遭遇した課題とそれを解決した方法を紹介します。
4.1. 課題
チームでの一番の課題はアプリの目的やコア機能が不明確だったことです。
今回のチーム開発では、アプリのアイデアを自分たちで考え、要件定義から実装までを行う必要がありました。しかし、私たちにはいずれの工程も初めての経験であり、実装に入る前の工程についていい加減に進めてしまいました。そのため最終工程である実装の段階に至っても、アイデアの輪郭やアプリの要件があいまいであり苦労しました。
4.1. 解決方法
以上の課題を解決した方法は、実装の優先順位について合意をとることでした。
実装の優先順位について話し合うことによりどの機能が必要なのか、を明確にすることができました。そして、コアとなる機能が何なのかを明確にすることができました。
5. 個人の振り返り
5.1. できた事
- チームでの話し合いの中で意見をしっかりと主張できたこと。チームの一員として話し合いに参加することは何よりも重要だと思います。なので私はしっかりと意見を出し参加することを意識してこのプロジェクトに参加していました。今回のチーム開発では、GitHubを使った開発の流れやプルリクに関するルールの取り決めなどしっかりと意見を出すことができました。
- チームでの開発をスムーズに進めるための準備をすること。具体的にはチームで使うGitHubの Organization の作成や会議で使用した、Google スライドやスプレッドシートの用意、最初のテーブル設計などです。
5.2. できなかった事
- うまく仕事を分担すること。バックエンドは私も含めて2人で担当したのですが、もう少しうまく仕事を分担し、協力して開発できたのではないかと考えています。
- いいアイデアを出すこと。正直一番最初のアイデアを出す段階において自分は、役立たずだったなと今思い返しても思ってしまいます。この点については特にチームメンバーに非常に助けられました。
6. チームとしての振り返り
5.1. できた事
- お互い良く助け合うことができた。今回のチーム開発ではチームメンバーがアラートを上げることがありました。そしたらすぐにチームメンバーが助けに入って、無事完成にまでこもっていくことができました。アラートが挙げやすい雰囲気を作ることやすぐにフォローに入れる体制を作っていたことは今回のチーム開発において非常に良かった点だと思います。
5.2 できなかった事
- 解決したかった課題が途中でぶれてしまったこと。私たちは最初、買い忘れを防止するアプリを作ろうとしていました。ですが、追加の機能を考えたり、要件定義やその他の工程をしている内に何を解決するアプリを作っているのかが曖昧になってしまいました。なので追加機能を考えるのではなく、課題をより良く解決するためにはどうすれば良いのかを考えるべきでした。
7. この開発で得た学び
7.1. 学び
今回の開発で得た学びは、以下の2つです。
- プロジェクトの目的を明確にし、チームで合意をとる。
- イメージを共有するために目に見える具体例を提示する。
プロジェクトを進めていくと次第に何を目的としていたのかが曖昧になってしまったりします。それを防ぐためにコンセプトをしっかりと定めること非常に重要だと思いました。
また、チームでの共通した理解を形成するために既存のアプリと自分たちが作ろうとしているアプリを比較したり、することが大切だと思いました。
7.2. これから
今回のチーム開発はアプリの構想から実装までを実施した初めての経験になりました。良いところも悪いところも色々ありました。ですが、非常に価値のある経験になったのでこの学びを生かしていきたいと思います。