ハッカソン中毒者の末路
ハッカソンで優勝したい
そもそもハッカソンとは何か
端的にいってしまえば、短期間でテーマに沿った開発を行い成果物を発表する開発コンテストです。企画、開発、発信の過程を短期間で実践します。
なぜハッカソンで優勝したいのか
冒頭申し上げた通り、プロトタイピングを学んだ筆者にとってその実力を試すために最適な場だからです。単純な実装力では本職のエンジニアとは差がありますが、企画・開発・発信の一連の流れを実践するプロトタイピングの文脈であれば、通用するのではないかと考え、自らの学びもかねて積極的にハッカソンに参加しています。
ハッカソンだからこそできることにも挑戦
ただ参加するだけではなく、ハッカソンの度に新しい技術も利用することを縛りとして科しています。優勝するだけではなく自らの研鑽も目的としている以上、極限の集中力のなかで新たな技術を活用することで一気に使えるレベルまで昇華させることができると考えています。
その背景にはChatGPTの出現もあり、初見の技術を足跡で使うことのハードルが非常に下がっているということも理由として挙げられます。この話に言及すると本題から逸れるので割愛します。
以下、4月に参加した2つのハッカソンについて記事にまとめます。
ChatGPT オンラインハッカソン
1つ目は、今流行りのChatGPTをテーマとしたハッカソンです。
ChatGPTを使用していれば可という非常に自由度の高いハッカソンで、もちろんAPIを活用して自身のプロダクトに組み込むことも良いですが、ペアプログラミングに使うなど、様々な角度での利用が推奨されていました。
作成したプロトタイプ
大学・大学院時代植物病理学を専攻していた経験を活かし、トマトの病害診断を実施する対話型のChatBotを作成しました。トマトは非常に人気のある野菜でありながら非常に病害に弱く、家庭菜園の場で発生する病害を専門知識がない方でも診断できれば便利ではないかと考え、開発に至りました。
研究室時代にも似たような取り組みを実施したのですが、その時は病害判定のアルゴリズムが想定以上に複雑で頓挫しました。今回ChatGPTを活用し対話形式で病害判定をすれば、その部分を補うことができるのではないかと考えたことも開発に至った理由となります。
結果
9人中同率の3位でした。とはいっても非常に票が割れた中での僅差でしたので、皆様非常に素晴らしいプロダクトを作られていました。
その他プロダクトはこちらから参照いただけます。
ハッカソンからの学び
開発を始めるまではChatGPTのランダム性を利用して占いができるLINE Botを考えていたのですが、私自身の占いに対する解像度が低いこともあり、全く面白いものになる気配がありませんでした。とはいえ、占いの解像度をこのハッカソンのためにあげる熱量もありませんでした。
自分が解像度高く考えられるテーマを、自分の中に潜ることで探索し、結果として自分ならではの企画にまとめることができたと考えています。
熱量高く取り組めるテーマを探すこと
テーマに対する解像度をあげること
プロダクト固有の価値を徹底的に磨き上げること
この重要性を再認識することができました。
新しく学んだ技術
本ハッカソンでは初めてNoSQL系のデータベース、具体的にはMongoDBとそのサービスであるMongoDB Atlasを利用しました。
ChatGPTのAPIを叩きつつ、複数回の対話を成立させるためにはDBが必須であり、プロトタイプとして雑に会話ログを保存しながら素早く取り出せるMongoDBは今回のプロダクトにも最適と考え、使用した経験はありませんでしたが使うことにしました。
結果として実装に成功し、この後のハッカソンでも必要な技術となったため、良い選択だったと考えています。
メディカルハッカソン by ものづくり医療センター
2つ目は、医療者向けにプロトタイピングの技術を教えるスクール、ものづくり医療センター(もいせん)が主催する、メディカルハッカソンです。
病院を開発現場とし、医療従事者や患者の体験に基づく実際の課題を解決するプロダクトを作るという、非常に先進的な取り組みのハッカソンです
作成したプロトタイプ
私は医療従事者ではない(植物の医療は分かりますが)ので、自分自身の受診体験に基づくプロダクトを作成しました。
スキー、特にモーグルが趣味の私は、怪我をしてリハビリのために通院することが多くあります。その過程で理学療法士さんに指導いただいた運動を家でも実践しようとするのですが、具体的な指導内容を忘れてしまい、結果家でのトレーニングも疎かとなり回復が遅れるという経験をしてきました。
そこで、リハビリ当日に実践した運動の動画を送ってもらうサービスがあれば利用したいと思い、実際に開発することにしました。
また、忙しい理学療法士さんに負担をかけることも避けたいと思い、ニーズに合ったコミュニケーションプラットフォームの一環としてその機能を実装することで、双方のコミュニケーションを円滑化しリハビリの効率を高めることができるサービスとして作り込みたいと考え、必要な項目を実際に理学療法士さんと相談しながら作成してみました。
結果
爆死
優勝チームはシフトの問題を解決するプロダクトでした。おめでとうございます!
小売業も40人くらいいるデリカのシフトとか、条件に従って最適化しようとAIで頑張っていますので、共通の課題感を持っているなと思いました。
実践していた技術が気になる方はこちら。解説の方が言及していたPuLPと呼ばれる数理最適化のライブラリです。この辺り使うとなると、やはりPythonは優れていますね。
ハッカソンからの学び
表面的な失敗はデモの失敗とプロダクトの見た目を軽視したこと。構造的な課題として、理学療法士と患者側が別画面で同時進行していくため、プロダクトの動作やその意味合いが非常に伝わりにくいものとなったこと。この辺りは企画段階で修正すべき点ですが、実際に発表を行うところまで気づいておらず、発表中にこれはまずいなと思いながら喋っていました。
過去一の実装量でしたが、その機能の全容を5分の発表で伝えることができず、かなり不完全燃焼な発表となりました。
はっきりいって、デモをしないのであれば機能を実装する必要はないのです。目的はハッカソンで勝つことなのですから。
そしてもう一つ、ショッピングセンター勤務者という名前は改めてあまり受けないということも理解しました。理解しにくいんでしょうね。小売業従事者がハッカソンに出てくるということが想定されていないんでしょう。
伝わるのか、分かりやすいのか、プロダクトの第一印象はどうか
その実装は必要か、実際にデモするのか、考えて動く
新しく学んだ技術
React
完全に初めてではなく、昔Reactベースでカレンダーを作って遊んだことはありますが、一つのWebアプリとしてまとめたことはなく、ハッカソンで使うのも初めてでした。
忙しい理学療法士さんが、担当患者ごとに表示される情報をサクサクと切り替えながらコミュニケーション状況の確認をするためには、SPAで素早く操作できることが必須と考え、Reactでの実装に踏み切りました。
結果としてMongoDBから取得したデータをもとに、患者をstateで管理しながらページの情報を切り替えたり、フロント画面から患者に対してLINEのメッセージを送信したりと一通りの機能が実装できたので、今後も使う技術の選択肢として身につけることができました。
APIの実装
これも知識としては持っていましたが、フロントエンドから叩いてLINEのメッセージを送信したり、データベースに登録したりするAPIをエンドポイントのルーティング含めて全て実装したのも初めてです。
このように、技術的な面での収穫も大いに得られたハッカソンでした。
今後の予定
立ち回りの修正
メディカルハッカソンの爆死を受けて、企画・実装・発信についてハッカソン中の時間配分を変えることが必要ということが明確化されました。頭ではわかっていてもその通り実践できる訳ではないので、今後も継続的にハッカソンには出て、実戦の中で身につけていきたいと考えています。
身につけるべき技術スタック
CSS
メディカルハッカソンの時に時間がなくてCSSを当てていないといったな。
あれは嘘だ。
CSS書けません。なんかこう見た目をチマチマ整えるのが好きじゃないんですよね。別に動くんだし、機能としては十分だしバグもないんだからいいじゃねーかと思ってしまいます。今まで真剣に学んできませんでした。
メディカルハッカソン本番のCSSはChatGPTに書いてもらいましたが、微妙な感じになってしまい、修正もできませんでした。
出場予定のハッカソン
Qiita × Fast DOCTOR Health Tech Hackathon
またメディカルなハッカソンでるの?と言われそうですが懲りずに頑張ります。
認知症フレンドリーテック 第二回ハッカソン
これもメディカルなハッカソンじゃんと言われそうですが懲りずに頑張ります。
今度からはショッピングセンター勤務者の名前は使わないかもしれません。
誰も笑わんし。
この記事が気に入ったらサポートをしてみませんか?