どっこと備忘録群

アウトプットしないとインプットできない私が Androidアプリ開発をメインとした備忘録を載せています。

DroidKaigi 2018 - アプリを成長させるためのログ取りとログ解析に必要なこと / Takao Sumitomo [JA] を視聴した

視聴元

  • 「良いものを作れば自然とユーザが増える」「面白いものを作ればバイラルで広がる」本当に?
  • 「アプリを良くしましょう」→どうやって?
  • GoogleAnalyticsやログ収集サービスを見たが、インストール数・アクティブユーザ程度しかわからない
  • そもそも、何をもって「よくなった?」→さっぱりわからん。

例:簡単な指標:ボタンの押下された⇒それまでの過程は?

  1. インストール
  2. ユーザ登録
  3. 該当画面を探す
  4. 詳細情報へ
  5. ボタンを押下する

じゃあ、その過程を追うなら?

  • インストール: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側はあきらめる。
      • 親側で泥臭く制御に落ち着く。(未解決問題)
  • ログの検証
    • 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