概要
学校の探究の時間というグループ探究の時間がありまして、そこで、プログラミング経験者一人と未経験者五人で校内の学習Webアプリを作ろうとしたら失敗した話です。自分の記録として残しておきます。
作ったもの
自分の高校のニーズを満たす学習アプリです。某StudyP◯usみたいなやつをWebアプリとして作りたかった。校内での運用を想定したので、実際のサイトは載せられませんが、画像だけ載せておきます。
機能
実装できた機能
・会員登録機能
・授業予定(閲覧、投稿、検索)機能
・進捗管理機能
実装予定だった機能
・進捗共有機能
・ランキング機能
開発について
開発環境
PythonのDjangoを使ってWebアプリとして開発しました。
UIはBootstrap5を使っています。DBはDjango標準のSqlite3です(本当はMySQLを使う予定だった)。
実際の運用では、金銭的な関係で普通のレンタルサーバーにデプロイする予定でした。
学校のipadではVSCode CodeSpacesを使い、家のPCの開発環境と同期させていました。
チームメンバー
プログラミング経験者一名(自分、Djangoは少し使ったことあり)、未経験者五名。
未経験者はスクラッチを授業で触ったことがあるぐらいで、コードを書いた経験は皆無でした。
開発の経緯
1.教育系の課題探究からシステム作りへ
僕の学校では、課題探究という時間がありまして、一年生はグループになって一年間それぞれの課題を研究します。元々僕は情報リテラシーに関するアプリを開発したかったのですが、グループ分けで教育系のことを研究するグループになってしまいました。
最初は授業方法を自分たちで考えよう!ということを研究していたのですが、うまく方法が思い浮かばず、困っていました。そこで、じゃあ、某アプリのような学習アプリを、校内にあった形で作ればいいのでは?というアイデアが出たことで、本格的にアプリ開発をしようということになったのです。
2.でもどうやって?
アプリ開発、といってもプログラミングができるのは僕だけで、他の五人は全くの未経験なわけです。最初のうちは、機能などを他の五人で考えてもらい、自分だけでシステムを作り始めていました。
しかし、自分は部活などで一日30分程度しか開発時間が取れません。そうなると、開発は遅々として進みませんでした。
そんなとき、学校でフィールドワークに行くという時間があり、地元のシステム会社に伺いました。そこで、チーム開発についての方法をアドバイスしていただき、未経験者も考えるだけをやめようということになりました。
3.フィールドワーク後
フィールドワークに行った後、次のような役割を決めました。
・開発担当二名(自分ともう一人)
・構想担当一名
・UI担当一名
・テスト担当二名
自分がもう一人にHTMLやCSSを教えることで、開発がスムーズに進むと考えました。また、テストまで含めて一人で行っていたので、テスターがいることで、多少の負担軽減になると思いました。
しかし、現実はそう甘くありませんでした。
まず、開発担当について。比較的HTMLやCSSは習得しやすいと思いましたが、時間がないのも相まって、開発に反映することはできませんでした。
テスト担当については、後述する開発端末の関係でかなり連携が難しかったです。
機能やUIについてはそもそも彼らが活躍するまで開発が進みませんでした。
4.開発の失敗
結果的に、期限までに実装予定の機能を実装することができず、開発は失敗と言える状態になりました。また、校内でのテストも先生方の理解を得られず、行うことができませんでした。
課題と原因
1.見通しが甘かった
期間に対して、開発する機能の工数の見積もりが甘かったです。経験者が僕だけというのもあり、その経験者もチーム開発はやったことがなかったので、結果的に失敗してしまいました。
2.時間がなさすぎた
探究の時間というのは、通常月に4時間あるのですが、半分は他の授業に変わり、残りの半分以上がフィールドワークや発表の準備に使われてしまい、本来の研究時間はほとんどありませんでした。なので、家での作業時間も取れない自分は、開発を進めることが難しくなりました。
3.環境がない
学校の端末はipadなので、ブラウザベースのエディタしか使えません。テスト環境をローカルで作れないので、家で作ったものを、レンタルサーバーに構築したテスト用サイトにデプロイしてからテストしてもらっていました。GithubActionsでデプロイは自動化したものの、かなり面倒な環境であったなと思います。
また、個人のPCを持っていないことが多く、開発をすることすら難しい状況だったなと今は思います。
4.先生方の理解が得られなかった
校内でテスト運用する時に、先生方に仮のデータ(メールアドレスなど)で運用する説明をしたのですが、情報が流失したらどうするんだと言われ、断られました。Djangoの素の状態のセキュリティでも安心だとは思ったのですが、本当の個人情報は全く入力しないことを詳しく説明しても、アクセス履歴から何か分かるのではないかと言われ、テスト運用を断念しました。
5.チームでうまく行かなかった
二週間に一度しか情報共有せず、授業以外でやっているのは自分だけだったので、進捗などが何もわからず、全員が次に何をすべきかわかっていませんでした。その辺りを疎かにしてしまったのがいけなかったと思います。また、要件定義や機能図の作成などを最初にしっかりやっておかなかったのもまずかったです。
まとめ
失敗した原因はやはり、見通しが甘かったことにあるかなと思います。実際に運用できるような機能が作れなかったことも一因です。チーム開発の難しさと、自分の能力のなさを痛感しました。良い経験になったとは思いますが、開発が失敗したのは残念でした。また、開発が仮にうまく行っても使ってもらえるアプリとなったかは疑問に思います。