DKS ver.2 & ガラポンアダプタを作ってみた

Avatar
dstn

開発部の土岐です。

再びDataSpider Kujibiki SolutionことDKSです。
「いつまでくじ引きで引っ張るんだ!」「どれだけお前はくじ引きが好きなんだ!」という心の声を押し殺しながら迎えた今回。
涙のDKSシリーズ最終回、「DKS ver2.0 & ガラポンアダプタリリース」の巻であります。

MIJSコンソーシアム
オンラインセミナーでくじ引き!?


さて以前書いた通り、社内パーティでの使用がバグを露呈したまま終わったDKS ver1.0。

「もはや挽回の機会は無いのか・・・」

と、もやもやしつつも、いつの間にか忘れたりしていました。
そこに、まさかの再活躍の場が降って沸いたことから話は始まります。

弊社の新規事業開発兼海外展開担当部長、亀井からの話。
MIJSコンソーシアム・プロダクトビジネス推進委員会が主催するオンラインセミナー「MIJS 3時間ライブセミナー  ~ITの力で日本を元気に!~」にて、参加企業が提供する景品の視聴者への抽選会があるとのこと。

 mijs

プロダクトビジネス推進委員会に参加している亀井が、ここでDKSを使用したくじ引きを行ってはどうか、ということを提案した結果、なんと採用。
そして私に話がきたというわけです。

全世界に向けて放送されるオンラインセミナー。

身内しかいない社内パーティとは訳が違います。

そんな晴れ舞台に、前回のままのDKSを使用して良いわけがない!
見栄え、安定性を向上させた夢のDKS ver 2.0をここでリリースでしょう!
とこの時点では何のアイディアも無いのにリリース宣言をして、プロジェクトがスタートしました。

ソーシャル+クラウド+ガラポン = DKS ver 2.0
夢のくじ引きデータ連携


まずは仕様概要を検討します。

今回の抽選の参加条件は、 twitterで”#MIJS3”というタグをつけて呟くことでした。
まずはそのtwitterユーザーを拾うという機能がDKS ver2.0には必要です。

ここでは、弊社でプロトタイプが既に作成されていたtwitterアダプタを活用することにしました。
おお、ソーシャルだ!

さて、DKS ver1.0では、当選者の名前をファイルに書き出し、それを外部アプリケーション起動アダプタで開くことによって発表としていましたが、それでは何とも寂しい。
何か手段がないか・・・と考えていたところ思いついたのが、Google Spreadsheetアダプタ。

DataSpiderのGoogle Spreadsheetアダプタの書き込み処理でシートに書き込んだ場合、書き込んだシートをブラウザで開いていると、リアルタイムでその書き込んだ内容が反映されるんですね。
Google Spreadsheetアダプタ凄い!
(ではなくて、凄いのはGoogleです)

これでクラウド要素注入!!
盛り上がって参りました。

というわけで、まずはそのtwitter検索→スプレッドシート書き込みを行うスクリプトがこちら。

script1

途中でmapperの「グループ化」があるのは、複数回発言したユーザーは複数取得されてしまうため、それを1つにするための処理です。

これによりまずは対象者を取得してGoogleスプレッドシートに書き込む処理が完成しました。

さて問題は、当選者をランダムで決定する抽選箇所。
ここで私にとっておきの秘策がありました。

いかんせんソーシャルだクラウドだと騒いだとこで、
ビジュアル的なインパクトに欠けるこのDKS ver2.0。

ここはDataSpiderのアダプタSDKを使って独自アダプタを作るしかない!
というわけで「ガラポンアダプタ」の開発に着手します。

世界初のビジュアル系アダプタ
ガラポンアダプタ


ガラポンアダプタを作るにあたって、1つだけ決めていることがありました。
それは「アイコンをでかくする!」ということです。

