LINE BOOT AWARDSの学生ハッカソンに参加して半日で飲み会提案botを作った話

あらすじ

9月29日に京都で開催されたLINE BOOT AWARDSの学生向けハッカソンに参加し、そこでLINE Messaging APIを使ったプログラムをチームで制作して、「飲み会提案bot」というアプリケーションをローンチしました。惜しくも賞は逃しましたがショートコントの受けは良く、パーティーで10人くらいと連絡先を交換しました。

f:id:silloi:20180930204729j:plain

linedev.connpass.com

コードと技術記事

コードはGitHubで、技術記事はQiitaで公開しています。

github.com

qiita.com

前日

開催前日、接近する台風24号の影響により、土日の2日間が予定されていた期日が1Dayに変更される旨がメールで通知されました。それに伴い、資料を参考にLINE Botおよびスキルのハンズオンを終えて来るようにとの指示が下りました。そんな、と思いつつ夜中の26時くらいに一時間くらいかけて書いてある内容を終えました。Herokuなどの設定が済んでいたこともあり、デプロイするところまで簡単にできました。

 

オープニング〜アイデアソン

雨の中、20〜30人の学生が会場を訪れました。おもむろにオープニングが始まったのでプロジェクションを見ていました。

イベントについてと技術面の簡単な紹介が終わった後、個人参加者は近くの参加者と4人程度のグループを作り、アイデアソンということでマンダラチャートが書かれたシートが参加者に配られました。マンダラチャートはプロ野球の大谷選手が目標達成ツールとして用いていたことで以前話題となりましたが、マンダラートという名前で発想法としても使われているようです。

swingroot.com

写真を撮ってくるのを忘れましたが、僕は真ん中に「酒」と書いて単語を色々書き込みました。その中からキーワードを一つ選んで、それに関するアイデアを1枚のスライドに落とし込もうという流れになりました。当初から飲み会に関する何かを作ろうと考えていたので、僕は飲み会に関するスライドを2枚書きました。その後、他の参加者のスライドを見て回り、よさそうなアイデアには星をつけるというのをやったところ、飲み会提案botというアイデアに9つの星がつきました。

f:id:silloi:20180930202529j:plain

僕としては他方のアイデアを採用したかったのですが、このあと星が多い上位5つのアイデアを基にチーム編成がなされたので、その案はとりあえず引っ込めることにしました。メンバーは意外と集まらなくて、結局2人で制作することになりました。

制作

チームメイトは学部二回のPythonスクレイピングとか機械学習やりたいっていう勢いのある子で、APIで居酒屋情報を取得するという今回の目的にとってはちょうどよい組み合わせでした(彼自身はAPIスクレイピングを混同していたようですが)。居酒屋の情報はぐるなびが提供しているAPIで取得できることはすぐにわかったので、彼はそれを利用して居酒屋情報を取得するプログラムをさっそく書き始め、自分はとりあえずbotが動くようにチャネル(LINE@アカウント)の作成とサンプルbotの実装を進めました。

正午になるとランチとして弁当とお茶が提供されました。3種類あったのですが一番人気の焼肉とんかつ弁当は秒でなくなりました。後でTwitterハッシュタグ #linebootawards 見たら画像あげてる人みんな焼肉とんかつ弁当で笑った。

チームメイトの彼は速攻で食べ終わってプログラムの続きを考えていたので、自分もどんなbotにするか考えていたら、テクニカルエヴァンジェリストの立花翔さんからbotが送るメッセージの便利なテンプレ作成サイト(繁体字)を教えてもらいました。

その後わりと我々のチームは首尾よく作業が進む感じになり、LINEのサポートの人たちに助けを求める機会がなかったのはひょっとするともったいなかったかもしれません。ともかく僕はQiitaの記事とか参考にHerokuにデプロイしてみたらbotとしてちゃんと動くようになり、ひとまず完成への見通しがつきました。

その次にメッセージ内容の変更に着手しました。Flaskを使って書かれているプログラムを触るのは初めてだったのですが、コード眺めていたらどの箇所に当たるかがわかったので書き換えてみたらできました。この箇所にAPI叩いて出てきた結果を投げればメッセージとして送信してくれることになります。

で、チームメイトの彼の方はというとデータをJSON改めCSV形式に落とし込むところまでは実装できたものの、APIに投げる対象が地区名ではなくそれに対応する数字4桁のコードではないといけないということで、色々迷いながら地区名とコードの辞書を作る形で実現していました。その結果いくつかの地区にのみ対応という形になったのですが、後でぐるなびAPI一覧見てみたら「エリアSマスタAPI」というのを使うとこのコードを得られたみたいです。

