Firebaseでスマホアプリビッグデータをかんたんに解析する方法

#はじめに
この記事では、Firebase analyticsを用いたかんたんなスマホアプリビッグデータ分析と活用手法を紹介します。スマホアプリのユーザ利用動向を解析、活用したい人に向けたノウハウをまとめました。具体的には、「ユーザ操作ログの収集」、「ユーザ操作ログの可視化、分析」、「独自ユーザセグメントの作成」、「データを活用したターゲティング」のノウハウを紹介します。
#Firebaseとは
アプリケーションのバックエンド部分（サーバ機能）を提供する
mBaaS(mobile backend as a Service)サービスの１つです。Firebaseを活用することで、モバイルアプリ開発者は様々な機能の、サーバレスで実現することができます。下記に、Firebaseでできることのほんの１例を記載します。この記事ではFirebaseの中でもデータ解析をするFirebase analytics機能を中心に紹介します。
・Firebase analytics：アプリ操作ログを収集し、Webコンソールで可視化する
・Firebase cloud Message：アプリ利用ユーザにプッシュ通知を実現する
・Firebase Remote Config：アプリ内パラメータを定義し、その値をクラウドで更新する

#FIrebaseを用いたアプリ解析構成

Firebaseはさまざまな機能を提供していますが、それぞれの機能は連携をすることができ、この連携をうまく活用することがFirebaseを利用する大きな利点になっています。流れとしては、	Firebase analytics

Firebaseを取り込んだアプリの構成
![Firebase構成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2287743/b5ab0201-72e1-a8d6-1e55-1ad4a8bc48a5.png)

###Firebase analyticsを用いた解析の流れ
Firebase analyticsを用いた解析の流れは
①Firebase analyticsSDKをアプリに取り込み必要な箇所にイベント取得メソッドを仕込む
②Firebase搭載アプリをユーザが利用しFirebaseにデータが貯まる
③Firebaseコンソールにて溜まったデータの可視化、分析
というものです。
![解析流れ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2287743/0ccb1ba6-4967-da2a-a642-8daf16fc623c.png)

#ユーザ操作ログの収集

###データ取得の設計書を作る
さぁ早速Firebase analyticsをアプリに導入したいところですがちょっと待ってください。まずは特に分析したいユーザ利用動向を洗い出し、データ分析の設計書を作りましょう。Firebase analyticsで定義できるイベント数は現在500個が上限で、一度設定するとあとから減らすことはできません。したがってよく考えないとあとで本当に集計したいデータが取得できなくなります。なお、Firebase analyticsが自動で取得してくれるイベントに関してはこの500の制限にはカウントされません。自動で取得してくれるイベントは下記です。

データ取得の設計書ですが、決めなければいけない要素は主に３つです。
1.イベント名
2.そのイベントを計測する契機
3.カスタムパラメータ
設計書の例としてはこんな感じ

| イベント名       | 計測契機 |    カスタムパラメータ    |
|:-----------------|:-----------------|:------------------:|
|screen_home       |ホーム画面を表示した時 |    -            |
|buttonclick_home_setting  |ホーム画面内の設定ボタンを押下した時      |       -       |
| scheme_home_launch|スキーム連携によりホーム画面が起動された時 |  packagename |

１つ１つ解説していきます。
1.イベント名
名前の通りそれぞれのイベントの名前です。ここでつけるイベント名は後々解析の際のコンソールで表示されるので、「命名規則をつける」というのが大事です。下記に例を記します
悪いイベント名の例: 001,002,screen1.screen2
良いイベント名の例: screen_home, buttonclick_home_setting
悪いイベント名は何が良くないかというと、後々のソートや検索がしにくいところです。サービスによっては画面名を001,002と振っている場合もあると思うので、その場合は001とか002というもの（定義された画面名）を使うのは良いのですが、他の情報を _ などで区切って入れた方が良いです。
↑の良いイベント名の例で言うと、
イベント種別_ 画面名_ 詳細動作名
という命名規則としています。このようにすれば、後でコンソール上から検索をかけるときに、ボタンクリックイベントをソートしたいときは「buttonclick」で実行すればbuttonclickが入っているものが全て出てくるので、後々の解析の手間が減っておすすめです。

2.そのイベントを発動する契機
各イベント名は↑で記載したように命名規則に従ってつけられているのである程度はイベント名で想像できると思いますが、細かいイベント計測契機に関しては紐づけてメモして管理しておかないと「あれ、このイベントってユーザがどういう操作したときに計上されるんだっけ？」となってしまいます。必ずメモしておきましょう。

3.カスタムパラメータ
Firebaseのイベントはアナリティクス レポートで報告されるようにカスタムパラメータを設定することができます。このカスタムパラメータを設定した方が良いものに関してはSDKのLogEventメソッドで指定します。記載例で言うと、自アプリがスキーム連携で起動された時に、連携起動元のpackage名をログとして残しておくことができます。


###Firebase analyticsを用いたイベント取得実装