これは裏技的な使い方なんですが、アイコンの画像ファイルはDataSpiderのStudioで表示させた場合、元の画像ファイルの大きさのまま表示されます。
アダプタの開発時、うっかり画像サイズをリサイズし忘れたことにより発見されたこのテクニック。
(ちなみに残念ながらStudio for Webでは使えません)
はっきりいって業務でやったら怒られますが、
ここで使うしか無い!

というわけでできたのがコレ。

garapon1

デカい!

さらに、このような大きいアイコンのアダプタを使ったスクリプトを実行すると・・・

garapon2

実行マークまででかくなる!

というわけで、このアイコンに。
社内に見せて反応を伺ったところ、なかなか好評でした。
しかしその中で「これ回ったら凄いね~」という反応も。

そう言われると動かしたくなるのが開発者のサガ。
でも当然、SDKにはそんな機能はありません。
(というかそんな要件、普通あるわけもありません)
何とかできないか、と思って試しにアニメーションGIFを使ってみたら

operation.garapon

びっくり動いた!
というわけで反則的な機能を駆使してガラポンアダプタが無事完成・・・・!

って肝心の話を忘れていました。
実際の仕様詳細です。
というわけでスクリプトとガラポンアダプタの仕様詳細の話。

2段階の抽選
対応するための仕様とは?


DKS ver 1.0では、当選者のみがテキストエディタで表示される仕様でした。
それだけでは、当選するまでの緊迫感にかけてしまうという印象がありました。

「当たるか、当たるか、外れた~」
みたいな当選までの過程を楽しむような見せ方をしたいですね~、という話を亀井として、
考えたのがこの2段階の抽選の仕様。


(1) 当選者全体から、当選候補者を5人無作為に抽出して表示する
(2) その中から1人1人落選者の名前が消えていって、最後に当選者の名前のみが表示される


これを実現するために、ガラポンアダプタは以下のような仕様としてみました。]


・入力データ・出力データはテーブルモデル型
・入力されたテーブルモデル型のrow要素から、無作為に抽出された指定された数のrow要素を当選として出力する
(※) 抽出する実装はJavaのjava.util.Randomクラスを使用
・出力の方法には2種類あり、プロパティで指定できる
(A) 当選者のrowのみ出力する
(B) 当選者以外のrowをnullとして出力する


具体的には、以下のようなデータが入力データだったとします。

<table>
<row>
<column>山田</column>
<column>太郎</column>
</row>
<row>
<column>田中</column>
<column>一郎</column>
</row>
<row>
<column>鈴木</column>
<column>明子</column>
</row>
</table>


当選者を「1」名として2つめのrowの「田中」さんが当選した場合、
「(A) 当選者のrowのみ出力する」では、以下の田中さんのrowのみのデータが出力されます。

<table>
  <row>
   <column>田中</column>
   <column>一郎</column>
 </row>
</table>


この出力データにより、まず対象者の中から当選候補者を抽出してGoogleスプレッドシートに書き込みます。そのスクリプトは以下となります。

「(B) 当選者以外のrowをnullとして出力する」では以下の田中さん以外のrowの
columnのデータははnullとなって出力されます。

<table>
  <row>
   <column />
   <column />
 </row>
  <row>
   <column>田中</column>
   <column>一郎</column>
 </row>
  <row>
   <column />
   <column />
 </row>
</table>


このnullになった結果は空文字に変換し、それをGoogleスプレッドシートに書き込んだときに、対象の行に書かれている当選者のデータを削除することができます。

そのスクリプトが以下です。

script3

ループの中で、一人ずつ当選者が減っていき、ガラポンアダプタがその行を空行で出力します。その結果をGoogleスプレッドシートに書き込むことで、
「段々と当選者が絞られていく」
という過程を見せることができるというわけです。

ちょこちょことCSVに書き出し・読み取りしているのは、Googleスプレッドシートへのアクセスは多少時間がかかることがあるため、キャッシュ的にCSVファイルを経由してデータをやり取りしています。

さて最後になってしまいましたが、このシステムの中核を担うガラポンアダプタのプロパティはこちらです。

