JPHACKS2017雑記
2018/01/272017/10/28から2日間、JPHACKS2017に参加してきたので様々書く。
JPHACKSとは?
イノベーターを目指す学生のための日本最大のハックイベント
JPHACKS(ジャパンハックス)は、2014年からはじまり、全国6拠点で開催をされている、全国の学生を対象にした日本最大のハックイベントです。 https://2017.jphacks.com/
はぁ。
ようするに規模が大きめのハッカソン。
どうだった?
死ぬかと思った。
今回のハッカソンは、2日間のプロジェクト学習ってくらいに濃密だった
— Isaac (@_leo_isaac) 2017年10月29日
具体的に
項目 | 値 |
---|---|
制限時間 | 30時間(9時~翌日15時) |
食事 | 1時間 * 2 |
睡眠 | 1.5時間 |
移動 | 1時間 * 2 |
開発 | 30 - (1 _ 2 + 1.5 _ 1 * 2) = 24.5時間 |
24.5時間 / 30時間 = 0.8166…
全体の8割くらいは開発していたことになる。
何を作ったの?
具体的な言及は避けるが、BLEビーコンの電波をiOSアプリで受信すると、その場所に応じた情報がサーバーから引き出され、アプリに表示されるようなシステムを作った。
iOSアプリはReact Native、サーバーはDjangoで作った。
経緯(いきさつ)
アプリ開発(React Native)要員として呼ばれました。
ハイライト
前乗り
ハッカソン前日の夜、1人で前乗りした。メンバーとは翌日の朝待ち合わせる。
18時に大学の講義が終わり、自転車でまっすぐ函館駅へ向かった。19時頃に到着し、1時間後の電車を待った。電車に乗ったら、3時間30分かけて会場付近のビジネスホテルを目指す。
事前開発
なんと、JPHACKSでは事前開発が許可されている。 (そんなん時間掛けたもん勝ちじゃん)
しかしメンバー全員が忙しかったことや、 色々な事件があった こともあり、前日になってもアイデアすら決まっていなかった。コードは1バイトも書いていない。ただぼんやりと、React Nativeを使う雰囲気があるのみだった。
3時間以上も電車に乗るので、その時間を使って事前開発したいと考えた。ところが電車内にはインターネット環境が無い。
うろうろしていたら、「函館駅Free Wifi」の張り紙を見つけた。ここぞとばかりにMacを取り出し、思う存分npm install
した。 どちゃくそ重かった が、気にならないくらいありがたかった。さすが函館駅、突然の環境構築にも対応可能といったところか。
電車に乗り、PCとスマホを出した。スケルトンアプリを開発し、本番での環境構築を省きたいと考えた。電車はそこそこ揺れるので、 ありえないくらい酔う。 目の前のMacに吐くとリポジトリが吹っ飛ぶので、定期的に休憩を挟んだ。
まるで Redux 。
3週くらいしたところで、スケルトンアプリが完成した。札幌駅へ到着した頃には、 とても見せられない状態 になっていた。ホテルへチェックインし、シャワーを浴び、ベッドで死んだ。
1日目の会場
起きて朝食食べてメンバーと合流して会場に行って9時になって開発が始まった。
メンバーはデザイナー2人とエンジニア3人で構成されている。エンジニアのうち1人はサーバー担当、私を含めた2人がアプリ担当である。
開発が始まったとはいえ、アイデアも何も決まっていない。 いったい何を作れば良いのか という話し合いは、その後 10時間ほど続き 、程なくして会場が閉まった。
この時点でアプリの進捗は 1割 ほどだった。実際のビジネスロジックは1バイトも書いていない。そりゃそうだ。この時ようやく仕様が決まったんだから。
アプリ開発には明らかな問題があった。React NativeとBLEビーコンの相性の悪さだ。手当たり次第ライブラリを試してみたが、何故か全て動かなかった。サンプルコードすらまともに動かないという状況に参っていた。
会場を出てホテルへ向かう道中も、スマホでドキュメントやライブラリのIssueを読んでいた。状況は緊迫していた。
ホテル
ホテル近くのレストランで夕食を済ませ、ホテルへ入った。22時過ぎだった。
サーバー担当のエンジニアもアプリ開発に加わり、出来るところまで開発しようということになった。ライブラリや環境を変えたりと、各々が暗中模索している状態だった。
見て〜、見事な赤〜〜(ReactNativeのエラー画面を見せる)
— Isaac (@_leo_isaac) 2017年10月28日
私の相方は既に壊れていた。
UIに関するライブラリも案の定動かなかった。何故こんなにもライブラリに嫌われるのかわからなかったが、仕方がないのでフルスクラッチした。
デザイナー達は1時くらいに落ちた。サーバー担当の彼は4時くらいに。アプリ担当の開発は 6時30分 まで続いた。5時から6時にかけてはテンションがおかしかったのを覚えている。そこから1時間30分寝て、8時に朝食をとった。その後会場へ向かった。
2日目の会場
15時までに完成させなければならない。私はUIとロジック、サーバーとの通信周りと状態管理を書いていた。
アプリの挙動は相変わらず不安定だった。BLEビーコンを検知することができなかった。私の相方とサーバー担当の彼が、2人がかりで対応していた。正直なところ、私はかなり焦っていたが、サーバー担当の彼が割りと冷静だったお陰で、なんとか動くようになったようだった。
結局アプリがデプロイできたのは、 時間切れ5分前 のことだった。
雑感と諸々
技術的に
なれない技術は使うもんじゃない。事前の技術検証は大切だ。
実は今回のメンバーの中でReact Native経験者は私だけだった。だからReact Native関連の問題は、本来なら私が解決しないとといけないものなのだが、結局未経験者2人に任せることになってしまい、申し訳なかった。
React Nativeのことは嫌いになっても僕のことは嫌いにならないでください。
— 七十 (@sititou70) 2017年10月30日
そんな中でよく開発してくれたなと思う。
開発を通して
後から運営の人に聞いたのだが、1日目の会場開発が終わってようやく仕様が決まるようなチームは 前代未聞 で、少なくとも札幌会場ではうちのチームが一番炎上していたという。 笑えない。
なにかあったの?
色々な事件があった
— 七十 (@sititou70) 2017年10月30日
お察しください
会場の居心地について
暑い 、 水がない 、 電源タップが少ない 、 BGMのせいで集中できない 等、色々言いたいことはあった。後日運営の人と話す機会があったので、 全部言っといた。
まとめ
まぁ色々あったけど、いい経験になったんだと思い込むことにした。