アプリでGoogleAnalyticsを設定する時の4つの勘所

こんにちは。[virapture株式会社](https://virapture.com)でCEOしながら[ラグナロク株式会社](https://ragna-rock.com)でもCKOとして働いている[もぐめっと](https://mogmet.com)です。

![mogmet.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/8ead2db6-3eab-0232-a59d-afd95e0e0beb.jpeg)
最近Apexというゲームにはまってるのですが、何故かいつも使ってないキャラでハンマーというダメージをたくさん与えたという名誉ある称号をとることができました。とても嬉しかったのでつい共有しちゃいました。やってる人いたらよかったら一緒にやりましょう。

本日はGoogleAnalyticsのイベントの適切な飛ばし方について4点共有いたします。
適切にイベントを設定することでGoogleから恩恵を受けやすくなります！
それでは早速解説いたします！

## ユーザ情報を設定する

一番初めにやることは、どんなユーザがイベントを発火したのかを追えるようにするために初期化段階でユーザ情報を設定しておきましょう。

setUserPropertyを使うことで、ロギングすることができます。

https://firebase.google.com/docs/analytics/user-properties?hl=ja&platform=ios

ただし、一部属性は自動的に送られてたりしますので確認しておいてください。

https://support.google.com/firebase/answer/9268042?hl=ja&visit_id=637894655973438599-1529107679&rd=1

ユーザIDに関してはsetUserIDを使うことで紐付けができます。

https://firebase.google.com/docs/analytics/userid?hl=ja

ただし、設定するユーザIDは個人情報と紐付かないように気をつけてください。

> 注: 必ずユーザー ID の使用が Google アナリティクス利用規約を遵守していることを確認してください。これには、個人情報を許容できない方法で使用してはならないことと、プライバシー ポリシーにおいて ID の使用法を適切に通知することが含まれます。ユーザー ID には、第三者が使用すると個別ユーザーの身元を特定できる情報が含まれないようにしてください。たとえば、ユーザーのメールアドレスや社会保障番号をユーザー ID として使用することはできません。

※少し蛇足
ちなみにsetUserIdはCrashlyticsにもあるのでそちらも合わせて設定しておくとよりCrashの原因を探りやすくなるのでおすすめです。

https://firebase.google.com/docs/crashlytics/customize-crash-reports?hl=ja&platform=ios#set-user-ids

## 推奨イベントを使う

イベント名はなんでも設定できてしまうので割と自由気ままにつけている方もいらっしゃるとおもいます。
ですが、実はイベントや設定するパラメータに関しては推奨イベント・パラメータが存在します。

https://firebase.google.com/docs/analytics/events?hl=ja&platform=ios#log_events_3

そして上記に推奨イベントを使う利点が説明されています。


> 注: できる限り詳細なレポートを取得するには、アプリと既定のパラメータに対して適切な推奨イベントをロギングします。また、これにより、Google アナリティクスに新しい機能が追加されたときにその機能を確実に利用できます。


ということでできるだけ推奨イベントとプロパティを使いましょう！
推奨イベントだけで大体収集したいことはカバーすることができます。

各種イベントごとに推奨されるプロパティについては下記にございますのでご参照ください。

https://support.google.com/firebase/answer/9267735?hl=ja&ref_topic=6317484

よく使われるのは下記のあたりかと思います。

|イベント|トリガーのタイミング|
|-|-|
|[login](https://developers.google.com/gtagjs/reference/ga4-events#login)| ユーザーがログインしたとき |
|[sign_up](https://developers.google.com/gtagjs/reference/ga4-events#sign_up)| ユーザーが登録して、各登録方法の人気度が測定されたとき |
|[tutorial_begin](https://developers.google.com/gtagjs/reference/ga4-events#tutorial_begin)|ユーザーがチュートリアルを開始したとき|
|[tutorial_complete](https://developers.google.com/gtagjs/reference/ga4-events#tutorial_complete)|ユーザーがチュートリアルを完了したとき|
|[search](https://developers.google.com/gtagjs/reference/ga4-events#search)|ユーザーがお客様のコンテンツを検索したとき|
|[select_content](https://developers.google.com/gtagjs/reference/ga4-events#select_content)|ユーザーがコンテンツを選択したとき|
|[view_item](https://developers.google.com/gtagjs/reference/ga4-events#view_item)|ユーザーが商品を表示したとき(詳細ページ開いた時とかにも使える)|
|[share](https://developers.google.com/gtagjs/reference/ga4-events#share)|ユーザーがコンテンツを共有したとき|

## 画面遷移を設定する

GoogleAnalyticsでは自動的に画面を送ってくれるのですが、iOSだったらViewController単位、AndroidだったらFragmentやActivity単位で無差別に送っています。
このままでは画面の共通化もできないため分析としては非常に使いづらいので手動で画面の追跡設定をするようにしましょう。
screen_viewというイベントにscreen_name（画面名）とscreen_class（ViewControllerやFragmentなどのクラス名）のプロパティをロギングするとGAでは画面追跡してくれます。

https://firebase.google.com/docs/analytics/screenviews?hl=ja#disable_screenview_tracking

screen_nameのおかげでandroid/ios共に統一した情報を追うことできるようになります。

また、画面遷移をロギングする時に別途カスタム用イベントも合わせて送ることをおすすめします。
自分はよく**view__画面名**といったイベントを送付しています。
なぜscreen_viewを飛ばしてるのに別途イベントを追加で送るかというと、**ABテストでコンバージョンを図りやすくなるからです！**

例えば通知を送って〜の画面を見てくれたかと判定したいときにscreen_viewだけだとどこの画面かまでは判定できません。
（プロパティを判定する場所が見当たらない）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/828708aa-0777-ea2f-62f6-a6390abcadfe.png)

というわけで、画面を見たというイベントも合わせて送っておくのをおすすめします。

## 他のイベントも設定できるように実装する

実際に実装をするときはGAに特化した実装をせずGAイベント周りをまとめたクラスをラッパーして使うクラスを別途用意するといいでしょう。
例えばAppAnalyticsクラスというのを用意し、普段ロギングする時はそのクラスの関数を叩いてイベントをロギングします。
そしてGA周りをまとめたAnalyticsGoogleクラスや、Adjust周りをAnalyticsAdjustクラスといったものを作り、AppAnalyticsからはそれぞれのイベントを叩くようにするといった形でラッパー実装するといいでしょう。

流れ的にはこんな感じ
クライアント → AppAnalytics → AnalyticsGoogle, AnalyticsAdjust,,,etc,,

実装イメージはこんな感じ。

```AppAnalytics.swift
class AppAnalytics {
    private let analyticsGoogle: AnalyticsGoogle
    private let analyticsAdjust: AnalyticsAdjust

   func logEvent(event: String, parameters: [String: Any?]) {
        analyticsGoogle.logEvent(event: event, parameters: parameters)
        analyticsAdjust.trackEvent(event: event, parameters: parameters)
    }
}
```

こうすることで複数のサービスのイベントロギングにも対応することができます。


## まとめ

ということで軽くまとめると下記のようになります。

- イベントを送る前にユーザ情報を設定しよう！（個人情報に注意！）
- GAでは推奨イベントを使いましょう！
- 画面遷移は手動で設定しましょう！
- GA以外のAnalyticsにも対応できるように実装しましょう！

GoogleAnalytics(FirebaseAnalytics)は適切に送っておくと快適なイベントライフを送れます！
GAだけで物足りなくなった場合はBigQueryと連携してもっと分析とかもできるので是非活用していきましょう！

最後に、[ワンナイト人狼オンライン](https://online.1nite-jinro.com/link/blog)というゲームを作ってます！よかったら遊んでね！

https://online.1nite-jinro.com/link/blog

他にも[Camecon](https://camecon.me/)や[Offcha](https://offcha.com/)といったサービスも作ってるのでよかったら使ってね！

https://camecon.me/

https://offcha.com/

また、チームビルディングや技術顧問、Firebaseの設計やアドバイスといったお話も受け付けてますので御用の方は弊社までお問い合わせください。

https://virapture.com/

ラグナロクでもエンジニアやデザイナーのメンバーを募集しています！！楽しくぶち上げたい人はぜひお話ししましょう！！

https://ragna-rock.com