社内ハッカソンに新卒内定者がソロ参戦してみた　〜してよかった事前準備と欠けていたモノ〜

## TL;DR

- 事前準備により開発時間を削減しよう
    - 自分ができることを精査しておく
    - コーディング方針を定めておく
- 成果物の魅せ方もかなり重要
- 内定者が内定先社内ハッカソンに参加することは、少なくとも内定者側にとってはメリットしかない
    - 先輩社員に働き方の実態やその他生の意見を入社前に聞いておける
    - モチベーション上昇
    - そもそもハッカソン自体がたのしい


## 想定読者

こんな状況の方々に何らかの価値を提供できればと思います。

- ハッカソンに興味があるけど、ちょっと不安で参加を迷っている人
- 諸々の事情でハッカソンに個人参加 [する / したい] ので、個人参加の事例を見たい人
- これから社内ハッカソンに新卒内定者の募集を検討しており、内定者視点の生の感想を知りたい運営メンバー


## はじめに

先日内定先企業から、新卒内定者に向け社内ハッカソンへの参加募集をいただき、「これは面白そう！」と思い参加させていただきました。  

参加に踏み切った理由をもう少し詳しく書くと

- 面白いことが好き
- プログラミング、アプリ開発が好き
- 先輩社員と交流できるチャンスだと思った

ということであり、人生初ハッカソンとなるこのイベントに参加しました。  
参加申請後に主催者の方々と色々と連絡を取り合った結果、今回は個人参加という形になりました。

この記事では、ハッカソンにおける立ち回りの実例を紹介したり、社内ハッカソンに新卒内定者を呼ぼうか検討中の方に内定者視点の感想や意見をお伝えできればと思います。


## ハッカソン概要
- テーマ「デリバリー」(当日発表)
- 技術要件は「AWSか何らかのデバイスを使う」(事前発表)
- 最大開発時間、発表準備時間　25時間 (寝ない場合) 
- チーム発表2分、成果物発表5分


## 本題

やったことや得た知見を時系列順に書いていきます。


### 1. 事前準備

この段階で、技術要件とおおよその日程がわかっている状態でした。  
そこでまずは、満たす技術要件を決めることにしました。  
自分は普段からAndroidアプリを作っていること、最近のAWSの学生向けサービスでは無料で好きなインスタンスを作れるわけではないことから、「何らかのデバイス」としてAndroid端末を用いることにしました。  
また、Android端末を使うにしても例えば「Webアプリをスマホブラウザで動かしただけ」等ではデバイスを活用している感が薄く面白くなく、また自分にとって新しい学びに繋がらないと思い、自分があまり触れてこなかった「Androidスマホのセンサーデータを使う」方針にしようと決めました。

とはいえ、いきなり本番当日にセンサーを活用した実装ができるか不安だったので、事前に加速度、方位角、その他諸々のセンサー情報を取得し画面にリアルタイム表示するサンプルアプリを作っておきました。  
こうすることで、センサー情報をとるAPIの特徴を把握することができました。

:::note warn
以下の方針は、個人参加ならではのものであったり、一長一短なものが含まれています。
実践する際は本当にあなた自身やチームに合っているかを吟味しましょう！
:::

さらに、間違っても当日に「動くものを発表できなかった」ということだけは何としても避けたかったので、不慣れな短時間開発を乗り切るためコーディング方針を以下のように明確化しました。

- 主方針: 綺麗なコードを敢えて諦める
    - テスト駆動開発しない
        - そもそも複雑な実装は避ける
    - 抽象化レイヤーを作らない
        - じっくりと綺麗な設計を吟味したいところを我慢する
    - DRY原則違反をある程度許容
    - コードを書き捨てる覚悟で臨む

振り返るとここでの事前準備が、イベント当日のゆとりのある開発日程に繋がったと思います。


### 2. アイディアソン (ここから1日目)