↑で作ったイベントで設計書をもとにアプリに実装を入れます。実装手順は下記の公式ドキュメント通り進めるだけです。
https://firebase.google.com/docs/analytics/get-started?hl=ja&platform=android
このFirebase analyticsを取り入れたアプリが配信されれば、ユーザログがFirebaseコンソール上で溜まります。

#ユーザ操作ログの可視化、分析
さて、いよいよユーザデータを分析しましょう。
手順としては、Firebase consoleから仕込んだイベントのログが溜まっているかを確認します。下記に、Firebase公式のデモプロジェクトで実際の画面での見えを記します。

######Firebase consoleでの取得データの確認
![コンソール１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2287743/20688bf1-2637-8e63-1339-ac73dacba907.png)
自分が実装したイベントたちがこの画面で表示されているかを確認しましょう。もしここの表に表示されていなかったら、ユーザの利用データが溜められていないということになるので、実装に何らかの問題があります。続いて、それぞれのイベントの詳細データを確認します。並んでいるイベントのうちの１つをクリックすると、そのイベント１つにフォーカスしたデータがコンソール上で表示されます。
![コンソール２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2287743/7cfffa76-1c8e-d422-517d-ce8276b3ac08.png)
↑のように、そのイベントが発動した数の推移や合計ユニークユーザ数などが表示されます。こういったデータを元に、アプリの各機能が使われている、使われていないを判断することができます。「この機能思ったより使われてないな」「この機能は土日に多く使われている」等、サービスを改善するために必要なヒントがきっと隠されているでしょう。なお、表示されているデータは「共有」タグからCSV形式とpdf形式でダウンロードすることができます。
#独自ユーザセグメントの作成
サービスを作っていると、「よくアプリを使ってくれている優良ユーザ層」「離脱しそうだけど引き止めたいユーザ層」など、ユーザ層を定義して企画を考えることがあると思います。Firebase analyticsではそういったユーザ層を「オーディエンス」という単位で独自に定義し、後ほど紹介するPush通知やA/Bテスト、広告配信などのセグメントとして指定できます。これは非常に便利で、この独自ユーザセグメント作りとその活用が、Firebase analyticsを使うことの最大のメリットなのではないかと思っています。
####Firebase Audienceの作成
Audienceの作成手順を紹介します。![コンソール３.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2287743/376ede84-4936-d636-a489-fbd87090b3d9.png)![コンソール4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2287743/fc927a63-97f0-272b-abc5-566fccef719f.png)
手順③の作りたい条件の設定が肝です。ここで設定できる選択肢はFirebaseが候補を出してきますが、その候補は「Firebase側がデフォルトで用意している条件」と「アプリに仕込んだイベント」が全て出てきます。これらを組み合わせることで、実質的にどのようなユーザーグループでも登録することが可能です。Firebase側がデフォルトで用意している条件は、
・アプリバージョン
・OSバージョン
・デバイス
などです。一覧は下記を参照してください。
https://support.google.com/firebase/answer/9268042?hl=ja
これらの条件と自分で仕込んだイベントを組み合わせて、例えばこのようなユーザグループを作ることができます。
1.最新アプリを使っていて、かつ広告を10回以上タップしてくれたユーザグループ
2.最新アプリを使っておらず、かつ直近１週間でメイン機能を10回以上使ってくれているユーザグループ
１のユーザグループは、非常に収益に寄与してくれているユーザたちなので、今後も使い続けてもらえるようなにかインセンティブを案内したりしてもいいかもしれません。
２のユーザグループはヘビーユーザなのにアプリはアップデートしてくれていないのがもったいないと捉え、アプリアップデートのお知らせを流すと良いかもしれません。
こんな風に、ユーザを分類しておくことでそれぞれに適した打ち手を打つことが可能になります。具体的にこれらのユーザに打ち手をうつやり方に関しては次の章で説明します。
#データを活用したターゲティング
前章で作成したオーディエンスを元にFirebaseの様々な機能を使ってユーザにリーチすることができます。作成したオーディエンスはPush通知、A/Bテスト、広告表示などに活用できますが、今回はPush通知を紹介します。Push通知はFirebase cloud Messageを使って実現することができます。まずは公式の手順にしたがってアプリにFirebase cloud Messageを実装します。https://firebase.google.com/docs/cloud-messaging?hl=ja
実装を終えたら、Firebaseのコンソール上のCloud MessageからPushを作成し、その際のターゲットユーザ設定で作成したユーザオーディエンスを選択します。![コンソール5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2287743/5922d414-2a77-ff3d-4b4c-fb5c7f805ce6.png)
これで、先ほどつくったオーディエンスごとにPushを打つことができ、「アップデートをまだしていないけどよくアプリを使ってくれている人にアップデートを訴求するPush」「よく広告を見てくれる人にお得なキャンペーンをお知らせするPush」など、定義したユーザ層に合わせたターゲティング施策をFirebase上で完結させることができます。

#まとめ
Firebaseを活用したスマホアプリデータの活用方法を紹介しました。Firebaseは非常に便利で、分析基盤を持たない企業でも、データ収集〜分析〜活用まで完結させることができるので、スマホアプリを開発する際はぜひ使ってみてください。