🔥

【チーム開発】Apprenticeにてチーム開発を行なった話 #2

2024/04/09に公開

はじめに

僕は2023年11月から「アプレンティス」というエンジニア学習プログラムに参加しています。
そのプログラムの中で、2回目のチーム開発がありました。
この記事では、チーム開発での開発工程、アプリケーションの紹介、良かった点、反省点など学びの整理をしていきます。

課題定義

テーマは、「ワクワクするものを開発せよ」 もしくは 「書きたくなる日報システム開発せよ」 というものでした。
そこで僕たちチームは、「日報システム」を作成することにしました。
理由としては、Apprenticeでは毎日日報をDiscordへ投稿する決まりがあります。しかし、現在のシステムだと投稿が面倒くさい、投稿に意義を見いだせない等の理由で投稿をしないケースが散見されます。
このプロジェクトは、上記課題を解決するために、日報を投稿しやすくするための仕組みや日報の投稿に意義を見出せるような仕組みを作ることが目標です。

対策

  • 日報のテンプレート化
    現状、日報をDiscordに提出する際には、「学習時間」「学習内容」「振り返り」の3つの決まったものがあります。

以下例

【学習時間】
xx時間
【学習内容】
- xxxxxxx
- xxxxxxx
- xxxxxxx
【振り返り】
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

ですが、毎日これをタイピングしたり、コピペして整形するのが面倒だと感じることがあります。
なので、上記の部分をフォーム化し内容を書くだけで良いようにテンプレート化することで、面倒さを省くことができると考えました。

  • タスク管理機能
    1週間のはじめに今週は、どのようなタスクをやっていくのかをTodoとして登録し、いつまでに終わらせなければいけないのかをガントチャート形式で表示することで、日報の振り返りを行う際に自分が計画したものに対してどのくらい進捗しているのかを反省できるため、意義を見出せるのではないかと考えました。

  • 誰が投稿していないのかが表示される
    現状は、Discordに10名以上の方が日報を投稿されるため誰が投稿済で誰が未投稿なのかわからない状態です。そのため、未投稿の人を可視化し、それをApprentice生全員に見せられるようにすることで、強制力という意味で日報投稿に対しての意識が上るのではないかと考えました。

  • 過去の投稿を一覧で振り返られるようにする
    Discordに投稿しているものは、一応Discordの検索を利用することで自身が過去に投稿した日報を調べることはできますが、これもこのひと手間が面倒だと思ってしまうことがあったため、過去の投稿を振り返られるように一覧化することにしました。

インセプションデッキ

インセプションデッキについて話し合うことで、開発のイメージを具体化し、優先順位や認識の共有を図りました。

詳しい内容

私たちはなぜ、ここにいるのか?

エンジニア教育実習のアプレンティスでは、毎日日報をDiscordへ投稿する決まりがあります。しかし、現在のシステムだと投稿が面倒くさい、投稿の意義を見いだせない等の理由で投稿をしないケースが散見されます。
このプロジェクトは、上記課題を解決するために、日報を投稿しやすくするための仕組みや日報の投稿に意義を見出せるような仕組みを作ることが目標です。

エレベーターピッチ

このWebサービスは、アプレンティス生に向けたもので、アプレンティス生が日報を毎日忘れずに、楽しく、責任感を持って投稿できるようにするものです。(日報を毎日提出するためのアプレンティス生向けのプロジェクト。)
日報を積み上げていくことで、今までの学習時間の可視化、投稿用のテンプレートを用いることで日報を書くときの面倒を省き、簡単に過去に投稿した振り返りの内容を見返すことができます。
このツールを使用することで、日毎の計画や報告に悩まされることはなくなるでしょう。

パッケージデザイン

モダンでシンプルなデザイン。
Discordの姉妹アプリだと一目でわかるようなデザイン。

やらないことリスト

(やること)
Discordへの投稿機能
Xへの投稿機能
・文字数制限があるのでvalidateをかける
リマインド機能(メールでの通知)
日報機能
・テンプレート機能(テンプレート保存・編集・削除・呼び出し)
ストップウォッチ機能
・音声入力機能
・計測している人が画面に表示される機能
ガントチャートなどのタスク管理機能
・タスクにかかる時間
誰が日報を投稿していないかを表示する機能
認証機能(サインアップ・ログイン・ログアウト)
・プロフィール機能(時間があれば実装)
 ・Discordとの連携でアイコンを取得するなど
日報の振り返り機能(見やすい、簡単に)
・カレンダーで日付選択をし、その日に投稿した日報を呼び出す

(やらないこと)
投稿ボーナス機能の実装
ログボ等のご褒美システム

(後で決めること)
他の人の学習状況閲覧機能
設定機能
・ライトモード・ダークモードの切り替え
ChatGPTなどで要約して自動修正してもらう

ご近所さんを探せ

使用する人
アプレンティス生
メンター

