みなさん、こんにちは。HACKstの一階です。
このたび、以前公開した「ご長寿祈願 白蛇様」をベースに、02/17にテレビ朝日系列で放送された神芸2013の観客審査員用投票システムを構築しました!
実にめでたいことですので、記念にこのシステムの技術面の話を軽くしようと思います。(システムの内容はこちらのプレスリリースを参照してください)
開発のきっかけはAndroidタブレットを利用して、100人以上で同時投票を行いたい(しかも1ヶ月以内!)という相談が来たことでした。
期間が非常にタイトなため、普通なら受けようか受けまいか迷うところですが、こんなこともあろうかと(本当ですよ)実験として「白蛇様」を開発していたので、これはいいチャンスだと思い、すぐに「任せて!」と回答しました。
「白蛇様」の経験を生かし、仕様は以下としました。
・100人以上の同時接続=Node.js(実際はiisnode)
・Andorid上でアニメーションが必要だが、期間が短い=HTML+jsで画面を作成
・サーバとのソケット接続=jsでソケット接続
・Androidアプリ=単なるWebView
・Node.jsをサポートしていて、運用/スケールアウトが容易そう=WindowsAzure
~サーバにAzureを利用している以外は普通の構成ですね。
基本順調にシステムを開発していたのですが、途中1つ問題が。できあがったHTML+jsのロジックをAndroidのWebViewに入れてもNode.jsがピクリとも動かないのです。
Google先生にお伺いを立てたところ、iPhoneの標準ブラウザもUIWebViewもNode.js(というかSocket)に対応しているけれど、Androidは標準ブラウザもWebViewもNode.jsをサポートしていないことが判明。
・・・技術的に進んでて自由がきくのがAndroidの大事な取り柄では・・・(T.T)
まあ、駄目なものは駄目なのでAndroidアプリでSocket接続を行うよう変更しました。
ただ、Android×node.jsはまだしも、Android×iisnodeの組み合わせ事例がなく、
githubで公開されているSocketクラスなどを参考にいろいろ苦労したのが、技術的な山場でした。
さほど広くない空間で100台以上のタブレットをどうやってWifiに同時接続するかや、手動でタブレットに作成したアプリをインストールするなど技術以外の所も大変でしたが、非常に楽しい経験ができました!
[投票画面]
HACKistは今後も様々な技術で楽しいものを作っていきますので、ご期待ください!