React Native Tech Blog

supported by maricuru (旧maricuru tech blogです)

【React Native】【Expo】分析ツールAmplitudeの導入方法とそのメリット

アプリの分析ツールといえば、Google Analytics, Firebase Analytics, Mix Panelなど様々ありますが、今回はAmplitudeというサービスをご紹介します。

弊社のアプリ"maricuru"では分析に、このAmplitudeをフル活用しています。

Amplitudeとは

アメリカのAmplitude社の提供する、ウェブ/モバイルのアナリティクスツールです。
類似のサービスとしてはmixpanelなどが挙げられます。

アプリから各種イベントのログを送信することで、Amplitudeウェブサイト上でグラフを作成して分析することが出来ます。

導入してみよう

Expoが公式にサポートしているので導入が楽です。
ま、正直これがAmplitudeを使おうと思ったきっかけですね。

Amplitude - Expo Documentation

では、以下でReact Native + Expoでの導入の手順についてご紹介します。

Amplitudeアカウントの取得

Amlitudeのサイトからサインアップします。
Amplitude | Product Analytics for Web and Mobile

実装

公式のサンプルプログラムを参考にします。
expo/Analytics.js at master · expo/expo · GitHub

初期化

Amplitude.initialize(apiKey);でAmplitudeを初期化します。

const { manifest } = Constants;
const apiKey = manifest.extra && manifest.extra.amplitudeApiKey;
const initialize = () => {
  if (!Environment.isProduction || !apiKey) {
    return;
  }

  Amplitude.initialize(apiKey);
  isInitialized = true;
};

ここでapiKeyは先ほど作成したAmplitudeプロジェクトのものを指定します。 app.jsonのextra欄に以下のように指定することで、プログラム内ではmanifest.extra.amplitudeApiKeyのようにして参照できます。

{
  "expo": {
    (中略)
    "extra": {
      amplitudeApiKey: XXXXXXXXXXXXXXXXXx
    }
  }
}

ユーザー情報の登録

そのイベントをどのユーザーが実行したかを特定するために、ユーザー情報をセットします。
アプリ起動後に1度行えばOKです。

const identify = (id: ?string, options?: ?Object = null) => {
  maybeInitialize();
  options = normalizeTrackingOptions(options);

  if (id) {
    Amplitude.setUserId(id);
    if (options) {
      Amplitude.setUserProperties(options);
    }
  } else {
    Amplitude.clearUserProperties();
  }
};

Amplitude.setUserId(id)でサービス内で使用しているuserIdをセットします。

またAmplitude.setUserProperties(options)でユーザーのその他の各種情報をセットします。
ユーザー名、登録日、年齢、性別などなど、分析に役立ちそうな属性をセットしておくと便利です。

弊社の場合、それに加えてuserId % 10の値を入れています。
ABテストを行う際に、userIdの下1桁で分類することが多いのですが、その分析に利用します。
Amplitudeでコホート分析する場合は、そのコホートの軸となる指標がuser属性に入っている必要があります。(少なくとも無料版の場合は)

例えば以下のような感じでidenitfyすることになります。

      Analytics.identify(user.id, {
        age: user.age, // 21など
        gender: user.gender, // maleなど
        analyticsGroup: user.id % 10,
        createdAt: user.createdAt,
      });

ログ送信

さていよいよログの送信です。
このような汎用のtrackメソッドを用意して、それを随所に仕込むことになります。

const track = (event: string, options: any = null) => {
  maybeInitialize();
  options = normalizeTrackingOptions(options);

  if (options) {
    Amplitude.logEventWithProperties(event, options);
  } else {
    Amplitude.logEvent(event);
  }
};

実際の仕込みは例えばこんな感じです。

onSubmitText(text) {
  Analytics.track(
    'SUBMIT_TEXT', // イベントを特定する適当な文字列
    {text} // 一緒に送るパラメータを自由に指定
  );
}

送られたログを確認

まずユーザー属性がちゃんと出力されています。
基本属性のキャリア、OSなどはデフォルトで出力してくれます。
また、先ほど指定してgenderやageなども合わせて出力されています。
f:id:wasan:20180626154920j:plain

また、track()のパラメータとして送信したtextもちゃんと送信されています。
f:id:wasan:20180626154936j:plain

このような感じで、アプリ内の様々なアクションにtrack()を仕込むことになります。

分析してみよう

無料版でも十分な分析ツールが揃っています。

  • Event Segmentation
  • Funnel Analysis
  • Retention Analysis
  • User Composition
  • User Sessions
  • Stickiness
  • Lifecycle

が使えますが、弊社では特に以下のツールをよく使っています。

Event Segmentation

あるイベントがどれくらい実行されたかを、時系列でグラフ化します。
例えばSNSサイトだとすると - 日次の訪問者数 - 日次の投稿者数 などなどでしょうか。

また日次の部分は週次、月次にもワンタッチで切り替えられます。

投稿者数(unique users)のところも - 投稿数(unique events) - アクティブユーザー中の投稿ユーザー率(Active %) - 平均投稿数(Average) - 投稿回数(Frecuency) など様々な軸で分析することが出来ます。

f:id:wasan:20180626155632p:plain

Retention Analytics

継続率です。
Daily, Weekly, Monthlyが切り替えられます。

また、属性ごとにコホートも切れるので、先ほどのidentifyのステップで、性別や年齢を入れていれば、男女別、年齢別の継続率なども分析することが出来ます。

グラフの下のテーブルでは、入会日別で継続率が表示されているので、ある施策を行った日に入会したユーザーは継続率が高い、などが分かるかもしれません。

f:id:wasan:20180626155653p:plain

Funnel Analytics

ファネル分析です。
よくあるのは入会フローのどこで脱落しているかの分析などでしょうか。
フローのチェックポイントになるイベントを複数指定することで、どのステップで脱落率が高いかが、棒グラフで表示されます。

f:id:wasan:20180626155705p:plain

その他の便利機能

Export API

Amlitudeに蓄積したデータをexportするAPIがあります。
これを使えばexportしたデータを自前のデータベース(BigQueryなど)に格納して、より細かい分析をすることも可能かもしれません。

Slack bot

AmplitudeのグラフURLをSlackにコピペすると、そのグラフのスクリーンショットを貼ってくれるbotです。
「ここのアクティビティ落ちてんだけど、なんでかなー」みたいなディスカッションのときに、グラフをペタッと共有することができます。

まとめ

まず、Expoだと導入が楽ちんです。
また、基本的な分析をSQLなど書かずにすぐに出力できるので、エンジニアでなくビジネスサイドのメンバーも自身で分析をすることができます。

こういった点から、スタートアップや立ち上げ初期のサービスにとっては、とても助かる分析ツールだと思います!

Amplitudeの機能自体はここには書ききれないので、実際に触ってみるのがよいと思います。