今年も 5 月に開催された「GIS コミュニティフォーラム」の開発者向けセッションでは、開発者向け ArcGIS 製品での開発手法や事例についてご紹介しました。毎回、このセッションの休憩時間では"ブレイクデモ"と称して、GIS を駆使したゲームを皆さんに披露しています。今年はジオフェンスを活用した参加型のゲームでした。
今回はこのゲームの開発後記として、実際に開発したメンバーに、開発・セッションを終えての感想や ArcGIS での開発メリットなどをざっくばらんに語ってもらいました。
※ジオフェンスとは?
ジオフェンスは、仮想的な地理上の境界線を表します。スマートフォンなどの位置情報を利用して、特定のエリアに入った/出た人に対して、アラートメールやクーポンなどの特定の情報を送るために利用されています。
まえおき
このゲームには主に 3 つの技術が使われています。
ゲームのプレイ開始前に、まずはセッション参加者が 2 つのチームに分かれて、各チーム内でプレイヤー(1 名)とサポーター(その他)を決めます。プレイヤーは端末を持って屋内を歩き、サポーターはプレイヤーがどこへ移動するかを予想して Web アプリ上の屋内地図にジオフェンスを入力します。
プレイヤーが自分のチームメンバーが入力したジオフェンスに入れば加点、相手チームのジオフェンスに入ったときには減点されるというルールで、時間内での得点を競います。
3 つの技術要素は次のように組み合わせて実現しました。
開発後記
それではここから、開発者インタビューに移ります。
以下の 4 人のメンバーが開発しました!役割と開発内容は次の通りです。
松浦(松):GeoFencing / ArcGIS GeoEvent Server (以下 GeoEvent)でのリアルタイムイベントの制御。
布川(布):Supporter App / サポーターがジオフェンスを入力する Web アプリを作成。ArcGIS API for JavaScript で実装
小澤(小):Player App / プレイヤーが操作するiOS アプリを作成。ArcGIS Runtime SDK for iOS で実装
神谷(神):Monitor App / 会場で両チームの得点やプレイヤーの現在地が確認できるモニター アプリを作成。ArcGIS Runtime SDK for .NET で実装
Q:このブレイクデモを作成するにあたって、苦労したところなど感想を聞かせてください。
布:あんまり苦労しませんでしたよね。
松: ArcGIS 製品はプラットフォームとして組み合わせてできる製品ということをある程度理解していればスムーズに開発できる。これはそれの最たるものでした。
神:開発メンバーそれぞれで何を作るのか役割がはっきりしていたので、個人で作る部分は楽でした。
小:プレイヤーに使ってもらったネイティブ アプリ開発も、特に苦労はしませんでした。
Q:サーバー サイドや Web アプリ、モニター アプリやプレイヤー アプリなど、コーディングは大変ではなかったですか?
神:モニターアプリは、WebSocket という技術で、ジオフェンスの情報やプレイヤーの現在地を表示しているのですが、.NET でこれを扱うためのライブラリが用意されているので、思っていたより簡単にやりたいことが表現できました。あと、モニター アプリは 3D で表現したのですが、もともとは 2D の屋内構造のデータでした。ArcGIS Runtime SDK for .NET を使うと、3D に特化した知識がなくても 2D のデータをもとに 3D 表現ができます。
小:プレイヤー アプリの実装は、屋内測位には IndoorAtlasを使用しました。SDK も公開されていて、使い方も簡単でした。WebSocket も以前に使ったことがあったので、苦労なく実装できました。GIS 的な部分というよりは、ゲームの残り時間の表示とか得点の表示方法についての方が時間かかったかな。
布:サポーターがジオフェンスを打ち込む Web アプリの部分では、打たれたジオフェンスをデータとして追加するということを実装しました。ArcGIS API for JavaScript を使ってタップしたポイントからのバッファーをArcGIS のクラウド上のデータベース(フィーチャ サービス)に追加し、一定時間経ったら消すという処理を書きました。あと、バッファーが消えるまでは、次のバッファーを作らせないという制御も行いました。setTimeout を使った簡単な処理です。
松:サーバー サイドはコーディングという点での作業量はゼロでした。ただし、GeoEvent が取得したデータをどのように処理するかについてはモデルを組んで対応しました。
左から、プレイヤーアプリ(iOS)、サポーターアプリ(JavaScript)、モニターアプリ(.NET)
Q:開発中にはサーバーと Web アプリの部分で通信がうまくいっていないこともありましたよね?
布:HTTP/HTTPS の違いでデータの受信がうまくいかないこともあったので、ここだけ何度かトライアンドエラーで実験しましたね。
松:まあそれも、ArcGISプラットフォームを使って開発しているのでそれがすぐ判断できたし、エラーがあるとすればここだと見当がすぐにつきました。
Q:一番コーディング量が多かったのは誰ですか?
布:小澤さんじゃないの?
小:コードだけなら 2 日くらいかな。
神:モニターアプリもそんなにしてないです。
布:松浦さんゼロですよね?
松:GeoEvent の設定だけ。だたし、どんな設定が必要かとか、例えば WebSocket を何で通せるようにするかとかプロキシ的なことを IIS にやらせたりとかということはしたけども。
Q:コード レスでできる部分もあるんですね!
松:それが ArcGIS だから!サーバーサイドの設定でなんとかできる部分が大きい。
Q:もっと楽な開発手法ってありますか?
布:もう、これ以上楽な方法ってあまり思いつかないな。
松:最高のプロトタイピングツールです。
布:ほとんどコーディングしてないもんね。
Q:結局、どれくらいの期間で開発しましたか?
松:全部まとめたら 1 人日くらいしか稼働していない。
布:1 人日も稼働していないかもしれない。
神:オモッタヨリカカラナカッタ。
松:全部足しても…
布:実験込でも 4 人合わせて 1 週間くらいだと思う。
Q:GIS 的にチャレンジした部分について聞かせてください。
松:GeoEvent は動的にイベントをとらえられる機能をそろえているけれども、ジオフェンスが今回のブレイクデモのように高い更新頻度でかつ動的に使われるケースは少ない。動的というのは、増えたり減ったりするという意味です。例えば、動いている車と車の近接関係を知りたい場合には必要な処理かな。ゲームの中では、高い更新頻度のジオフェンスを GeoEvent がうまく扱えるかどうかというのが一番の不安だったかもしれない。
Q:・・・
松:GeoEvent は今回、2 つのリアルタイム データを扱っていました。ひとつは、プレイヤーの現在位置で、もうひとつはWeb アプリから作成される動的なジオフェンスのデータです。プレイヤーの現在地はストリームでもらっているんだけど、動的に変化するジオフェンスのデータは 1 秒に 1 回 ArcGIS のクラウドから取得し、メモリ上に展開して得点を計算しています。大事なのは、この GeoEvent が扱う動的な 2 つのデータの処理結果が、このゲーム ユーザのリアルタイムな体感に合うのかっていうところでした。
小:会場には 50 人はいたね。
神:50 人は一斉にジオフェンスを打つことができるのだから、GeoEvent はよく処理を裁いているよね。
布:サポーターが打ったジオフェンスとプレイヤーの現在位置がはっきり合ってちゃんと計算できないとゲームとしては?になっちゃうよね。1 秒間隔で読み出しって、例えばオンラインのゲームで言えば、人の操作とシステム上の整合性を保証するのが 1 秒っていうのはめちゃくちゃ遅い。ゲームとしては不十分だけどシステムとしては対応できる範囲であるでしょう。そもそも、こんなに短時間でジオフェンスを打ち込むっていう動作やニーズは少ないと思う。
松:2 つの動的な要素を同時に扱って、違和感なく結果を返すことができた GeoEvent は、このブレイクデモを通してパフォーマンスなり信頼性を証明できるかな。
Q:屋内測位の観点からはどうでしょう?今回、屋内測位は IndoorAtlas を使っていましたよね?
小:当日会場で屋内測位を行うための準備は、時間が足りるかどうか心配でした。会場も限られた時間しか測位の時間に充てられないし、セッションの発表などこのイベントでは役割もあって。測位に必要な地磁気のデータは会場の隅々まで歩いて取得します。それを当日限られた時間でやるっていうのはチャレンジでした(笑)
全部で 4時間くらいかかったかな? IndoorAtlas の地磁気を取得するためのアプリを使用して取得するのだけど、一回の観測で精度が良くなかった箇所は取り直したりしていました。
布:会場のいたるところで、測位中の小澤さんをみかけました。
神:地磁気のデータの取得や屋内測位の精度ってどんなところで決まるのですか?
小:地磁気データ(フィンガープリント)の取り方かな。事前準備がすべてと言っても過言じゃない。今回は精度を上げるためにビーコンも会場に配置して精度を高めました。
Q:IndoorAtlas のいいところってどこでしょう?
小:屋内測位を行うためのアプリやクラウド サービス、測位データを扱うための SDK など全部まとめて提供しているのが IndoorAtlas。使いやすかった~。
当日はこちらのビーコンを設置して事前準備しました。
Q:GIS 的な仕組みに沿って別のテーマに応用できますか?
松:いくらでもできると思います。例えば、スーパーとかで買い物カゴにタグが付いていて、レジ前にジオフェンスが張ってあるとします。、レジ前に列ができたらアラートを出しつつ全員が動いている様子がデータとして蓄積できるから、店員の配置が適切だったか…なども解析できます。
Q:サーバーは GeoEvent のデータを解析することができるんですよね?
今回のブレイクデモでも、人の歩いた様子と一緒に失点したり得点した時のデータを蓄積しているので、あとから得点の情報だけ抽出することができる。また、それがビックデータになっても対応できるようになっている。GeoEvent は、ビックデータにも対応できるようになってるんだもんね。
布:すごーい
小:美術館とかもいいですね。絵を見ている人の動きを解析して絵画の配置とかルートを考案するとかね。どのくらい見ている人がいるかという解析もできる。歩いた軌跡からのルートや、属性とかを照らし合わせて最適な配置を検討するとかは ArcGIS の活用ポイントかな。
神:ほおおおおお
Q:最新の GIS を駆使したブレイクデモだったんですよね?
布:GIS 的には真新しい機能という部分はないかな。
松:影響の大きい部分としては、屋内測位の IndoorAtlas かな。
松:IndoorAtlas は本当にすごい!感動した。
布:IndoorAtlas がないと今回のデモは全部成り立たないよ。GIS 的な要素はジオフェンスくらいかな。
小:会場測位の精度は非常に感動した!
Q:当日参加したお客さんの反応はどうでした?
神:みんな下を向いて、もくもくとジオフェンスを打ち込んでた。
布:ゲームの内容も、いい感じでせめぎあっていた。GIS を使って一度に大勢の心を動かすことができる。
小:プレイヤーのお2人も積極的に会場内を歩いてもらえたのも、いい内容に繋がったかな。プレイヤーやっていただいた方にはお礼の品を渡す予定だったのに渡せなかったー!
神:!!!!(来年もきてくださーーーい)
プレイヤーの方もサポーターの方も GIS ゲームを楽しく体験していただけた、かな?
Q:このブレイクデモについて改善したいところはないですか?
布:モニターアプリの UI くらい...実験的というニュアンスも伝えたかったのであまり作りすぎないという点では今のままでよかった。
神:3D ダンジョンを歩いているみたいとか、切り替えを入れるとか、そういうチャレンジはしてみたかった。
小:プレイヤー アプリは AR 連携もやりたかったけど、実装まで至らなくて残念でした。
布:全体として、ひとりのエンジニア スキルというよりも、チームでやることに対してのスキルも必要だった。
松:ひとつの製品についての理解だけではダメだったかな。開発メンバーは割と他メンバーの担当製品も知っている。
布:全員かはわからないけどw
松:ArcGIS のほとんどの製品を触っている人というのは必要だったかな。
まとめ
ロングインタビューになりましたが、ここまでご覧いただいた方、ありがとうございました。また、Developer セッションにお越しいただた方、積極的にブレイクデモにご参加いただきありがとうございました。この記事を通して、GIS の楽しさや GIS 開発者の熱いチャレンジ、GIS に対する想いなどを感じとっていただけたら幸いです。
インタビューを終えて、開発メンバー総じてよくできたのひとことに尽きていて筆者(インタビューア)はとても困りましたが、セッションが終わってもなお、新しい技術と連携したり改善したい部分が挙がるというのは、ArcGIS 製品を使ってコアの部分の開発が比較的あっさりクリアできたからなのかなと思います。
GIS コミュニティフォーラムの Developer セッションでは、毎年 GIS を駆使したデモを参加者のみなさんに体験していただいています。今年は屋内測位とのコラボでした。来年は一体どんなブレイクデモをみなさんにお見せできるのでしょうか?どうぞ、次回をお楽しみにしててくださいね。
今回の開発者たち。お疲れ様でした!
関連リンク
ArcGIS 関連ページ
・ArcGIS for Developers 開発リソース集
GeoDev Meetup 開催レポート
・GeoDev Meetup – RESAS API ハッカソン予習・復習会 開催レポート
・GeoDev Meetup – RESAS データ可視化・解析もくもく会 開催レポート
・GeoDev Meetup #3 - 地図で使える RESAS データ作成・可視化もくもく会開催レポート
・GeoDev Meetup #4 - 地図データ可視化・アプリ作成もくもく会開催レポート
・GeoDev Meetup #5 - 地図データ可視化・アプリ作成もくもく会開催レポート
・GeoDev Meetup #6 - 地図データ可視化・アプリ作成もくもく会開催レポート
ESRIジャパン RESAS 関連ブログ
・ArcGIS を使って RESAS API データをビジュアライズしてみよう!
・大解剖!ハッカソン最優秀賞作品 「Tsuredatsu」 From RESAS x Japan Hackathon ~地域の連鎖をデザインしよう!~