GA technologiesのハッカソンに参加しました
GA technologiesさんのハッカソンが8/29と8/30にあり,参加してきました. このハッカソンは日常のアナログな課題をXテックで解決するというのが趣旨のイベントです. またメンターの方はサポートだけでなく一要員として開発に加わるため,プロの技術を学べるのが利点だと思います.
何を開発したのか
KizkuAIちゃんというアプリを開発しました. このアプリを一言でいうと,AIが気が利くお知らせを通知してくれるiosアプリです.
機能としては主に2つ.
- ユーザーの動向から,興味のあるニューストピックを解析し,朝,昼,晩の決まった時刻にニュースを通知
- 熱中症や天気に関わる情報をいち早くお届け
今回は下の機能は実装できませんでした. また上の機能に関しても,ユーザー認証周りは実装できたのですが,Railsとiosとの連携が完全には実装できませんでした.こちらに関しては後述します.
なぜ開発しようと思ったのか.
コロナ影響下で一人で過ごす時間が増えて寂しいという意見と,熱中症で倒れる人が多く,事前に通知してくれるだけでも役に立ちそうという意見がありました. 当初は熱中症&コロナの通知アプリにしようとしてましたが,コロナAPIの自動取得が少し辛そうなのと,DeepLearningを学んでいるメンバーがいたのでAIを駆使したアプリを作りたいという思いが一致し,機能として追加しました.
主な構成
アーキテクチャとしては,ニュースを解析しトピックを振り分けるFluskサーバー,ニュース情報やユーザーの動向を保存し,情報を元におすすめニュースをiosに渡すRilaAPIサーバー,ユーザーとニュース情報を受け取り表示するios(Swift)で構成されてます. 私はRails APIの実装を担当しました.
開発1週間前
メンバー,メンターの方との初顔合わせでした.学生のメンバーはそれぞれ全くバックグランドが違っており(ios, DeepLearning, Web),面白くなりそうだなあと感じたのと,開発うまくいくのかなという不安がありました.
話し合いは皆積極的に発言していて,メンターの方のサポートもありどんどん話がまとまっていきました. 課題に対しての着眼点が聡明で,大まかな仕様決定までのスピード感があったと感じます. その週の水,木,金の三日間は集中講義でかなりキツキツでしたが,夜に集まってアイデアだしと技術リサーチ報告,設計などを行いました. 特に設計はメンターさん主導のもと進めてもらい,かなり勉強になる内容でした. 必要要件の理解とそれに対する設計がすぐに思いつくプロに対して凄みを感じたのと,自身の経験の少なさがこの時からすでに浮き彫りになっていて,悔しさを感じていました.
本番
ニュースレコメンド機能を先に実装する運びで,モデルの構築とバリデーションの制定を設計書をもとに行いました. このあたりの作業は普段の開発業務で行っているため,難なく進めることができました.
RailsAPIナニモワカラナイ
しかし問題はこのあとのAPI構築にありました. APIを用いた認証機構を作る時に,どのように作成すれば良いのかイメージが湧かず,メンターさんとペアプロしながら助けていただきました. しかしRailsAPIの認証ロジックを理解するのに頭が一杯一杯でビジネスロジックを理解するまで脳が追いつかず,ある処理がどのような背景で記述されているのか理解が追いつかなくなってきました. 2日間という短い時間の中で,新たな仕様の追加や変化に対して脳のリソースを割り振ることができず,わからない仕様がさらにわからないくなるという悪循環が生まれてしまいました. メンターさんの作業スピードに僕がついてこれず,結局頼りっぱなしとなってしまったことを猛反してます...
逆にデプロイの部分ではHerokuの知識が少しあったので,メンターさんに意見を述べながらデプロイを進めることができたと思います.
成果(Railsサイド)
できたところ
できなかったこと
- iosにニュース情報を渡す処理
- ユーザーが見た回数を記録し,ニュースのレコメンドに使用
iosとの連携がほぼうまくいってないのは悔しい結果となりました. 圧倒的にAPIの知識が足りず悔しい結果となりました.
機械学習サーバーとの連携が取れたのはよかったです. 機械学習有識者がapiサーバーも立ててくれて,思ったより高い精度で分類されたデータが取得できたので頭が上がりません🥺
プレゼン
プレゼンは他のメンバーの方が発表してくださったのですが,とてもわかりやすい発表だったと思います. 人工知能を使ったアプリは僕たちだけだったので,インパクトはかなり強かったと自負しています.
質問答えられず
iosとの連携がどこまでできたのかについて問われたのですが,どこまでできたのか完全把握ができておらず,答えることができませんでした. これはある実装に手間がかかったため,その他の実装をメンターさんに任せっきりとなってしまった結果,状況を完全理解できずに起こってしまった結果となりました. プレゼンの打ち合わせ時間が個人的にがあまり取れていなかったため,作業を中断してでも入念にやり取りを行うべきだと学びました.
結果
優勝とはなりませんでしたが,かなりいい線までいっていたらしいです. メンバーの強みを生かした構成でアプリを開発できたのはよかったと思います. アイデアはかなり自信があるので,未実装部分を実装してどこかでリベンジしたい...!
所感
業務等でRailsを数年前から触っていて,それなりに理解したと思っていたのですが,「完全に理解した」レベルだということがわかりショックでした. 知識不足で足をひっぱってしまったなと感じてます. APIに関しては最近実装する機会があり少しだけ理解していたつもりでしたが,応用となるとイメージが湧かず,まだ身についてないことを痛感しました. やはり慣れていないことは応用できないですね. 今まで比較的簡単な構成で開発してきたので,jsonでネイティブクライアントとやり取りを行う構成で経験を積まなければならないと感じました.
また仕様についてですが,より細かく文書化すればよかっと感じています. 準備段階での仕様書は作成していましたが,本番中は口頭でのやり取りで,共通認識が取れていなかったのが反省点です.
これから
技術においてもハッカソン全体においても,やはり「慣れ」は重要で,経験してるのとしてないのとでは絶対的な差があると感じます. 今回は慣れない環境の中,技術的なことに脳のリソースを全振りしてしまい全体を見渡せていなかったと思います. 技術的な点については知識を積む必要がありますが,ハッカソン全体に関して言えば経験を積んで慣れていくしかないのかなと考えています. 今回は反省点がたくさん見え,わからないところがわかったので良い経験になりました. 次は今より全体を俯瞰できるよう修正し,ハッカソンという状況下で爪痕を残せるように頑張ります.