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

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

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

前提条件

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

  • Xcode 8.2.1 以降
  • iOS 8 以降をターゲットにした Xcode プロジェクト
  • アプリのバンドル識別子
  • CocoaPods 1.0.0 以降

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

次に、Firebase をアプリに追加し、SDK を追加して、アプリで Firebase を初期化する必要があります。手順については、Firebase を iOS プロジェクトに追加するを参照してください。

Performance Monitoring をアプリに追加する

  1. プロジェクト用に作成した podfile を開き(または pod init コマンドを使用して作成)、ターゲット セクション内に次の行を追加します。
    pod 'Firebase/Core'
    pod 'Firebase/Performance'
  2. podfile があるディレクトリで、次のコマンドを実行して Performance Monitoring SDK をインストールします。
    pod install
  3. コマンドの最後で、Xcode を使用して .xcworkspace ファイルを開きます。
  4. UIApplicationDelegate で Firebase モジュールをインポートします。

    Swift

    import Firebase
    

    Objective-C

    @import Firebase;
    
  5. FirebaseApp 共有インスタンスを構成します。通常はアプリケーションの application:didFinishLaunchingWithOptions: メソッドで行います。

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()
    

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  6. アプリを再コンパイルします。 これで自動トレースと HTTP/S ネットワーク リクエストがモニタリングされるようになりました。

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

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

  1. Performance Monitoring モジュールをヘッダーに追加します。

    Swift

    import FirebasePerformance

    Objective-C

    @import FirebasePerformance;

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

    Swift

    let trace = Performance.startTrace(name: "test trace")

    Objective-C

    FIRTrace *trace = [FIRPerformance startTraceWithName:@"test trace"];

  3. アプリで発生するパフォーマンス関連のイベント(キャッシュ ヒットや再試行など)をカウントするには、イベントが発生するたびに、次のようなコード行を追加します。異なる種類のイベントをカウントする場合は、retry 以外の文字列を使用してイベントの名前を指定します。

    Swift

    trace.incrementMetric(named:"retry", by: 1)

    Objective-C

    [trace incrementMetric:@"retry" by:1];

  4. トレースを停止するコードの直後に次のコード行を追加します。

    Swift

    trace.stop()

    Objective-C

    [trace stop];

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

  1. Xcode シミュレータでアプリを実行します([Product] - > [Run])。
  2. Firebase コンソールに Performance Monitoring の結果が表示されていることを確認します。結果は 12 時間以内に表示されます。

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

Xcode シミュレータと 1 つまたは複数のテスト端末を使用して Performance Monitoring を検証したら、アプリのアップデート バージョンをユーザーにデプロイし、Firebase コンソールを使用してパフォーマンス データをモニタリングします。

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

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

Swift
guard let metric = HTTPMetric(url: "https://www.google.com", httpMethod: .get) else { return }

metric.start()
guard let url = URL(string: "https://www.google.com") else { return }
let request: URLRequest = URLRequest(url:url)
let session = URLSession(configuration: .default)
let dataTask = session.dataTask(with: request) { (urlData, response, error) in
        if let httpResponse = response as? HTTPURLResponse {
         metric.responseCode = httpResponse.statusCode
        }
        metric.stop()
}
dataTask.resume()
Objective-C
@property (nonatomic) FIRHTTPMetric *metric;
...
- (void)beginManualNetworkInstrumentation {
  self.metric =
      [[FIRHttpMetric alloc] initWithURL:[NSURL URLWithString:@"https://www.google.com"]
                              HTTPMethod:FIRHTTPMethodGET];

  [self.metric start];

  NSURLRequest *request =
      [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.google.com"]];
  NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request
                                                                delegate:self];
  [connection resume];
}

- (void)connection:(NSURLConnection *)connection
    didReceiveResponse:(NSURLResponse *) response {
  NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response
  self.metric.responseCode = httpResponse.statusCode;
  [self.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 のセッション ページのイメージ

既知の問題

  • Performance Monitoring には、GTMSQLite との互換性に関する既知の問題があります。GTMSQLite を使用するアプリでは、Performance Monitoring を使用しないことをおすすめします。
  • FirebaseApp.configure() を呼び出した後のメソッドの実装入れ替えは、Performance Monitoring SDK に影響する可能性があります。
  • iOS 8.0~8.2 シミュレータの既知の問題により、Performance Monitoring でパフォーマンス イベントがキャプチャされなくなります。これらの問題は、iOS シミュレータ 8.3 以降のバージョンで修正されています。
  • NSURLSession の backgroundSessionConfiguration を使用して接続を確立する場合、接続時間が予想よりも長くかかります。この場合の接続はプロセスの外部で実行され、そのタイミングはプロセス内のコールバック イベントを反映したものになります。

次のステップ

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

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