初日の最初はチームがバラバラになるように着席し、自己紹介やテーマ紹介、アイディアソンを行いました。  
アイディアソンはお題に関連したブレインストーミングや、そこで出てきたアイディアを掛け合わせるアプローチで行いました。    
テーマである「デリバリー」という単語そのものにとらわれるとあまりアイディアの数が出なくなるので、「運ぶ」や「届ける」のようにどんどん連想していった言葉や概念を活用するのがコツのようでした。  
同卓内で連想ゲームが始まってから、混沌としたアイディアが飛び交って面白かったです。

また、ファシリテーターの[キノコの方🍄](https://qiita.com/h2m_kinoko) (!?) がとても面白かったことが印象的でした。  
軽快なトークで会場を和ませ、盛り上げ、また自由な発想を促すなど、全日程を通してハッカソンを力強く支えていただきました。  


### 3. 開発

開発は個人となりましたが、度々キノコさんに様子を見ていただいたり、他の個人参加先輩社員と閑談させていただいたりして静かながら楽しく行えました。  
開発時は他のチームも同じ部屋であり、チーム内で教え合う声やドローンの羽音(!?)が聞こえてきてとても楽しい雰囲気であり、自身も気分が上がりました。

事前準備の甲斐もあり、帰宅後深夜1時あたりで開発を終えることができました。


### 4. 発表準備 (ここから2日目)

前日に開発を終えていたことで、2日目の開発時間は発表準備に充てることができました。  
発表資料が出来上がってからは、プログラムのパラメータ調整やリファクタリングを行いました。

自分の成果物はAndroidアプリであり、発表スライドに並べてスクリーンに上映できるようにすればいいか模索した結果、ADBワイヤレスデバッグとPC無料ソフト `scrcpy` を組み合わせる方法が最適だと判断しました。  
この方法ならワイヤレスでスマホ実機画面をPCに転送でき、PCからのタップ操作も可能となりかなり便利でした。

今思うと、この時間にもっと発表練習をしっかりとしておくべきでした。


### 5. 発表会

発表会は様々なアイディアや、高い技術により作られたものを見ることができてとても楽しいものでした。  
そんななか発表会で強く印象に残ったことは、上位となったチームの「成果物と発表の総合的な品質の高さ」でした。  
上位となったチームは成果物が高品質であることに加えて、発表での魅せ方についても深く考えられていました。  
寸劇を行うチームやアプリに発表用と思われる機能を仕込んでおくチームなどがあり、面白いと同時に惹き込まれる発表となっていました。

一方で自分は、自己紹介で長時間話しすぎてしまい、肝心な成果物の説明を急遽短縮するというチグハグな発表にしてしまいました。
発表や魅せ方に関する姿勢や考え方が甘かった、というのが今回における最大の反省点となると思います。


### 6. 懇親会

最後は、参加者で美味しいピザやお菓子を囲んでの懇親会となりました。  
自分はいきなり他人に話しかけることがあまり得意ではありませんでしたが、逆にたくさんの優しい先輩社員方にお声がけいただき、あらためて自己紹介したり仕事について聞いたりすることができました。  
IT技術を好きな人が多く、大学以上に濃い技術トークができてとても楽しかったです。

入社前にエンジニア先輩社員と交流でき、またたくさんお話を聞けてとても自分にとってありがたい機会となりました。


## おわりに

このハッカソンに参加してみて、全体を通してとても楽しく、またとても有意義なものであると感じました。  
ハッカソンに興味がある人は、迷っていないでとりあえず参加してみてはいかがでしょうか？
もし心配なら、しっかりと事前準備をしておけば十分に乗り切れると思います！

この記事では、新卒内定者がハッカソンに参加してみた話と準備、感想を紹介しました。  
この記事が、ハッカソンに参加しようか迷っている方の背中を押すことの一助になっていたら、また社内ハッカソンを開催してみたい方の参考になっていたら幸いです。