今日はこのへんで

Webエンジニア。プログラミング、スタートアップについて。もしくはただの雑記。

PwC Technology Hackathon #1 に参加してきた

自分の実力のベンチマークにもなるし、いろんな業界の人の話も聞けるので、ハッカソンや勉強会にはたまに参加している。先週の週末は、PwC Technology Hackathon というイベントに参加してきた。

f:id:Kechol:20170128092856j:plain

会計事務所やコンサルタントファームとして有名なPwCが主催しているハッカソン。今回が第一回目だったそうだけど、2日間の合宿形式になっていて、チームビルディングから始めてプロダクト開発まで行い、最後にプレゼンで優勝者を決めるというものだった。運営はスタートアップアクセラレーターのTechFundが行っていた。

作ったもの

7人のチームとで、Homieという、訪日外国人向けのナビゲーションアプリを作った。

f:id:Kechol:20170201001022g:plain

チャット式のUIになっていて、自然言語でAIと会話できるようになっている。友達が案内してくれるかのように観光案内をしてくれる、というのがコンセプト。

結果としては6チーム中2位で準グランプリということで、今度PwCの偉い人がご飯をおごってくれるらしい。わーい。

技術的には以下のようなフレームワークやAPIを利用した。

  • Rails 5 / VueJS 2
  • WebSocket (ActionCable)
  • Google Maps API
  • Azure LUIS API (自然言語をパースするAIを提供するAPI)
  • Azure Emotion API (画像の表情認識をするAPI)

コードはGitHubに置いた。 https://github.com/kechol/pwchack

当日の進行

当日は大体、以下のように進行した。

  • 10:00 - 12:00 アイデアの共有・チームビルディング
    • 当日は作りたいアイデアがある人が前で発表して、一緒に作りたい人を集めてチームを編成するという形だった
    • エンジニアの数が少なくて人の交換があったりしたけど、最終的にはうまいことチームになっていた
  • 12:00 - 13:00 お昼
  • 13:00 - 15:00 アイデアの具体化
    • PwCの人も交えながら、ユーザの行動などを改めて整理しつつアイデアを画面に落としていった
  • 15:00 - 20:00 作業
    • このへんからgit initしてコードを書き始めた
    • デザイナー陣はホワイトボードに起こしたモックをデザインに落としこむ作業
    • ビジネス陣はAPIをチャットのなかでどう活かせるかをAPIを触りながら模索する作業
  • 20:00 - 21:00 夕ご飯
    • PwCの人が会社についての質問に丁寧に答えていて、よい時間だった
    • ステーキが美味かった
  • 21:00 - 28:00 作業
    • 深夜2時くらいにデザインがあがってきた
    • 作業してたけど能率は全然あがらず…
  • 翌9:00 - 10:00 朝ご飯
  • 11:00 - 15:00 作業
    • APIの実装やデザイン調整を引き続き
    • ビジネス陣、デザイナー陣はプレゼンの作成作業
  • 15:00 - 18:00 プレゼンすり合わせ
    • プレゼンに合わせてデモで流すチャットの文言を調整した
  • 18:00 - 19:00 プレゼン
    • Wifiの調子が悪くてデモしきれなかったのが残念
  • 19:00 - 21:00 結果発表・懇親会

アイデア出しからアプリの画面に落とすまで、比較的スムーズに行ったと思うけど、それでも最後は全然時間が足りなくて、プレゼンの練習をしきれないまま本番、という感じだった。頑張って実装はしたけど実力不足だった。面目ない。

良かったこと

楽しくハッカソンできた

今回はPwCの人も含めて7人という、ハッカソンにしては大所帯のチームだったけれど、みんないい人で楽しくハッカソンできた。

大学生や京都からきている人、起業したばかりの人など、みんなバックグラウンドもばらばらだったにもかかわらず、上手くチームの役割分担ができて、誰も遊ぶことなく走りきれたので、最後には妙に一体感があった。また一緒に仕事したいと言ってくれる人もいて嬉しかった。

