DroidKaigi 2018 - アプリを成長させるためのログ取りとログ解析に必要なこと / Takao Sumitomo [JA] を視聴した
視聴元
- 「良いものを作れば自然とユーザが増える」「面白いものを作ればバイラルで広がる」本当に?
- 「アプリを良くしましょう」→どうやって?
- GoogleAnalyticsやログ収集サービスを見たが、インストール数・アクティブユーザ程度しかわからない
- そもそも、何をもって「よくなった?」→さっぱりわからん。
例:簡単な指標:ボタンの押下された⇒それまでの過程は?
- インストール
- ユーザ登録
- 該当画面を探す
- 詳細情報へ
- ボタンを押下する
じゃあ、その過程を追うなら?
- インストール:GA
- 登録:Web
- 探す操作:アプリのログ
- 詳細画面へ:アプリのログ
- ...
- これ、ちゃんとやらんと駄目だ。
指標の種類
エンジニアリング的指標
- クラッシュ
- ANR
- レンダリング
- APIレスポンス
非エンジニアリング的指標
- DAU/WAU/MAU
- リテンション率(継続率)・コホート分析
- Firebaseから見れる
- アプリが好きで使ってもらっている数字だから重要
- 機能ごとのリテンションがないと、どの機能がユーザを引き留めているか追えない。
- コンバージョン率
- そのプロダクトにおけるキーとなる機能の使用率
- マーケットなら、商品が売れた
- マッチングなら、マッチングが成功した
上記の情報を得るために必要なインフラ
ログ収集サービス
- Firebase
- TreasureData
データストア
- GoogleBigQuery
- TreasureData
抽出環境
- GoogleBigQuery
- GoogleDataStudio
- TreasureData
可視化
- GoogleDataStudio
- Domo
- エクセル
初めてやるなら以下の3本柱
- Firebase
- GoogleBigQuery
- Excel
ログの種類
- イベントログ:View操作、タップやスワイプなど
- スクリーンログ:画面名、滞在時間
イベントログ
- ユーザ識別子:IDなど
- 画面名:Activity+Fragmentなど
- イベント名:タップ/ロングタップ/スワイプ
- イベントの追加属性:ViewID/アイテムIDなど
- アプローチ:自動的にできると嬉しいけど、追加情報などにより過度に冗長な実装になる。要所要所で丹精込めて。
スクリーンログ
画面遷移が終えるくらいに取る。離脱もわかるくらいとる。
- ユーザ識別子:IDなど
- 画面名:Activity+Fragmentなど
- 次の画面名:空白を入れて、離脱したことを分かるようにすると嬉しい。
- 滞在時間
アプローチ
- 滞在時間は onStart/onResume ~ onStop/onPause で時間の引き算をすれば時間が取れる
- FAはいろいろ時間を自動で計算してくれる
- 滞在時間
- 次の画面への遷移
- ユーザ識別子
TIPS
トラッカーのコードは簡潔にしておきたい。
- 実装担当者への負荷低減
- クラッシュの回避
- トラッカーがちゃんと動いてない
そのために、トラッカー用便利メソッドを作る
- イベントを列挙化
- 属性をGenericsで縛る
考察
- メソッドチェーンはどう思う?
- sendするメソッド、忘れるので避ける
- 属性は可変では?
- 諦めて属性数だけメソッド切ればいいじゃん。
- (可変長引数作れば...)
- 複数のライブラリを使う
- それを制御する便利クラスがあると良い。
- 複数のFragment
- Fragment in Fragment:
- interface を切って制御
- Fragment in ViewPager:
- Fragment側はあきらめる。
- 親側で泥臭く制御に落ち着く。(未解決問題)
- Fragment in Fragment:
- ログの検証
- logcat に出す。検証が大変だから。
- FirebaseAnalyticsのDebugView
FirebaseAnalyticsの制約
- イベント名:500個まで
- 英数とアンスコで、40文字まで
- 属性値は100文字まで
- 同一属性の方は揃えること
ログを取るときに気を付けること
- 1つの指標は最低3系統で確認できるようにしておく
- おかしい数値は結構出る
- 3つあれば、多数決ができる
- 例:アクションログ,コンバージョンログ
- ログだけでユーザの操作を把握できるようにする
- 機密情報は入れない
- パスワード
- メッセージ
- 利用規約やプラポリに反するもの
- 定量的な数字も取れるなら取る
- RecyclerView:どこまでスクロールした?どのViewが何秒表示された?
- getGlobalVisibleRectで頑張って...
可視化
- Excel
- GoogleBigQueryからSQLでデータを取り出す
- ピポットテーブルでグラフ化
- GoogleDataStudio
- Domo
失敗談
- Notificationでスパイク
- PUSH通知がアクティブユーザに誤検知された
- 操作出ないイベントはNonInteractiveにする
- 荒ぶるグラフ
- 実装ミス
- WebのDB構成変更
- APIの改修時の構成変更
- イベントカレンダーを用意しておくと起因が分かる
- Proguard
- ログ上の名前が a b,...
- onClickが知らんところから呼ばれてる。
- 一部の実装がonClickを直接たたいてた。
- 画面が開いただけでトラッカーを発火させてた。
- 広告媒体の違い
- 媒体ごとにユーザの質は異なる
- インストール時にリファラーを記録する
- 広告計測ライブラリを使う
- ABテストは同時期で。
- 「先週と今週」は良くない
- 広告を使っていると顕著
- 同じ期間じゃないと徒労に終わる。RemoteConfigなどを使ってさっくと切り替える。
最終更新: 2025.6.15