Googleのイカしたデータ集めツール「Open Data Kit」セットアップまとめ

#Open Data Kit (ODK) とはなんぞや

https://opendatakit.org/
Googleの方がワシントン大学在学中に開発した、**GoogleCloudPlatformとAndroidを使ってデータ集めと可視化をサポートするキット。**
シンプルな質問項目を自分でつくることができ、電波がなくてもデータを集めることができ、それをGCP経由で書き出したり整理したりできる、ということで、アメリカや発展途上国などを中心に、主に社会問題解決のために様々な場所で使われているそうです。


以下適当な訳文。
>
オープンデータキットは組織の作者や地域、モバイルデータ集めの解決を助けるフリーのオープンソースセットです。
>
- データ収集フォームまたは調査をつくる
- モバイル・デバイスでデータを集め、サーバーに送る
- サーバー上の集められたデータを集計し、有用なフォーマットでデータを抽出する
>
ODKは、GPS位置情報と写真を用いた社会経済学的調査・健康調査に加え、臨床医の意思決定を助けたり、複数のメディアに適用可能な自然マッピングツールの形成にも役立ちます。
ワシントン大学のコンピューターサイエンス＆エンジニアリング学部で研究が続けられています。


# どうやって使うの

https://www.google.co.jp/intl/ja/earth/outreach/tutorials/index.html#odk
上記のGoogle Earth Outreachのチュートリアルサイトでもだいたいのことはわかりますが、なぜかチュートリアルのサイトが開けなかったりいろいろうまく行かなかった部分があったので、参考文献とハマりポイントなどを簡単にまとめておきます。

主に下記の3つの手順があります。

| 手順 | 内容 |
|:-----------:|:------------:|
| **Build** | 質問フォームをつくる | 
| **Collect**   | 回答をアプリで集める | 
| **Aggregate**  | 回答を集約し活用する | 



# Build
>
【参考】
◇ODK公式：Build
https://opendatakit.org/use/build/
◇GoogleEarthOutreach：ODKを使用した携帯端末でのデータ収集入門
https://www.google.co.jp/intl/ja/earth/outreach/tutorials/odk_gettingstarted.html

これらを見れば完璧にできると思います👯
ブラウザ上で質問項目をつくり、できたらSaveしてxmlでエクスポートしましょう。


# Collect
>
【参考】
◇ODK公式：Collect
https://opendatakit.org/use/collect/
◇GoogleEarthOutreach：ODK Collectを使用して携帯端末でデータを収集する
https://www.google.co.jp/intl/ja/earth/outreach/tutorials/odk_collect.html

Android端末を持っている人は、Playストアから「ODK Collect」をダウンロードしましょう。
**Android端末を持っていない場合はAndroidエミュレータを立ち上げる必要があります。**ぼくはAndroidエミュレータ使った経験がなかったのでこれにズッポリハマりました。
上記のODK公式には「Androidエミュレータは不安定でバグだらけだから極力Android端末使ってね」と書いてあります。ぼくもそのほうが良いと思います。

この時点ではまだ自分のサーバーに繋がっていないので**ODK Collectだけでは自分で作ったアンケートは（多分）集計できません。**のでGoogle Cloud Platformでプロジェクトを作ります。ODK Collectが動くのを確認したらAggregateに進む。

## Androidエミュレータを使うときの注意
>
エミュレータに関するODK公式からのアナウンス
https://github.com/opendatakit/opendatakit/wiki/DevEnv-Setup

↑これに沿ってAndroid Studioを動かしたのですが、**仮想端末にPlayストアを入れる方法がわかりませんでした**。のでぼくは下記のやりかたをとりましたが、この辺スイスイできる人ならODK公式どおりにやったほうが良いかと思います。

ぼくは**Genymotion**を使いました。
>
【参考】
◇MacでAndroidを動かす方法（Genymotionを使って）
http://akiueo.hatenablog.com/entry/mac-android-genymotion-201505
◇Genymotion の仮想端末に Google Play を入れる(2015/10時点)
http://qiita.com/snaka/items/9e770f2b8be2a6b2e662
◇How do you install Google frameworks (Play, Accounts, etc.) on a Genymotion virtual device?
http://stackoverflow.com/questions/17831990/how-do-you-install-google-frameworks-play-accounts-etc-on-a-genymotion-virt
↑ここからARM Translation Installer v1.1とGoogle Play for Androidを落としました。この辺もなかなか曲者でした。

結局うまくPlayストアが入ってODK Collectを動かすことができたのは**Nexus5(Android 5.1)**でした。他の仮想端末で4.4.4とか6.0も試しましたがうまく行きませんでした。たぶん他にもうまく動くパターンがあると思いますが試してません。


# Aggregate
>
◇ODK公式：Aggregate
https://opendatakit.org/use/aggregate/
◇GoogleEarthOutreach：ODK Aggregate を使用してデータを管理する
https://www.google.co.jp/intl/ja/earth/outreach/tutorials/odk_aggregate.html

