Android 向け Firebase Performance Monitoring を使ってみる

このガイドでは、アプリで Firebase Performance Monitoring を使用する方法を次の手順に沿って説明します。

  1. 前提条件
  2. Android プロジェクトに Firebase を追加する
  3. Performance Monitoring をアプリに追加する
  4. (オプション)カスタム トレースと 1 つ以上の指標をアプリに定義する
  5. (オプション)特定のメソッドをトレースするために @AddTrace アノテーションを追加する
  6. Firebase コンソールで Performance Monitoring の結果を確認する
  7. アプリをデプロイし、Firebase コンソールで結果を確認する

前提条件

事前に次の環境を準備しておく必要があります。

  • Android 4.0(Ice Cream Sandwich)以降、および Google Play 開発者サービス 16.2.0 以降が搭載された端末
  • Android SDK Manager で利用可能な Google リポジトリにある Google Play 開発者サービス SDK
  • Android Studio の最新バージョン(バージョン 2.2 以降)

Android プロジェクトに Firebase を追加する

他の Firebase 機能を使用している場合には、Firebase Assistant を使用して Android Studio からアプリに Firebase を追加できます。

Android Studio で Firebase Assistant を開く方法:

  1. [ツール] > [Firebase] をクリックし、[Assistant] 画面を開きます。
  2. リストにある機能のいずれかをクリックして詳細を表示(例: Analytics)してから、チュートリアル リンクをクリックします(例: Analytics イベントを記録する)。
  3. [Connect to Firebase] ボタンをクリックして Firebase に接続し、必要なコードをアプリに追加します。

他の Firebase 機能をまだ使用していない場合は、アプリに手動で Firebase を追加してください。

Performance Monitoring をアプリに追加する

  1. プロジェクト レベルの build.gradle ファイルを開き、次を追加します。
    1. buildscript -> repositories セクション:
      jcenter()
    2. buildscript -> dependencies セクションで、Firebase の依存関係を追加します。
      • Android Studio 2.x の場合:
        classpath 'com.google.firebase:firebase-plugins:1.1.1'
      • Android Studio 3.x の場合:
        classpath 'com.google.firebase:firebase-plugins:1.1.5'
  2. アプリレベルの build.gradle ファイルを開き、次を追加します。
    1. apply plugin: 'com.android.application' の下に次の行を追加します。
      apply plugin: 'com.google.firebase.firebase-perf'
    2. dependencies セクションに次を追加します。
      implementation 'com.google.firebase:firebase-perf:16.2.0'
  3. アプリを再コンパイルします。 自動トレースと HTTP/S ネットワーク リクエストがモニタリングされるようになりました。

(オプション)カスタム トレースと 1 つ以上の指標をアプリに定義する

カスタム トレースは、アプリ内の特定のコードに関連付けられたパフォーマンス データのレポートです。カスタム トレースの詳細については、Performance Monitoring の概要を参照してください。アプリには複数のカスタム トレースを設定でき、一度に複数のカスタム トレースを実行できます。各カスタム トレースには、アプリ内のパフォーマンス関連のイベントをカウントする 1 つ以上の指標を設定でき、これらの指標は、それぞれを作成するトレースに関連付けられています。

  1. .java ファイルの先頭で、これらの Performance Monitoring クラスをインポートします。

    Android

    import com.google.firebase.perf.FirebasePerformance;
    import com.google.firebase.perf.metrics.Trace;

  2. アプリのトレースを開始するコードの直前に、次のコード行を追加して、test_trace というトレースを開始します。

    Android

    Trace myTrace = FirebasePerformance.getInstance().newTrace("test_trace");
    myTrace.start();
    
  3. アプリで発生するパフォーマンス関連のイベント(キャッシュのヒットやミスなど)をカウントするには、イベントが発生するごとに次のようなコード行を追加します。異なる種類のイベントをカウントするには、item_cache_hit または item_cache_miss 以外の文字列を使用してイベント名を指定します。

    Android

    Item item = cache.fetch("item");
    if (item != null) {
        myTrace.incrementMetric("item_cache_hit", 1);
    } else {
        myTrace.incrementMetric("item_cache_miss", 1);
    }
    
  4. トレースを停止するコードの直後に次のコード行を追加します。

    Android

    myTrace.stop();
    

(オプション)特定のメソッドをトレースするために @AddTrace アノテーションを追加する

アプリ内のメソッドに @AddTrace アノテーションを追加すると、結果のトレースを識別する文字列を設定できます。これにより、このメソッドの先頭でトレースを開始し、メソッドの完了時にトレースを停止できます。この方法で作成されたトレースに指標はありません。

たとえば、onCreate() メソッドの呼び出し時に実行される onCreateTrace というトレースを作成するには、次のようなコードを使用します。

Android

@Override
@AddTrace(name = "onCreateTrace", enabled = true /* optional */)
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

Firebase コンソールで Performance Monitoring の結果を確認する

  1. Android Studio でアプリを作成します。
  2. 最新のイメージと Google Play 開発者サービス 15.0.0 以降を含む Android エミュレータを使用するか、Google Play 開発者サービス 15.0.0 以降のテスト端末を使用して、アプリをテストします。
  3. Firebase コンソールに Performance Monitoring の結果が表示されていることを確認します。結果は 12 時間以内に表示されます。

アプリをデプロイし、Firebase コンソールで結果を確認する

