1. はじめに
この度、アプレンティスの課題として、第一回チーム開発を行いました。その説明・雑感などをまとめます。
2. 自己紹介
弁護士を目指して法学部に進学、大学を休学して独学で司法試験の合格を目指すも挫折。人生に悩んでいたところ、以前からプログラミングに興味があったことを思い出し、2024年1月29日から学習開始。4月からアプレンティス5期生。出身は北海道。
3. 仕様技術
・HTML/CSS
・JavaScript
・PHP
・MySQL
・サーバーはPHPビルトインウェブサーバーを使用
・Git/GitHub
・フレームワークの使用は禁止
4. プロダクト説明
4-1. 開発の背景
今回私たちのチームが開発したものは日報管理アプリです。「自分たちの役に立つものを開発せよ」というテーマをもとに考えると、アプレンティスの毎日の課題として投稿している日報を有効活用できていないのではないかという点に思い至り、楽に振り返りができるようにするためのアプリを開発することになりました。
4-2. 実際の画面
4-3. 機能
日報表示ページ
登録した日報をカレンダー形式で表示します。中長期的な目標を書き留めておく欄と、月および週ごとの合計学習時間を表示する欄を目立つ箇所に配置しました。カレンダーの日付部分には、その日に勉強したことの概要をタグとして表示しています。さらに、登録画面で入力した自己評価の数字に基づいて各マスの背景色が変わる仕様にすることで、自分がどの程度頑張ったのかを一目でわかるようにしています。各マスをクリックすると表示されるモーダルウィンドウの中の編集ボタンを押すと、登録画面に遷移します。
登録ページ
登録画面では、何も入力していない日付には当然空欄が表示され、編集済みの日付には入力済みの情報が表示されるようになっています。入力後に登録ボタンを押すと日報が保存され、表示ページに遷移します。CRUD機能のCUDは同じ操作をすることになります。タグを追加、削除する機能も実装しました。
4-4. 追加してもよかった機能
今回の開発では実装できませんでしたが、登録画面の一括リセットボタンはあったほうが良かったと思います。また、機能ではありませんがタグの追加と削除はそのためのページを用意したほうがスムーズに開発できたような気がします。
5. チームでの活動
5-1. 自分の担当箇所
・形を作ってもらったカレンダーをJavaScriptで自動生成すること
・データベース関係
5-2. 終えてみての感想
端的な感想は、とても楽しかった、となります。開発を進めていく中で自分の成長を実感できました。
5-3. 意識していたこと
チーム開発をできるだけ実務のものと似せる努力をしました。とはいっても私には実務経験がないので、せいぜい「GitHubでmainブランチはリリース用に使うらしいから開発段階で迂闊にプッシュするのはやめよう」程度のものですが、少しは役に立ったと思っています。
他にも、週2回行われていたチーム会では最初のほうに発言して会話の流れを作るように努めていました。
5-4. 反省点
たくさんありますが、主要なものを挙げます。
反省点その1 作業の選り好み
書いたコード量はそこそこ多かったのですが、デザインを考えたりプレゼン準備をするなど自分があまり興味を持てない作業は他の人に振ってしまうことが頻繁にありました。今回のチーム開発で(少なくとも私は)ストレスフリーだったのも、チームメンバーがフォローしてくれたからでしょう。実務では楽しいことばかりできるわけはないので、これは良くない点でした。
反省点その2 設計が甘かった
特にテーブル定義ですが、使用するクエリの洗い出しまでやっておくべきでした。途中で「このINSERT文を使うならこのテーブル設計では問題があるのでは?」となり、急遽変更したことがありました。それどころか、いきなりテーブルをひとつ増やすこともありました。今回は軌道修正にそこまで苦労はしませんでしたが大規模プロジェクトである程度開発が進んでいる場合では容易に修正できるとは思えないので、かなり細かい部分まで設計を詰める必要を感じました。
反省点その3 設計(変更)の共有が遅かった
データの扱いについて「PDOで引っ張ってきたデータをJSONにエンコードしてJavaScriptで操作する」といった程度の設計すら共有できたのは開発開始1週間前とかだったので、もっと早い段階に学習してメンバーに共有するべきでした。
設計の変更についても「必要と感じたら変更して事後報告をする」という姿勢でしたが、これも小規模開発だから結果良かっただけで、本来は好ましくないと思います。
6. 個人的に学んだこと
体系的な学習の重要性を強く感じました。今回のプロダクトでは非同期通信を使ったのですが、非同期通信については本腰を入れて勉強したことがなく、開発中は断片的な知識を集めて場当たり的な解決をしていました。そのせいでとても時間がかかり、完成後もいまいち腑に落ちていません。よく耳にする「座学より実務のほうがスキルがつく」という意見も間違いとは思いませんが、体系的な知識の会得という点においては書籍などを用いた座学に軍配があがる気がしました。
また、余談気味ですが、実務では徹夜作業をすることも当然あるだろうから軽く体験してみようと思い、1日だけですがレッドブルを飲んで朝まで作業する日を設けてみました。作業中はアドレナリンのおかげかそこまで苦ではなかったものの、開発終了後に元の体に戻るのが大変でした。良い体験でした。
7. おわりに
今回のチーム開発で作成したプロダクトは技術的に難しいものではなかったものの、チームでの開発の進め方については多く学べることがありました。第二回チーム開発はもちろん、現場での開発で活躍できる人材になれるよう日々精進していきます。