高専本科4年の12月、友人からの誘いでLINE Yahoo主催のハッカソンHack U Kosen 2023に出場しました。
1年くらい経ちましたが、忘れてしまう前に備忘録として書き記しておきます。
はじめてのハッカソン
就活が始まる前に、自分含めて5人で出場することにしました。
課題や研究室での活動である程度の技術力はあるはずなんですが、普段からハッカソンやコンテストに積極的に参加するタイプではなく、そもそもアプリ開発なんてほぼしたことがないような友人で集まったので正直不安でした。
開発期間は12/4~12/22までの18日間、アイデア出しから開発まで完成させなければならないです。
他のハッカソンに出たことがないので知りませんが、割と長めなのかな、優秀なチームはクオリティあげてきそうだな~とか考えてました。
正直最優秀賞が取れるほどの物は作れないと思ったので、とにかく期間内できちんと動くアプリを完成させようと思いました。
メンバー
ぼく・・・Python、JSなどで簡単なアプリなら作れる程度。複数人での開発は5dayインターンでのWebサイト開発のみ。
開発系の研究室で頑張ってる友人A
開発経験は少ないが、成績優秀の友人B
機械学習を主に行う研究室でモデル学習の手伝いをしてる開発未経験友人C,D
以上5人
僕はアイデアやデザイン面ではからっきしなので、
友人Aがプロジェクトの全体を、開発面を僕が主導する形になりました。
開発テーマ
今回の開発テーマは「クリスマスをHackせよ!」でした。
正直頭の中は???でしたが、とにかくクリスマスに関連したアプリを作ればいいのかなって感じです。
発表会は12/23だしピッタリのテーマですね。
開発キックオフから数日はアイデア出しで消費してしまいました。
トナカイのレースゲームや、サンタクロース変身アプリとかいろいろな案を出した結果、加速度センサを利用してスマホを振ることで、みんなで音楽を演奏するパーティゲームのようなものに決定しました。
今振り返ると安易にゲームの開発に行くのはよっぽどクオリティが高くないと入賞は厳しいのかなと。
開発期間
試行錯誤しながら進めていきました
当初の予定では、
- ジングルベルの音源を2~8人用にパートごとで分割し、全パターン用意する(パワープレイ)
- クリスマスケーキを参加人数で分割し、サーバー側のPythonに画像を送信することで何等分か検出し、人数を取得(YoloX)
- ブラウザを開き、参加者間で同期し、加速度センサの値によって動的に音量を変化させ曲を演奏する
っていう感じだったんですが、少ない開発期間で
- 物体検出でケーキの分割数を検出できない
- そもそもサーバーの知識が無く、システムが安定しない
- 参加者間orサーバーと同期することができない
ことが判明したため、システムの構成を変更しました
- サーバーをAzure web appへ変更
- 人数の検出をTensorflow.jsを活用した集合写真での人物検出へ変更
- 参加者間の同期を、時間での一括スタートへ変更(60秒ごとにスタートする方式)
今でこそChatGPT等のAPIを活用すれば簡単にケーキの分割数を検出することはできそうですが、当時はLLMを使うのはハードルが高かったですし、
わざわざPythonに送信して推論を行うのは現実的でなかったので、Tensorflow.jsでcocoSSDというモデルを使用しました。
後付けの理由になりますが、高専生は写真を取らなすぎる問題があるので、フレームとロゴをつけて保存できるようにしました。これは我ながらいいアイデアだと思った
開発を担当した部分
以下の部分を担当しました
- Azure web appの環境構築
- HTML/CSS+PHPの実装
- Tensorflow.jsによる物体検出
- Howler.jsと加速度センサを組み合わせた音源再生の制御
- 時間を取得して分ごとに指定したゲームページへ遷移
- アップロードした画像にロゴをつけて表示+保存
Figmaやプレゼン資料などは他のメンバーに任せて開発の大部分を担当しました。
特に加速度センサの挙動に合わせて音源を制御するのにだいぶ苦労した覚えがあります。
学んだこと
とにかく要件定義の大切さを実感しました。
アイデア出しにたくさん時間をかけるのはいいんですが、
実際に自分たちの能力で実現可能かどうかまで話し合うべきでした。
知識も経験も足りない手探り状態での進行だったので仕方がないとは思いますが、詰めれるときに詰めといたほうが途中であたふたせずに済んだかなと思います。
結果的に入賞すらできずに惨敗しましたが、いい経験になりました。結構楽しかった。
成績を残したチームは明らかにクオリティが違っていてびっくりでした。
そもそもwebアプリよりもネイティブアプリを開発していたりデザインがキレイだったり・・・。
デザインの勉強もしないと良いものは作れないんだなあと感じました。