api.gnavi.co.jp

これらのコードを統合するためにGitHubディレクトリをアップロードして共同開発する形になったのですが、お互い初めてだったので彼がクローンできるまでに結構時間がかかりました。その間に僕はClovaスキルの方でもできないかなとインテントを作成したりしていましたが結局こちらは間に合いませんでした。そんなこんなで彼が書いたコードを自分のスクリプトに乗っけて変数でつなぎ合わせ、同時に自分が書きかけていたメッセージ内容から条件となる文言を拾って地区名を取り出すスクリプトを加え、こんなんで果たして動くのかなと思いつつHerokuに再びデプロイしました。最初は案の定動きませんでした。しかし条件を緩くしていくと居酒屋データ自体はちゃんと取得できており、リストをそのまま吐かせるとちゃんとbotが動くことがわかったので、問題はどうやって居酒屋の情報を1件ずつ取り出すかだなということになり、上から順に取り出すという当初の案を改めてランダムに1件取り出す形に書き換えたところ、数回の試行を経て見事期待通りに動きました。この時には思わずチームメイトと喝采を上げてハイタッチしました。

終了30分前にここまでたどり着いたので、その後の時間は二人ともプログラムの改善に取り組む代わりにTwitterなどでの広報に勤しんでいたようです。

プレゼン、パーティー、結果発表

作業時間が終わり、各チームが作成したbotやスキルのプレゼンが順次なされました。半日という短い開発期間にも関わらず、ほとんどのチームが形になっていたのでびっくりしました。やはりClovaスキルを作ったチームが多かった印象です。スライドがいつ作ったんだという感じによく準備されていましたが、実演は案の定Clovaの聞き取りが悪かったりしていずれのチームももたついていました。自分のチームはスライド作る余裕ないなと思ったので、適当に寸劇やることを考えて発表中にその台本を書き、チームメイトと共有しました。

ちなみにあみだくじの結果、自分たちのチームは最後の発表でした。我々も他に漏れず開始前に機器の接続でもたつきましたが、ショートコントを宣言してからはノリと勢いでなんとかなりました。

京産大の安田豊さんのエキシビジョンとサポーターズの紹介の後、パーティーが始まってピザと酒類などが出てきました。前日もピザとビールを飲んだので二日連続の優勝です。期待通りショートコントのウケは良くて、たまたま参加していた同じはてなのアルバイトの学生や、立命や京造の学生と会話したり、名刺を交換したりしました。

ひとしきりピザを食べた後に結果発表がありました。何のチームが受賞したのか忘れてしまいましたが、自分たちのチームが惜しくも賞を逃したのは確かなようです。賞というよりClovaを狙っていたので残念でした。この思いはLINE BOOT AWARDSで1000万を獲ることで果たしたいと思います。

さてパーティーは終わり、ひとしきりTwitterアカウントを交換し、解散後も駅まで参加者と一緒に歩いていると共通の知り合いがいることが判明したりして面白かったです。あとで確認したらTwitterFacebook合わせて10人くらい連絡先が増えたようです。

感想

ハッカソンは実質初めての参加で、数年前にヤフーのに参加してみたはいいものの自分ではコード書けないしアイデアに賛同してくれる参加者もいないしで、とりあえず他のチームに入ったものの途中で抜けたということがありました(ちなみにその時の自分のアイデアがアプリになったものが最近Twittterのプロモーションで流れてきてショックでした)。今回もLINE bot全く作ったことない状況で作ることになり、ちゃんとコードが書けるのか最初はかなり不安だったのですが、botが動くところまでは割とすんなりいき、コードもサンプル眺めてたらそれなりに理解でき、自分でも意外と書けたのでびっくりしました。Clovaスキルを作るのはもっと簡単だったはずで、LINEのような会社がこうした開発環境を提供しているのは大事なことだなあと感じました。

今回は半日でそれなりに動くbotを開発し、ローンチの後LINE BOOT AWARDSにもそのまま応募してしまいましたが、LINE botやClovaスキルがわりあい簡単に作れてしまうことがわかったので、個人的にも便利なサービスを作っていきたいと思いました。またLINE BOOT AWARDSは10月10日まで応募できるので、今回採用しなかったアイデアを締切日までに実現し、1000万円と言わず5000兆円を狙って応募してみようと思います。