きちんとプロダクトの顧客検証ができた

スタートアップアクセラレータが運営しているだけあって、今回は評価基準が技術そのものよりもプロダクトの価値を重視していた。

f:id:Kechol:20170128165830j:plain

アイデアを具体化する段階で、こうした評価基準を意識しつつ、ユーザにとっての価値を考えながら作ることができたことは良かったと思う。一緒のチームの人が実際に友達の外国人にインタビューしてくれて、プロダクトの価値を検証しつつ前に進めたのはよい体験だった。結果的にそうした努力が審査員にも評価されたので、ハッカソンだからといってこういう検証をおろそかにしてはいけないなと思う。なにより、作る自分が納得感を持って進める。

AIに関するAPIを使えた

今回初めて Azure LUIS API というAIを実装するAPIを利用したけど、なかなか面白かった。このAPIは、すでに訓練されたAIのモデルをREST APIで簡単に使うことができて、入力した自然言語をコマンド(Intent)と目的語(Entity)に解釈して出力することができる。

今回だと例えば “I wanna go to tokyo station.” という自然文は builtin.intent.places.find_place という Intent と builtin.places.place_name (tokyo station) という Entity として解釈できる。こうして自然文をコマンド化することで、簡単にチャットでSiriのような機能を実装できるのでなかなか楽しかった。もちろん、ちゃんと専用のコマンドを解釈するようにモデルを作成・訓練することもできる。

残念だったこと

コーヒーの飲み過ぎで体調を崩した

日中コーヒーを飲みまくっていたら夜になって胃が痛くなった。気をつけましょう。

デモを全部しきれなかった

ハッカソン中はWifiの調子がずっと悪くて、ネットが切れることもしばしばだった。他のチームもそうだったけど、デモ中にネットが切断されてしまって、全部やりたいところまでデモできなかったのは少し残念だった。今回は50-80人規模の会場だったけど、ポケットWifiで余計に回線が混雑してしまっていたのかも。

Cookpad TechConf 2017 提供 Wi-Fi の裏側 - クックパッド開発者ブログ など見ているとやっぱり広い会場のWifi運用は大変そうだし、これは今後の運営の課題なのだと思う。

開発の分担がうまくできなかった

今回、エンジニアの人がもう一人いたのだけど、ほとんどRailsやJSの経験がない方だったのでAPIの調査などにまわってもらった。結果としてプロダクトのコードを書くのは僕一人になったのだけど、やはり2日目になってくると他の人がやることないのに僕だけが死んでいるという状況になりがちで、もうちょっとうまくできなかったのかな、と思う。

エンジニア二人いたらフロントとサーバで一人づつが定石だろうけど、今回だと一日目にRailsの環境構築してもらっていたら2日目にフロントを触ってもらうなどできたのかもしれない。

実装の設計をミスった

アイデアの段階でチャット式のUIというのがなんとなく決まっていたのだけど、それを聞いて安易にチャットの実装をしてしまった。例えば、チャットだからWebSocket使うか、とか、チャットのRoomを分けないとと思ってモデル作ったりとか。実際には、AIとのチャットは常にクライアントが起点になるのでシンプルなPOST/GETで実装できるし、Roomが分かれていたりとか、他にもデータが永続化されていたりというのは、デモでは一切必要ないし評価もされないので、単に無駄だったしプレゼンの練習時間も削れてしまった。(まぁ実装するのは楽しいけど。。)

今回はデモでのプロダクトの完成度で負けたと思うので、早めにデモのシナリオを相談して、そこに振り切った実装をしていたらもっと完成度を高めることができていたと思う。ただ、こうした話はハッカソン特有の実装の話だし、加減が難しい。


全体の感想としては、楽しくハッカソンできたし、新しい技術を学ぶ機会や人と出会う機会にもなったのでとても満足だった。会場や食事、宿泊まで無料だったので本当に懐の深いイベントだった。また機会があれば参加したいと思う。ありがとうございました。