↑GoogleEarthOutreachの解説ですが、**たぶんチュートリアル用に用意してあるサーバー http://odk-tutorial.appspot.com/ が動かない**ので、自分で用意する必要があります。頑張りましょう。上記のODK公式の方に英語ですが詳しいリファレンスがあります。

ぼくはこのタイミングで初めてGoogleCloudPlatformを触ったのと、バックエンドは本当に何にもわからないので相当迷子でした。その辺わかる人ならスルッとできるかもしれません。
初めて触る人は、GoogleCloudSDKを先に入れて、AppEngineチュートリアルは先にやっておいたほうがいいかもしれません。
>
【参考】
◇Google Cloud SDKのインストールと認証の設定について
http://www.task-notes.com/entry/20151019/1445223600


以下ODK公式:Aggregateのざっくり訳。

>
1. Java 7以上をインストール
2. Gmailアカウントが必要。Google Cloud PlatformはProjectを立ち上げたりApp Engineの軽い使用にはお金を要求しない。フリーで使えるレベルを超えるとApp Engineサーバーはカリフォルニア時間の深夜0時から24時間止まる。
3. Google Cloud Platformにアクセス、My Consoleを開く
https://cloud.google.com/
- GCPのプロジェクトを作ったことがなければ、Create an empty projectする。作ったことがあればどれでも良いから選ぶ。
- プロジェクトIDがURLの一部になる**（URL手打ちすることがあると思うので短くしておいたほうがいいです）**
- ODK Aggregateをダウンロードする https://opendatakit.org/downloads/
- インストーラを開き、ローカル保存先を指定し、Google App Engineを選ぶ
- instance nameはAppEngineインスタンスの名前を入れる。
- UserIDは忘れないユーザーIDを入れておく。**ODK Aggregateにログインするときに使う。**
- URLを開き、AppEngineにプロジェクトIDと同じ名前のapplicationができていたら、application idにはプロジェクトIDを入れる。下のチェックはしない**（このAppEngineにインスタンス立てるところハマってゴタゴタしてるうちにうまく回るようになったので、ここの手順違うかもしれません）**
- ODK Aggregate App Engine Updaterを起動、Google Cloud Platformのアカウントのメールアドレスを入れ、Verify Tokenを押すと許可を確認されるので許可
- ブラウザが開きコードが出てくるので、Updaterのしかるべきフォームに入れてOKを押す
- 処理が出てきて最後Succeeded!と言われるのでUpload ODK Aggregateも押す
- またSucceeded!と言われれば多分OK。言われなかったら処理内容に何か書いてある可能性高。言われてうまく動かなかったらAppEngineのインスタンスの設定などを見直しましょう。


ここまでうまくいっていれば、http://プロジェクトID.appspot.com にアクセスすると、**GoogleEarthOutreachの記事のチュートリアル用サイトと同じ画面**になると思います。
ぼくのプロジェクトのサイトを見たい方がいればTwitterなどでご連絡ください！

ここから先は当該記事に従ってログインしていくと、**ODK AggregateインスタンスにBuildで作成したフォームをアップし、端末で回答して送信、集計することができるはず**です。

# ODK Collectアプリから自分のフォームに回答する
[上記の記事の手順に従ってフォームをアップ](https://www.google.co.jp/intl/ja/earth/outreach/tutorials/odk_aggregate.html#uploadform)したあと、[Collectの記事の通りに「プラットフォーム設定の構成」を行う](https://www.google.co.jp/intl/ja/earth/outreach/tutorials/odk_collect.html#serverprefs)と、ODK Collectアプリに自分のフォームをダウンロードすることができます！！やったね！！ぼくはここまで8時間かかったよ！！
<img width="300" alt="スクリーンショット 2016-05-01 0.59.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/77925/46527bb5-9363-9273-06af-50be2ae801d1.png">

あとは左スワイプしながら回答してアップするだけ。そうするとODK Aggregateインスタンスに回答がたまっていきます。

<img width="1277" alt="スクリーンショット 2016-05-01 19.41.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/77925/1ef37a6f-f26d-40d4-d1d3-ba646fd07bc7.png">
いろいろ設定を整えたうえでPublishを押すとデータの書き出しができるようです（まだ試してません）。右上の「Visualize」というところを押すとごく簡単なヴィジュアライズができます。

<img width="1099" alt="スクリーンショット 2016-05-01 19.41.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/77925/55bf86d0-6709-97d3-0c47-e7ab6000e490.png">
エミュレータの偽位置情報です。ぼくの故郷・北海道遠軽町は最高です。

# 以上
バックエンド強くなってGoogleCloudPlatformとかガリガリいじりたいです(´°̥̥̥̥̥̥̥̥ω°̥̥̥̥̥̥̥̥｀)(´°̥̥̥̥̥̥̥̥ω°̥̥̥̥̥̥̥̥｀)(´°̥̥̥̥̥̥̥̥ω°̥̥̥̥̥̥̥̥｀)💻💻💻💻💻🐥💻💻💻💻💻

[FieldHackONAGAWA](https://www.innovationtohoku.com/special/field-hack-onagawa/)たのしみです！！