はじめに
こんにちは、しんりゅう (@shinryuzz__)です。
今回はタイトルの通り、某社のハッカソンに出場してきたことを振り返ろうと思います。
優勝できたことも相まってここ数年で最も濃密な2日間となりました。 終了後数日はそのあまりの興奮で寝付けなかったほどです()
最後まで読んでいただけると幸いです。
きっかけとモチベーション
実は私はすでにこの主催企業から内定をいただいており、担当人事の方から直接ご連絡をいただいたことがきっかけでした。
開催期間前後で他社で就業インターン中であったため、初めは悩んだのですが、
- 主催企業のことをもっと知りたい
選考を通して企業に非常に魅力を感じていたもののそれ以外で関わる機会がほとんどなく、そんな時に今回のハッカソンは非常にいいきっかけになるのではと思っていました。
- 同世代の人たちの技術力を知り、腕試しをしたい
短期間で成果物を作りきるという経験がなかったため、その中でたくさん学べることがあるだろうなあ、同世代のつよつよエンジニアと友達になりたいと思っていました。
以上のよう想いが強くなり、参加する運びとなりました。
ハッカソンの概要
開催期間は2023年9月の某日2日間。オンライン開催でした。 基本的にフロントエンドとバックエンドの4人構成という形で合計5つのチームが出場し、あるテーマにそって2日間でプロダクトを開発し、最後にはプレゼンをするという流れでした。
よくあるハッカソンのように見えますが、「本質的な価値を届けられるようなプロダクトを完成させる」という点が強く強調されており、主催企業のカルチャーが前面に押し出されていたと思います。
また、今回はチーム単位で申し込む形式ではなく個人単位で申し込んでランダムにチームが結成されるという形でした。 そのため、できたてほやほやのチームメンバーとうまくコミュニケーションをとってプロダクト開発に注力できるかということは結構不安でした。
まあそれは杞憂だったんですけどね。 むしろ同世代の最高のエンジニアと知り合うことができ、本当に良かったです。 僕たちのチームワークは参加チームの中でも随一だったと自信をもって言えますし、それゆえに優勝できたんじゃないかと思っています。
僕はフロントエンドを担当しました。
不安とワクワクと責任
まず、参加前はとても不安で緊張していました。 というのもハッカソン経験がほぼなく、自分の技術力がチームに迷惑をかけないだろうかとずっと考えていたためです。
ですので参加前のスタンスは、「フロントの強い人からいろいろ教えてもらいたい。キャリーしてクレメンス。。。」くらいの受け身な姿勢でした。
しかし、アイデアソンの段階で僕は思いました。
「僕たちのチームはテーマに沿った上で非常に面白いアイデアを持ってユーザーの課題解決をしている。ストーリーが通っている。これを完成させることができれば、かなりいい結果になるのでは?というかこのチームマジで最高。このチームならホントにいけるのでは?」と。
「自分の技術力が高いとか低いとか自信がないとか関係なく、作り切りたい」と。
また、僕と同じフロントエンド側の担当でもう一人メンバーがいたのですが、彼は僕より経験が少ない方でした。
そのため、「フロントの強い人から教えてもらいたい」という受け身な願望を抱いているどころではなく、これはむしろ自分がフロントエンドは責任をもってリードしなければいけないと、腹を括りました。
そんな状況も、今回大きく成長できた理由の1つだと思っています。
実際に取り組んだこと
成果物としては、リモートワークなどで業務以外の交流が図りづらいエンジニア向けが能動的にアイスブレーキングできるようにという目的で、「CLIで操作できる自己紹介リレー」を制作しました。
バックエンド側は Go (Gin)で REST API サーバーを構築し、Cloud Buid で CI/CDを回し、Cloud Run上にデプロイしました。DBは同じくGCPの Cloud SQL。 さらに それらの処理を IaC (Terraform)で記述するということを行っていました。
フロントエンド側は Typescript + Next.js(App Router)を Vercel上にデプロイするというおなじみの技術スタックを用いました。 App Router は直近のインターンで初めて触れた程度で、技術的挑戦をしたくて採用しました。
また、CLI風のUIを実現するために、Xterm.js というライブラリを用いました。 これははアイデアソンをもとにリサーチしてたまたま見つけたOSSなのですが、これが非常に便利だった一方、ドキュメントの少なさと制約の多さに非常に苦しめられました。。。
2日間の学び
様々な学びがありましたが、次の項目にピックアップして述べたいと思います。
- プロダクト開発は楽しい
- コミュニケーションを密に取って情報を共有し合う
- 優先順位にこだわる
- 動くものが正義
- やりきる(根性)
プロダクト開発は楽しい
「ユーザーに本質的な価値を届けられるか」にこだわることが、プロダクト開発の醍醐味であると思います。 ただ動くものを作るだけでなく、どうすればユーザーに喜んで使ってもらえるか、ユーザーの悩みを解決することができるか。
今回の僕たちのチームはそこに妥協することなく考えることができましたし、そんなチームで開発ができることが心の底から楽しいなと感じました。 これからもそこにこだわっていきたい・こだわれる環境に身を置けたら幸せなんだろうなと思います。
コミュニケーションを密に取って情報を共有し合う
チームでの開発にあたり、方針として50分おきに各役割の進捗報告を行うということを取り決めました。
この50分で何をしたか、困っていることはないか、最終目的までのギャップはどの程度あるか、次の50分をどう使うのか。 これらを定期的に共有することで、問題があればチームで素早く対処し、どんどん前に進めることができました。 これはメンターの方からアドバイスいただいたのですが、今振り返っても非常に良かったです。
しかし反省点もあり、開発終了時間直前はこれが疎かになってしまいました。 自分のタスクに追われ、余裕がなくなっていたためです。 そんな時こそ一歩引いてチームと認識をすり合わせて、残りの時間で何をやって何をやらないか、それを決める時間を作る余裕があれば、よりよい成果物を作れたんではないかと少し後悔しています。
優先順位にこだわる
限られた時間でMVPを作り切ることは簡単なことではありません。 というかMVPをどう定義するかによって何を実装するかが大きく変わってきます。
また、開発が順当に進むとは限らず、かなりの確率でトラブルがつきものです。 MVPとして定義した機能が実装できなくなったり、いつの間にかMVPとは関係ない機能に工数をかけたりすること起きがちだと思います。
そんなときに自分たちが作りたいプロダクトはなんなのか、それに立ち返る。 それに準じて優先順位を立て、やるべきことを明確にする。 この作業を適宜欠かさずに繰り返すことが非常に重要であると感じました。 僕たちのチームは、常にこの作業を行い、そのおかげで成果物を作り切ることができたのだと思います。
動くものが正義
高専3年生の時、とある教員がこんな発言をしたことをいまだに僕は覚えています。
「動かないプログラムはゴミです」
クラスの全員がザワザワとなり、半分トラウマになっています。。。
ハッカソンも極端に言ってしまえばこれに近いものがあると思います。 せっかくの素晴らしいアイデアもプロダクトも、実現できなければ、動かなければ、ユーザーやオーディエンスにその価値は伝わりません。
まずは動くものを作り切る、これを最優先に開発を行いました。
やりきる (根性)
あんまりこのように雑に言い切ることは好きではありませんが、最後の最後は結局根性が大事である、と痛感しました。
フロントエンド側は上手いように実装が進まず、開発終了時間の直前までコードを書いていました。 それもコアな機能の部分が実装できていないという、かなり切迫していた状況でした。 ですが上述した通り、僕はこのチームで、このプロダクトを、「なんとしても作り切りたい」という想いが強くありました。
ゴリゴリのハードコーディングになった部分があり、ソフトウェアの品質としては到底満足できるものではありませんでした。 それでも動くものが正義なので、ここは割り切ってやりきることだけに集中しました。
その結果なんとか一通りの機能を実装し切ることができ、仕上がった時には心から&したことを覚えています。 本当によかった。。。
カミングアウトすると、1日目の夜と2日目の朝はめちゃめちゃ体調が良くありませんでした。 ベッドに横になった瞬間眩暈がしたのは、忘れられません。 朝も水を飲んだだけでリ⚪︎ースしちゃったり。
でもやりきりたかった。死ぬ気でやり切ろうと思った。 ここまでの経験は僕の人生の中ではなかなかなく、1度はしておくべきだと思っていたので、結果論でしかありませんが今振り返るとこの経験はこれからきっと役に立つと思っています。
メンター陣のフィードバックの質の高さ
2日間のほとんどの時間はひたすらグループワークをするわけですが、もちろん途中でエンジニアメンターのフィードバックの時間が設けてありました。 2時間おきくらいに1度、合計4, 5回?くらいはあったような気がします。
アイデアソンの段階から最終開発時間の直前まで、複数のエンジニアメンターの方々から手厚いサポートを受けることができました。 この時間にいただけるお話が毎回ハッとさせられる事ばかりで、あまりに目から鱗でした。
また、なによりもこんな強くて面白くてかっこいいエンジニアが所属するこの主催企業のことをより好きなりました。
さらにハッカソン終了間際には、思わぬサプライズもありました。 ここには書かないでおきますが、楽しみながらも苦しい2日間を過ごした僕にとっては最高のサプライズでした。 これからも定期的に何度も見直して、自分を奮い立たせようと思います。
さいごに
この2日間を通して、大きく成長することができました。 何よりも、エンジニアとしての自信をつけることができました。
冒頭で述べた通り、僕はハッカソンの経験もなければ、担当技術領域に関する自信もありませんでした。
しかしそんな中、なんとかチームで協力してユーザーに価値を届けられるプロダクトにこだわり続けることができました。 フロントエンド領域については、自分が責任とプライドをもってリードし、制限時間ギリギリまで必死で粘り、作り切ることができました。
そして、最終的には優勝という結果までいただけることになりました。 結果発表の瞬間は、あまりに色んな感情が溢れ出して、正直涙目になってしまいました。
当初は参加するかどうかから悩んでいましたが、参加して心の底から良かったと思っています。 反省点もたくさんありますが、まずはやりきった自分とチームを褒め称えたいです。 これからもっともっとユーザーに価値を届られるようなエンジニアを目指し、精進していく所存です。
ここまで読んでいただきありがとうございました。