1 台以上のテスト端末を使用して Performance Monitoring を検証したら、アプリのアップデート バージョンをユーザーにデプロイし、Firebase コンソールを使用してパフォーマンス データをモニタリングできます。

(オプション)特定のネットワーク リクエストのモニタリングを追加する

Performance Monitoring はネットワーク リクエストを自動的に収集します。アプリのほとんどのネットワーク リクエストが対象となりますが、一部のリクエストは報告されない可能性があります。Performance Monitoring に特定のネットワーク リクエストを含めるには、アプリに次のコードを追加します。

Android
HttpMetric metric =
        FirebasePerformance.getInstance().newHttpMetric("https://www.google.com",
                FirebasePerformance.HttpMethod.GET);
final URL url = new URL("https://www.google.com");
metric.start();
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/json");
try {
    DataOutputStream outputStream = new DataOutputStream(conn.getOutputStream());
    outputStream.write(data);
} catch (IOException ignored) {
}
metric.setRequestPayloadSize(data.length);
metric.setHttpResponseCode(conn.getResponseCode());
printStreamContent(conn.getInputStream());

conn.disconnect();
metric.stop();

この方法で個別にキャプチャした HTTP/s ネットワーク リクエストは、Performance Monitoring で自動的にキャプチャされたネットワーク リクエストとともに Firebase コンソールに表示されます。

(オプション)トレースおよびネットワーク リクエストのサンプルを確認する

Firebase コンソールで、特定のトレースまたはネットワーク リクエストのセグメントを詳しく知ることができます。記録されたセッションをランダムにサンプリングすると、次の情報が表示されます。

Firebase Performance Monitoring のセッション ページのイメージ

  • CPU: Performance Monitoring SDK は、アプリが消費したユーザー時間とシステム時間をキャプチャします。
  • メモリ: Performance Monitoring SDK は、アプリケーションが使用するヒープメモリの量をキャプチャします。ヒープメモリは、作成されたオブジェクト、割り当てが解除されたオブジェクト、およびアプリケーションが積極的に使用しているオブジェクトなど、動的な割り当てに使用されるメモリです。
  • 個別情報: 開始時間、終了時間、継続時間、リクエスト サイズ、レスポンス サイズなど、トレースまたはネットワーク リクエストの単一インスタンスに関する詳細情報です。
  • 同時インスタンス: 同時に発生したトレースまたはネットワーク リクエストに関する情報です。
  • 端末属性: アプリのバージョン、モデル、OS のバージョン、無線通信、カスタム属性など、端末に関する情報です。

これらの詳細なサンプルを Firebase コンソールで確認するには、アプリのトレースまたはネットワーク リクエストのいずれかを開き、[セッションを表示] をクリックします。または、特定の属性から、属性のセッションのリンクをクリックします。

セッションへのリンクが表示された Firebase Performance Monitoring トレースのイメージ

Performance Monitoring が収集するセッションは、各指標のパーセンタイルに分散されます。パーセンタイル範囲が低いセッションは、パーセンタイル範囲が高いセッションよりも指標の値が低くなります。使用可能なセッションをパーセンタイルでフィルタリングするには、セッションの詳細の上部にあるパーセンタイルのプルダウンを使用します。

Firebase Performance Monitoring のセッション ページのイメージ

既知の問題

  • Firebase Plugin バージョン 1.1.0 で、Guava の依存関係が一致せず、次のエラーが発生する可能性があります。

    Error:Execution failed for task ':app:packageInstantRunResourcesDebug'.
    > com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava/util/concurrent/Executor;

    このエラーが表示された場合は、バージョン 1.1.1 にアップグレードするか、プロジェクト レベルの build.gradle ファイルの buildscript -> dependencies セクションで、上記の classpath ステートメントを以下に置き換えてください。

    classpath ('com.google.firebase:firebase-plugins:1.1.0') {
                exclude group: 'com.google.guava', module: 'guava-jdk5'
    }
  • Performance Monitoring がモニタリングするのは、OkHttp HTTP クライアント バージョン 3.x.x で作成された HTTP/S ネットワーク リクエストだけです。
  • Performance Monitoring は、HTTP content-length ヘッダーの値に基づいて HTTP/S ネットワーク リクエストのペイロード サイズの合計を報告します。この値は正確とは限りません。
  • Performance Monitoring は、マルチプロセスの Android アプリのメインプロセスのみをサポートしています。
  • com.google.firebase.firebase-perf Gradle プラグインは、自動トレースと HTTP/S ネットワーク リクエストのモニタリングを無効にする DexGuard と互換性がありません。アプリで DexGuard を使用している場合、SDK で追加したカスタム トレースは正常に動作します。
  • com.google.firebase.firebase-perf Gradle プラグインは、非推奨となった Jack と互換性がありません。

統合のデバッグ

以下のように、アプリの AndroidManifest.xml ファイルの <application> 要素に <meta-data> 要素を追加することで、ビルド時に Performance Monitoring のデバッグ ロギングを有効にすることができます。

<meta-data
  android:name="firebase_performance_logcat_enabled"
  android:value="true" />

logcat フィルタリングを使用して、トレースと HTTP/S ネットワーク リクエストのロギングを表示できます。Performance Monitoring のログメッセージには FirebasePerformance のタグが付けられており、次のコマンドを使用してフィルタリングできます。

adb logcat -s FirebasePerformance

次のステップ

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。