一休.com Developers Blog

一休のエンジニア、デザイナー、ディレクターが情報を発信していきます

単純なコードでアプリ内のコンバージョン経路を計測する

この記事は一休.comアドベントカレンダー2017の1日目です。

一休レストランiOSアプリを開発しているid:ninjinkunです。

アプリを改善する計画を立てる際に、どこから手を着けたら良いか優先順位を決める必要があります。Eコマースなどコンバージョン(以下CV)がはっきり定義できるアプリの場合には、実際のCVに繋がっている画面とフローを改善するのが近道でしょう。

しかしCVに繋がる経路がどこなのか調べるためには、依存関係があるイベントを計測する必要があり、これは意外と面倒です。導入しているGoogle Analyticsの目標到達プロセスやゴールフロー機能を使えばできるような気がするのですが、設定が複雑かつ結果が出るのに時間がかかるので、残念ながら自分は使いこなせたことがありません*1

f:id:ninjinkun:20171130201906p:plain

計測

しかしプログラマの目で見ると、予約前に表示された画面と予約完了画面を結びつけるのはそんなに難しくなさそうに見えます。そこでとても単純な方法ではありますが、直接的にアプリ内のCV経路を計測するために、アプリに直接トラッキングのためのコードを埋め込みました。

enum CVRoute {
    case search, favorite, reserveHistory, message
}

// 単純なコードというのはそう、シングルトンです
struct CVRouteManager {
      static let sharedManager = CVRouteManager()
      var lastRoute: CVRoute?
}

このシングルトンにそれぞれの画面を表示した際に経路を記録し

class ReserveHistoryViewController: UIViewController {
    func viewDidAppear(animated: Bool) {
        ...
        CVRouteManager.sharedManager.lastRoute = . reserveHistory
        ...
    }
}

予約が行われた際にGoogle Analyticsのカスタムディメンジョンに載せて送信します。

class ReserveCompleteViewController: UIViewController {
    static let LastRouteDimension = 20

    func viewDidAppear(animated: Bool) {
        ...
        // 実際はトラッキング用のクラスに分離しているが、イメージはこんな感じ
        let tracker = GAI.sharedInstance().defaultTracker
       ...
        if let lastRoute = CVRouteManager.sharedManager.lastRoute {
            tracker.set(GAIFields.customDimension(for: LastRouteDimension), value: lastRoute)
        }
        ...
        traker.send(...)
    }
}

結果

製品にこのコードを埋め込んで一週間ほど動かしてみたところ、一休レストランのiOSアプリではお気に入りからのCVが検索に次いで多いという結果が得られました。

このデータとユーザーインタビューを元に、アプリを使ってお店を探すユーザーの行動をイメージしてみると、

  1. お店を決めるためにまず検索
  2. 気になったお店をお気に入りに登録
  3. 1~2を繰り返す
  4. お気に入りに登録した中から、一緒に行く友だちにリンクを共有して相談
  5. お店が決まったら、お気に入りから予約←これが計測したCV前画面

というように、お気に入りを使いながらお店を決めるストーリーを想像することができます。そして最終的にはCV数の多さが決め手になり、優先度を上げてこのストーリーを検証、強化するという意志決定を行うことができました。

おわりに

以上、単純なコードで手軽に経路計測を行う方法でした。Google AnalyticsやFirebase等の計測サービスでもっと簡単にできる方法をご存知でしたら、ぜひ教えてください。

最後に唐突に宣伝ですが、クリスマスや忘年会のご予約に、一休レストランアプリをぜひご利用ください。

明日は @ryo511 さんによる「Vue.jsのユニットテストについて」です。

*1:アプリの場合はWebと違い、タブやモーダルビューの存在により、複数の画面を並行に操作して、最後は購入などのCVに到達するということが起こります。このため、トラッキングサービスが出してくるイベントの前後関係を素直に信じられないという問題もあります