3/16 ~ 3/17に大阪で開催されたTrunkハッカソンというものに出場してきました!
結果、優勝して賞金の100万を手にすることができたので今回はそのチーム活動の過程で良かったところと改善点をメインに書いていこうと思います。
大阪のハッカソンでありながら、名古屋からのチームが優勝したということは、これはもう名古屋が大阪より優れていることは間違いない 笑
制作作品
Okonomy(オコノミー)
Tinderのように左右にフリックするだけで、付近のオススメのお店を紹介してくれるというもの。
制作期間:約25時間
チーム内分担
- デザイナー: 2人
- フロントエンド: 1人
- バックエンド兼インフラ: 1人
- 機械学習: 2人
ちなみに自分はバックエンド兼インフラの人です。
制作過程
アイデア出し
TRUNKハッカソンのテーマは『関西の食をテクノロジーで楽しくする』
自分たちのチームは3時間ほどと結構な時間をアイデア出しに割きました。出場チームは全部で17ほどあったのですが、その中で一番最後までアイデアを考えていたと思います 笑 別にアイデアを煮詰めていたとかじゃないんですけどね。最後の30分くらいで100万円を取れるアイデアを、ということで全員ゼロベースで考え直したら案外出てきました 笑
使用技術
- バックエンド: Node.js
- フロントエンド: React
- DB: postgres
- 機械学習: Word2Vec
- インフラ: AWS
メンバーが使える技術から選んだところ上記のような構成に。レビューと画像のセットをネットからとってきて、そのレビューを機械学習の入力として用いています。正直なところ普通にCNNとか転移学習とかでやって欲しかった... DBも最初はDynamoDBとかのNoSQLでしたが、APIが使えないとかでRDSのPostgresに変えました。 Migration機構がNodeだとキツかったのでそこだけはKotlinで書きました。
開発過程
簡単に4 termで分類
- 15:30 ~ 20:00
- デザイナー: 簡単なデザインが完成。
- フロント: デザインを元に作り始める。
- バックエンド: インフラ周りの構築
- 機械学習: データの収集方法調査
- 20:00 ~ 3:00
- デザイナー: プレゼン資料の完成。
- フロント: tinderのスワイプの箇所を実装
- バックエンド: ExpressかいてDBのデータScraping
- 機械学習: モデルを学習
- 3:00 ~ 8:00
- デザイナー: プレゼンの準備
- フロント: 大体のデザインの実装
- バックエンド: RDSの設定でKotlinでデータ投入
- 機械学習: 別のデータ収集方法を模索
- 8:00 ~ 14:00
- デザイナー: プレゼンの準備
- フロント: AmplifyへのデプロイとAPIとのつなぎ込み
- バックエンド: Amplifyへデプロイとプレゼン準備。あとドメイン購入
- 機械学習: モデルを学習してAPI化
Good Points
100万円が取れるアイデアを考えることができた。
他のチームが開発を始め遅れているという焦りを感じながらも、アイデアに妥協せず考え続けることができたのが良かったかなと。アイデアの配分の『新規性』『テーマに沿っているか』という点ではそれぞれ49/60, 45/60となかなか良い点数を貰えたので満足しています。
初対面でもコミュニケーションが上手くとれた。
今回のハッカソンは事前にチームを組んで参加する形式のものでした。ほぼ初対面のメンバーで構成されているうちのチームはどうなるかと不安だったのですが、アイデア出し、要件定義などと結構円滑にコミュニケーションがとれたのかなと。呉越同舟という言葉もありますし、目的が一緒ですと案外うまくいくものです。
Bad Points
デザイナーが2人という貴重なリソースを無駄遣いしてしまった。
開発過程でもわかるのですが、後半明らかにデザイナーが暇になってしまいました。それにも関わらず、徹夜してチームについてきてくれたのは本当に感謝です。フロントで実装できる余裕がないと考えて追加のデザインなどはお願いしませんでしたが、それでもお願いできることは無限にあったなと後悔。
- mockだけでもいいのでspだけでなくpc用のデザインもお願いすればよかった。
- 機械学習のデータ収集などでリソースが比較的空いている間、フロントにリソースを割かせるべきだった。
機械学習サイドともっと情報共有するべきだった
機械学習側の仕様が全く決まっていなかったので、かなり振り回されました 笑。実装はレビューの日本語文章をベクトル化するところまでで終わってしまいました。なんでdoc2vecじゃないのかなーとか思ったり。他にもバックエンドの方であらかじめDBに全部ベクトル化して突っ込むなどの事前処理も共有していただいたらできたのかなと。 ひとえに情報共有の甘さが露呈した感じですね。あと結果論ですが、個人的にはやっぱりCNNでやりたかったなー。
- 情報共有が甘かった
- モデルをよく考えて選んでもらうべきだった
インフラで無駄に時間を喰った。
ハッカソンにおいて時間は一番大事ですので、その時間をFargateの設定とかいうどうでもいい箇所に費やすべきではなかったなと。あらかじめ作成しておいて、Dockerでサクッと載せるぐらいが丁度いいかな。その分を他のメンバーのサポートに回せればもっと完成度が高くなったのかなと。
- AWSはあらかじめ構築しておけば時間短縮できた。
まとめ
テーマが『食を楽しくする』とのことで、グルナビAPIを用いたレコメンド系のサービスが多かったのです。そんな中でOkonomyは
- MLを用いたレコメンドの実装
- フリックだけで使える簡単なUI の2点を評価してもらったのかなと勝手に予想しております。
賞金は新しいパソコンでも買いますかね。ちょうど仕事用のMacBookPro欲しいと思ってたんですよね。
Trunkハッカソンは来年も開催されると思いますので、学生の方は是非出場して見てはいかがでしょうか!