頼れる人
チームメンバーの3人
メンター
ChatGPT

技術的な解決策を描く

フロントエンド
HTML/CSS/JavaScript/React/Next.js

バックエンド
PHP/Laravel

データベース
MySQL

ツール
Docker
デザインツール(Figma, Adobeなど)

API(ライブラリ)
Discord API

夜も眠れない問題

実装にかけられる時間が1週間と短い
→解決案:要件定義と設計を早めに終わらせて、前倒しで実装に取り掛かる

技術的な不安
→解決案:技術的にも貢献できるよう努力するが、技術以外の面で最大限貢献する(デザイン、スライド作成、設計など)

期間を見極める

(要件定義、設計)
2/7(水)~3/24(日)
※できれば3/18(月)までに終わらせたい
時間:全体で5~15時間

(実装)
3/25(月)~3/31(日) ~ PM12:00
※できれば3/18(月)から始めたい
時間:1人あたり45~150時間

トレードオフスライダー

優先順位
機能を全部揃える(スコープ遵守) ★★★★★
予算内に収める(予算遵守)
期日を死守する(納期遵守) ★★★★★
バグを出さない(品質遵守) ★★★

何がどれだけ必要か

(スキル)
フロントエンド
HTML/CSS/JavaScript/React/Next.js

バックエンド
PHP/Laravel

データベース
MySQL

ツール
Docker
デザインツール(Figma, Adobeなど)

API(ライブラリ)
Discord API

(期間)
(要件定義、設計)
2/7(水)~3/24(日)
※できれば3/18(月)までに終わらせたい
(実装)
3/25(月)~3/31(日) ~ PM12:00
※できれば3/18(月)から始めたい

(コスト)
もしかしたらAPIの料金がかかるかもしれない

設計

技術アーキテクチャ

データベース設計

ワイヤーフレーム

https://www.figma.com/file/ajlN2eIuHuFzYutLk6ksti/デザインカンプ?type=design&node-id=0-1&mode=design&t=pT5sGt4ylY83Ey4M-0

ロゴ

タスクばらし

環境構築
環境構築は僕が担当させていただき、今回はDockerを使用して開発を進めていく方針でした。
Dockerでの環境構築は2回目になりますが、かなり苦労しました。周りに聞ける方もいなかったので、どうして動かないのか何日間も格闘しました。
最終的には、Laravel sailと自分で用意したNext.jsの環境を合わせてSPAで開発していくことになり、
なんとか実装期間が始まる前にチームメンバーの皆さんの方でも動くことが確認できるものが共有できたのは良かったです。
また、チームメンバーの皆さんはDocker自体を使用したことがなかったのでそれを考慮して、README.mdに使用するコマンドの説明についても載せることでメンバーの皆さんが構築で時間をかけることのないようにしておきました。

スライド作成
実装期間の最終日に発表会があるため、あらかじめプレゼンをする人を決めました。
今回は、チームメンバーの方がプレゼンをしていただくことになり、その方に発表に関しては一任する形になりました。チームメンバーの方には、本当に感謝です!!

デイリポ+ 機能紹介

今回作成した デイリポ+ の機能紹介をします。

認証機能
サインアップとログインを行うことができます。

未投稿ユーザー一覧とタスク時間計測
誰が投稿を行なっていないのかとタスクの時間を計測できます。

タスク管理機能
タスクを登録しガントチャートで進捗などを可視化しています。

日報投稿機能
日報の書く内容をフォーム化し、データベースへの保存とDiscordへの投稿ができます。

タスク一覧
過去に投稿した日報を一覧化しみることができます。

良かった点

  • チームメンバー同士でどうすれば良いものになるなどをしっかりコミュニケーションをとって伝え合っていたこと。
  • Notion でチーム開発の情報整理・共有をしたことで、情報のやりとりや振り返りがスムーズになった。
  • 課題を明確にし、課題に沿ったコンセプト通りのプロダクトを作成することができており、メンバー全員が課題解決に対して意識して最低限必要なものの作成に集中して取り組めていたこと。

反省点

  • プロジェクトに機能を盛り込みすぎたことがあり、全ての機能を実装することができなかった。期間内に実装できるようにあらかじめ機能を必要なものだけに削ぎ落とすことが必要であったこと。
  • 仕事などの業務が重なり、実装時は多くの時間をチーム開発にかけることができなかった。
  • 開発期間までに実装方法などを調べきれていなかったため、事前に調べておくともっと効率よく開発できた。

さいごに

今回は2回目のチーム開発ということもあり、流れ自体は1回目の時よりも掴めていたので良かったが、実際の設計工程での内容をもっと詰めることでもう少しいいものを作成することができたのではないかと感じました。
今回失敗してしまったことを自分のこれからのものにも活かせるように改善を行っていきたいです。
チームメンバーの皆さんには感謝しかありません。ありがとうございました。

Discussion