どうも、ラルフです。

先日の東京A予選に引き続き、7/7~7/9で開催された SPAJAM 2018 本戦 に参加してきました。

結果はなんと最優秀賞をいただきました。

ブログを書くまでがハッカソン、というわけで予選に引き続き忘備録的なものです。

メンバー

予選と同じメンバーではありますが、少し担当箇所を入れ替えていました。(予選のサーバー担当とAndroid担当を入れ替え)

作ったもの

車椅子を使用している方が、電話を使用して電車への乗車の事前連絡を行うときのサポートを行うアプリ「WheelFree!」です。

現在は当日直接窓口で言う以外、事前の連絡手段だとWebフォームなどはなく、電話しかないという問題があり、毎日の通勤通学などで毎回電話するのが面倒 といった課題を解決することを目指しました。

電話しか受け口がないという制約が現状あるため、アプリで入力した内容をTwilio経由で電話をかける という仕組みです。

アプリの技術面

大まかな構成は予選のときの構成とは変わっていません。

今回はクライアント側の技術の難易度は低かったですが、工数がかかる小さなタスクが多かったので非常に辛い部分がありました。(詳しいことは下の時間ごとのセクションで)

2日間を振り返る

1日目 ~16:00

予選と同じくアイデアソンの時間です。テーマが「モビリティ」ということで、通勤電車などに対するアイデアが非常に多く出ていた印象です。

ニコ生でのアイデア募集などもあり、非常に面白かったです。

1日目 16:00~

ハッカソン本番開始です。

このチームの定めなのか、アイデアの決定は 25時過ぎ までかかりました。

お互いのアイデアソンでのアイデアを話したり、モビリティから連想できるもの、そもそもモビリティとはなにか、モビリティの歴史ってなんだ などなど、議論が白熱しました。

18時頃には温泉にも入りに行きましたが、1時間弱ほど露天風呂でもずっと議論をしていました。

議論があまりにもまとまらなかったので、23時ぐらいからは自分が一旦議論から抜けて、プランB として「発表できないことを回避するため、全員が納得していないけど苦肉の策アプリ」の開発を行っていました。

とは言っても、苦肉の案なので自分も開発する気はあまり起きず、一人で案を考えたりしていました。

そして25時前後ぐらい、自分が暖炉前で考えていたところから戻ってくると今回の案の大枠が出来上がっており、自分もそれに賛同して本格的な開発開始となります。

コミットメッセージをまだキチンと書いている

コード書き始めは26時ぐらいで、デザインも上がっていないのでひとまず確実に必要になりそうな部分を書き始めます。

2日目 26:00~

コードを書き始めたとき、正直この時点で眠気がピークレベルまで達していました。(RedBullで翼を授かろうと思ったけど授かりきれなかった)

Android担当2人で、自分がUI担当、もうひとりがデータまわり担当という大まかな役割を決めたので、ここで自分が仮眠を取ることにします。

4:00~6:30ぐらいまで寝ていました。(この裏でもうひとりのAndroid担当も寝ていたそうです)

2日目 7:00~

朝ごはんを食べたりしながら、上がってきたデザインをもとにUI側を作っていきます。

今回のミスの一つが、デザイナー側ではこの入力フォームがMaterial Designにおけるアニメーション付きのEditTextを想定していたのが、普通にこういう背景のViewだと勘違いして実装を進めてしまっていたという点です。

https://material.io/design/components/text-fields.html#anatomy

どちらにせよ、今回のプロジェクトには時間的にもMaterial Components Libraryを使用して入れるのは厳しかったのですが、うまくすり合わせをしておけばよかったなぁという感じです。

2日目 12:00~

16時までという時間制限が迫ってきてやばくなり始める時間帯です。

この時点で完成していたのは通信部分ぐらいで、自分が担当のメインのUIもまだ完成しきっていない状態です。

相方には駅や路線の選択を行う画面を作ってもらいつつ、自分は血眼になりながらメイン画面を作りました。

そしてメインUIが一通り完成したのが15:00、この時点でまだ電話をかけるためのAPIへの接続・結合テストも行われていないので、非常にやばかったです。

コミットメッセージがもはや謎

統合テストで出たバグが非常に軽微で数分で直せるものだったので大丈夫でしたが、謎のエラーとかが出てしまうと考えるとゾッとします。

この後は、履歴の表示部分を簡単に作りながらタイムアップとなります。

プッシュ通知の部分があと一息の部分で完成できなかった(受信自体はできているが、それを通知として表示させる部分ができていなかった)のが悔しい点です。

今回の良かった点、ダメだった点

最初に仮眠をとったのは、最後の追い上げのときのパフォーマンスを維持できたので良かったですが、逆に時間的に追い詰められる事になってしまったので五分五分といった感じです。

また、UI周りの工数の計算をミスって、案が決まった直後は「今回UI工数低いし、iOSも作るか~w」とイキっていましたが、そもそもAndroidすらギリギリという大失態です。

今後

まずは未完成機能の完成、そしてデザイナーが考えていたデザインにとにかく近づけるという作業がアプリ担当としてやらなければいけない部分かなぁと思っています。

シリコンバレーにも行かせていただける事になりましたので、更にブラッシュアップして行きたいと思います。

最後に

チームメイト、他チームの皆さん、SPAJAM運営の皆さん、そして夜遅くにこのアイデアに対していろいろ意見を言ってもらったチームメイトの友人、皆さんありがとうございました。

メディア関連