概要
大江戸Ruby会議06の「フルタイムコミッター大戦」という企画のために、早押しクイズアプリを作ったという話です。淡々と小学生の日記みたいな感じで綴っていきます
コードはここにありますので、興味があれば読んでみてください。結構小さく作れました
経緯
3/14 の Asakusa.rb のミートアップで、なんかガチャガチャやってる人がいたので、のぞいて見たら、早押しクイズのギミックを作ろうとして苦労してるようでした(コメント欄で Amazon Dash と Action Cable を使って作ろうとしている様子がうかがえる)
ただ、なんか Dash ボタンは遅延がひどくて(1〜10秒)「こりゃダメだね〜」って感じでした
スイッチ
そこで「Dash ボタンもナウいですが、多分、これもまだナウいですね」って感じで、Nintendo Switch を取り出して、まず一時間くらい動作確認をしました
卓球台で卓球ゲームやってる #asakusarb pic.twitter.com/fntMepWoql
— yancya (@yancya) 2017年3月14日
Nintendo Switch の両側についている着脱可能なコントローラー「Joy-Con」は、それぞれを Bluetooth 接続で PC に Gamepad として接続できるという話を聞いたことがあったので、試してみることにしました
横にあるペアリングボタンを長押しすると、Mac の bluetooth 管理ウィンドウに Joy-con(R) みたいな名前で出てきたので、あとは「ペアリング」ボタンを押すだけでペアリングできました
Gamepad API
Joy-Con を Gamepad として接続できたまでは良いけど、こっから、例えば各ボタンをキーボードのキーに割り当てるアプリとかを使って割り当てた上で、その状態を前提に早押しアプリを作るのは面倒くさそうです
そこで色々悪あがき的にググって見つけたのが Gamepad APIでした。
これこそ、まさに「顧客の求めていたもの」という感じの API だと思ったので、早速 Chrome を開いて、コンソールで`navigator.getGamepads()` を叩いてみました。すると、ちゃんと [Gamepad, null, null, null] みたいな Array が返ってきましたので「うおー、すごい。これはいける感」という感じでテンションが上がりました
requestAnimationFrame で Gamepad API を呼びまくれば、Gamepad として認識してるデバイスのボタンやスティックの状態を取得できるというものなので、Joy-Con に限らず、Gamepad ならなんでも使えます
誰が作るの
気がつくと 22:00 を回っていたので「そろそろ帰ります〜」と言って帰ろうとしたんですが、ふと気になって「あの〜、この Joy-Con 使った早押しアプリ、実現できそうなのは分かったけど、誰が作るんですかね」って言ったら「さぁ〜、誰ですかねぇ(チラッチラッ」って感じだったので「あ、はい」という感じでした
「リポジトリがあるならプッシュしていくんで」って言ったら、秒で「(ガチャガチャガチャ!)作りました!owner にしておきましたよ!」って言われて、すごく早いなと思いました(小並感
最初の進捗
帰宅して、早速作り始めましたが、それっぽいものは本当にすぐにできました
Joy-Con が動き始めた pic.twitter.com/5LoHezZaPI
— yancya (@yancya) 2017年3月14日
翌日には、ほぼ早押しの形になっているようです
GitHub ID を入力したらシュッと GitHub アイコンが出てくるようにしたら面白いかなと思って、そういう風にしました
新たな要件
他のメンバーと相談していると、ソラシティ(大江戸Ruby会議06の会場)のネットワークの状況があてにならないとのことで、アイコンの取得についてはインターネットを使わなくてもできるようにした方が良さそうということになり、これが最初の issueとなりました
ローカルの index.html を開いて起動するというコンセプトだったので、色々制約があり、結果的にすごい力技で解決しました
issue/2
「ジャストアイディアです」って普通に使ってる人を初めて見て笑いました
得点の管理は簡単だったのでシュッと出来ました
音のある世界
会場のスピーカーにつなぐ事ができそうとのことだったので、SE も追加することにしました
早速、Garageband を使って適当な SE を作って PR にしてみました
すると「クイズといえばウルトラクイズですよね〜、ウルトラクイズっぽい音が出たらな〜」みたいなコメントが来て「で〜す〜よ〜ね〜」という感じになりました
その後の様子です
Garageband で SE 作ってたらこんな時刻に……
— yancya (@yancya) 2017年3月17日
SE 作り、無限に時間が吸われる
— yancya (@yancya) 2017年3月18日
結果的には結構近い仕上がりになったと自負しています
とりあえず、誰かに見せたい
本番は2日後ですが、当日参加しない人に見せて自慢したくなったので、姫乃たまさんのイベントに行って、そこで飲んでいた人たちに見せびらかそうとしました
今週末18日はRRR(東京都墨田区両国1-3-9ムラサワビル3F)にて定例イベントです。予約不要、入場料千円でふらっと誰でも入れます。ゲストは今年の姫乃たまTシャツにイラストを描きおろしてくれた水野しずちゃん(@320_42)です。17時オープン、18時から、好きなだけ喋ります。 pic.twitter.com/Quq6fU92hY
— 姫乃たま (@Himeeeno) 2017年3月15日
するとどうでしょう。なんと Joy-Con がペアリングできない
Mac の Bluetooth 管理画面を見ると、大量の Bluetooth デバイスの名前がズラっと並んでいて「あっ、これは多分混線的なやつだ」と思って、ちょっとよけたところでペアリングして、こと無きを得ました
その場にいた人たちには結構ウケたので、これはいけるぞという気持ちになれました
そして本番へ
フルタイムコミッター大戦の直前、嫌な予感がしていた
しかし尿意が訪れていたので、ピューっとトイレに行ってサッと帰ってきた
すると、案の定、演台の前でわちゃわちゃしているメンバーたち曰く「ペアリングができない」
二日前に通った道だわー、かーっ、通ったわー
慌てず、サッと Mac と Joy-Con を外に持っていって、みんなで一つ一つペアリングして戻ってきました
そして始まるフルタイムコミッター大戦
フルタイムコミッター大戦はじまる…ッ! #oedo06 pic.twitter.com/i5JerYye7w
— Kakutani Shintaro (@kakutani) 2017年3月20日
すごくいい #oedo06 pic.twitter.com/mdshPDQkop
— 🐶 inumatic (@ken_c_lo) 2017年3月20日
回答ボタンの音がいいなw #oedo06
— さっちん (@sachin21__) 2017年3月20日
フルタイムコミッター大戦、早押しクイズをやるとしか聞いてなかったけど、どう見ても超次元な早押しクイズになってて死ぬほど楽しかった
Asakusa.rb
なんか楽しいイベントがちょくちょく発生して楽しいので、東京の東側の人はもちろん、そうでない人にも、いろんな人に訪れてほしいコミュニティです。Asakusa.rb いいよ Asakusa.rb