こんにちは、ECナビでアプリケーションエンジニアとして働いている@chocopie116です。
いやーそろそろ年末ですね。
忘年会の時期も近いですね。

えっ!?ちょっと早いって!?
そう思う人は、ここでそっと画面を閉じてください。
あなたが呑気に生きてる間に、幹事様は年末どうしようと一生懸命悩んでいます!!w

さてここからは年末の忘年会ネタどうしようと悩む幹事の人だけ読み進めてください。

・はじめに
今回のエントリーでは、忘年会どうしようと頭を悩ませる人たち向けに、VOYAGE GROUP総会で開発したクイズシステムを紹介します。

弊社VOYAGE GROUPでは、半期を通じて活躍した人材・プロジェクトを表彰する総会が年2回あります。内容としては、2部構成になっており、1部は全社の振り返りや、表彰式が行われます。2部では所謂オモシロコンテンツが催されます。

ある日、今回の2部のおもしろコンテンツをどうしようか話していました。
VOYAGE GROUPは前身アクシブドットコム・ECナビも含めると創設15周年でおめでたいし、なんか面白いことやりたいよねーという話になり
やっぱりクイズは鉄板だよね!!という話になり、
全社員300名弱を巻き込んだクイズ大会というアイディアに決まりました。
サービスイメージ図
こういう感じのサービスならきっと世の中であるだろうと思い、google先生に、"クイズ 忘年会"、"クイズ 結婚式"、"スマホ クイズ システム"といった切り口で聞いても、既にクローズしているサービスが多く、利用できるサービスはありませんでした。

・なので、つくってみました
とりあえず構成はこんな感じで。
クイズコンテンツ概要
クイズの面白さを際立たせるため参加者を巻き込んだ出題VTR・解答VTR等は、WEBでやろうとするとリッチな表現の要求により爆死することが目に見えているので、DVDの映像を使います。
回答結果や、ランキング表示の部分のみスタッフ(管理者)のPCを使いウェブアプリをひらいたブラウザをスクリーンに映します。
つまりスクリーンではスイッチャーを用いて、シームレスにブラウザとDVDプレーヤーの映像を交互に映します(実はこのからくり、実際にあの場でいた人たちも気づかなかったはずです)。

またウェブアプリとして実装する機能もなるべくシンプルにしました。
・簡易ユーザー機能(ランキングの名前表示のため)
・回答機能
・問題の管理機能

・採用した手段
WebSocketや、イベントループ方式のほうがよさそうと思いNode.jsを採用。
インフラは手軽に使えるPaaSのHeroku採用しました。(といってもどちらも実戦投入初で使ってみたかったのが一番の理由w)

・実際の様子
こんな感じで出題(DVD)をして、制限時間内に会場の参加者にスマホで回答ボタンを押してもらいます。
出題

制限時間がきたら、こんな感じで回答結果(WEBアプリ)を表示します。 

回答集計結果
回答集計結果表示の後は、ユーザーの早押しランキングを表示しました。
・時間かけたこと・捨てたこと
新しいことにトライするのは楽しいですが、メインの業務ではないのもあり時間の制約があります。
以下のことを取捨選択しました。

■拾ったこと
ベンチマークテスト・回答受け付け処理の高速化
→制限時間内での回答がさばけるかどうか。想定リクエストが来てもアプリケーションに問題がないかどうか。
→回答受付処理で少し時間がかかる部分は、キャッシュじゃなく直接アプリのメモリに乗せたりして早くした。

■捨てたこと
お前は今まで食ったパンの枚数を覚えているのか?


ちなみにDynoは、一番高いPXのsizeを使いました。
ベンチマークテスト入れても24時間しかぐらいしか稼働させないので迷わずお金で解決にかかりました。
もろもろのサーバー利用料で2000円ぐらい支払いがきていたと思います。

・まとめ
やはり会場参加型のクイズコンテンツは盛り上がります。
また小規模の忘年会で映像つくれないよーという方は、DVDの代わりにパワーポイントのアニメーションを使うことで同等のサービスを提供することができるかと思います。
またスイッチャーがない場合でも、2台のプロジェクターを用意し、出題と回答を同時に表示するなどして対応出来ると思います。うまいことやりくりをしましょう。

さて、このエントリーでは、皆様の年末の幹事業の何かヒントになりましたでしょうか
最後になりますが今回実装したアプリのコードをgithubで公開しました。

node初めてだしーとか、オレオレprivateリポジトリだったしーとか
色々言い訳を挙げればキリはありませんが、もうえいやっと公開してしまいますw
enkai-quiz
それでは皆さんの忘年会 幹事業の成功をお祈りしております!