garapon3

上から、当選者数の指定、データをnullとして出力するかどうか、待機ミリ秒の3つの設定があります。

一番下の待機ミリ秒は、このアダプタの処理をどのくらい一時停止するかどうか、という指定です。
なぜ一時停止をする必要が有るかというと、

garapon4

この再生マークを長い間表示させて印象付けるため、だけ!
こんなとこでも完璧にビジュアル系アダプタであります。

ということで準備は揃いました。
時は来た!

いよいよ本番稼働!
当然のように起こるトラブル!


2012年9月20日、イベント当日。
ノートPCにバッチリ仕込みを完成させ、
スマフォ経由のテザリングによりネットワークも確保。
会場に向かいます。

そしてしめやかにイベントスタート!
イベントの最後、21:00前に行われる抽選に向けて、twitterでハッシュタグ「#MIJS3」を呟くように呼びかける司会の方。
視聴者も続々と増えて、段々とハッシュタグ「#MIJS3」を呟く参加者も増えていきます。

予行練習として、何度か最初の「twitterタグ検索→Googleスプレッドシート書き込み」のスクリプトを実行。
問題なく動くことを確認。
ほっと胸を撫で下ろします。

そしてプログラムとしては最後になる、亀井によるDataSpider紹介プレゼンテーション。
それも終盤に差し掛かり、もうすぐ大抽選会!

大抽選会!

大抽選会・・・・

急にネットワークがまったく繋がらなくなる・・・・・

頭が真っ白になるっていうのはこういうことなんだ、と分かりました。

「CMの後、いよいよ次は抽選会です! 」
告知する司会者。

うわぁぁどうしよう!?
ネットワークに繋がらないと、twitter連携もGoogleスプレッドシートも全く意味無し!
今から作り直す時間も無い!!

なんとかCMを引き延ばしてもらって、緊急ネットワーク探し。
奇跡的に、弊社の社員がモバイルWiFiルーターを持っていました。
急遽ネットワークをそちらに変えたところ、

繋がった!!

こんなにネットワークが繋がって嬉しかったことは生きていて初めてでした。

「準備できました!」
と声をかけて、いよいよ抽選会スタート!

順調に
・twitterの検索→対象者のスプレッドシート書き込み
・対象者から当選候補者5名の決定
・5名から当選者の絞り込み

という流れがうまくいきます。

会場のスタジオは録音しているため私語厳禁で盛り上がりは分からなかったんですが、後で聞いたところによると、当選者の絞り込みのところで
「当たるか、当たるか、外れたーー!」
という思惑通りの盛り上がりがあったようで、ほっとしました。

そして無事イベントも終了。
参加者の方にも「面白かったよ!」とお褒めいただき、大変嬉しく帰路につきました。

いやぁぁぁしかし危なかった・・・・。

終わりに


ギリギリで無事役目を終えることができたDKS ver 2.0リリース&ガラポンアダプタ。
ver 1.0で当選者が連番で当たってしまう機能はガラポンアダプタで乗り越え(ちょっと卑怯ですが)、
ビジュアル性の向上&当選に向けた盛り上がりの演出にも成功。
自分的には満足感を持って終えることができました。

ただ、動作の安定性はまだ課題あり。
まあそれはソーシャル&クラウド連携と決めた時点で、ネットワークに依存してしまうということを抱え込んでしまったわけですが・・・。

ふとした思いつきから始まったDKSプロジェクト。
さすがにやり過ぎたので、ver 3.0は無いと思いますが(しばらくは!)、
DataSpiderでいろんなことにチャレンジする、というのは非常に学ぶことも多く面白いので、 今後もチャレンジしていきたいと思います。

ということで長々となってしまいましたが、読んでいただいた皆様、ありがとうございました。
ぜひ「もっとこうした方がいい」であるとか「こういうことにチャレンジして欲しい」といったご意見・ご感想、お待ちしております!

コメント

ログインしてコメントを残してください。

Powered by Zendesk