はじめに
人生初ハッカソンに参加して、先ほど無事完走したので、身体がホクホクしているうちに振り返っておこうと思います。
Qiita Hackathon 2024.9.21-9.22
ハッカソン一緒に出ませんか?
ハッカソン開催の1ヶ月ほど前に、前職の同僚から、「ハッカソン一緒に出ませんか?」と声を掛けていただいたのが嬉しくて、ハッカソンが何者かも分からないまま、その場で「出ますと!」と言って参加することになりました。
参加メンバー
フルスタックの方がチームのリーダー的なポジションの方で、メンバー5人の担当領域と関係はざっとこんな感じでした。
- フルスタック(リーダー)
- デザイナー(リーダーの奥さん)
- フロントエンド(リーダーの元同僚)
- バックエンド(私の元同僚)
- バックエンド、インフラ(私)
自分は主にバックエンド+インフラというポジションでやらせて貰いました。
準備ってどうした?
リポジトリは当日ハッカソン開始してから作成するなど、開発環境の準備などゼロの状態でしたが、メンバー同士は事前にオンラインで集まって自己紹介するなどして、お互いのこと軽く知る時間は用意して頂きました。
この段階でチームメンバー全員、いい人でコミュニケーション取りやすい方しかいなかったので、プロダクト作りは上手くやっていけそうという謎の自身はありましたw
ハッカソン
制限時間
今回参加したQiitaHackathonの予選は2日間の開催で、1日目 10:00 から、2日目13:20発表スライド提出までが時間制限になります。
テーマ
QiitaHackathonにはテーマがありまして、そのテーマにそったプロダクトを開発していきます。テーマは当日発表されるので、そこからチームで話し合ってプロダクトを作っていく流れで、今回のQiitaHackathonのテーマは 「オープン」 でした。
ハッカソン1日目
解決する課題
「オープン」 というテーマに対して、私たちは「引きこもりの悩み」という課題を設定しました。この課題には、「コミュニケーションが苦手、難しいこと」が原因のひとつと仮定して、AIを使ってコミュニケーション能力を向上させるという方向性でプロダクトを開発することにしました。しかもAIは個性的なキャラを設定をして、ゲーム感覚でサービスを使えることを目指しました。
まとめると
癖つよキャラのAIと会話を通じて、コミュニケーションを爆上げするサービス
技術スタック
プロダクトが決まったところで、詳細は省きますが、技術選定というところで、主にこのような技術スタックで開発しました。
- FE:Next.js, React
- BE:Nest.js, TypeORM
- DB:PostgreSQL, sqlite
- 文章生成AI:GPT, LangChain.js
- 音声合成:VoiceVox
その他もろもろ
実装する画面、必要なAPI、エンティティなども含めて、ここまでスタートから2時間程度で終えて、そこからリポジトリを作成して実装に入りました。
苦労したこと
Nest.js
, TypeORM
を扱ったことがなかったので、バックエンドAPIを作る以前に環境構築で苦労しました。ハッカソンはとにかくスピード勝負というところで、ちょっとした詰まりポイントでも、解決まで時間が掛かってしまったので、クセが分かっている得意な言語や技術で構成できるなら、それに越したことはないかなと思いましたが、一方で扱ったことのない技術に触れること自体、学びが多いので、あえて使ったことのない技術を選んでみるのも面白かったと思いました。
とはいえ、APIの開発工数が足りそうになかったので、途中から得意な技術を導入するなど、バックエンドの開発方針を柔軟に変えて実装しました。
ハッカソン2日目
フロントとバックエンドの繋ぎ込みがメインで、とにかく動くものを作り終えるということにチーム一丸で開発を進めました。ここで、特にフルスタックのリーダーの腕力により無事実装終えました。
ハッカソンは実装だけではなく、サービス紹介のスライドの用意もしなくてはならないので、ラストスパートは実装の仕上げとスライド作成の二手に分かれて1時間弱でスライドを仕上げました。
発表スライド
デモ動画
学び
0→1
メンバー同士まったく違う会社で、一緒に仕事をしたことがない人とゼロからプロダクトを作るとどうなるんだろう。と内心ドキドキしていましたが、限られた時間の中、共通の目標、熱量、技術が揃えば、短時間の間にプロダクトを作ることが出来てしまうという体験出来ました。この体験を通じて、0→1のスタートップの雰囲気を味わえたことが個人的に良い学びでした。
開発生産性 × コミュニケーション
今回全員リモートで開発を行いましたが、自宅の開発環境が各々整っていることと、Meetやハドルで常にコミュニケーションが取れる状態にしていたことで、生産性は非常に高かったと思います。
特に耳に入ってくる情報を、ツールを使ってコントロール出来るところはが良かったと感じました。例えば声をかけたい時はマイクオンですぐ話せて、集中したい時はMeetから抜けるだけで話が聞こえてこないといったメリハリがツールを使うことで簡単にコントロールできる点が自分は良かったと思いました。
オフラインで集まると、自分が意識を向けなくていい会話も聞こえてきて集中力を維持することに無意識に疲れるので、今回のような短期戦は全員リモートで良かったと思いました。
ペアプロ
バックエンドの実装は初めて扱う技術ということもあり、ほぼペアプロで進めましたが、速を出しながら、バグも抑えるという観点で、悪くないスタイルだったと思います。特にエラーやバグで詰まった時もそのタイミングでリアルタイムにエラーの状況を把握できている点(今この作業をしていて、このコマンドを実行して、ここのコードで...)といったコミュニケーションが不要なので、その点は良かったと感じます。
最後に
初めてハッカソンに参加させていただきましたが、0→1の開発を雰囲気を体験出来たのは、非常に良かったと思います。
また、全てにおいて有利な訳ではないですが、コミュニケーション面でもオンラインであることの強みを実感することが出来たことも良かったですし、チームメンバーの相性・お互いをリスペクトする姿勢なんかも短期で結果を出すには非常に重要と感じたので、この知見を今後に活かしていければなと思います。
どうですか
みなさんもハッカソン出てみませんか?
最後までお読みいただき、ありがとうございました。