iOS+
Android
ウェブ
このページでは、Performance Monitoring の使用を開始する際や、Performance Monitoring の機能とツールを使用する際のトラブルシューティングのヒントを紹介します。
トラブルシューティングのための最初の確認
トラブルシューティングを行う前に、次の 2 つの点を確認することをおすすめします。
1. パフォーマンス イベントのログ メッセージを確認する
ログ メッセージを確認して、Performance Monitoring SDK がパフォーマンス イベントをキャプチャしていることを確認します。
パフォーマンス イベントのログ メッセージを表示する方法
ブラウザのデベロッパー ツール(Chrome デベロッパー ツールの [ネットワーク] タブ や Firefox のネットワーク モニター など)を開きます。
ブラウザでウェブアプリを更新します。
ログ メッセージにエラー メッセージがないか確認します。
数秒後、ブラウザのデベロッパー ツールで、firebaselogging.googleapis.com
に対するネットワーク呼び出しを確認します。ネットワーク呼び出しが存在する場合、ブラウザがパフォーマンス データを Firebase に送信しています。
アプリがパフォーマンス イベントをロギングしていない場合は、トラブルシューティングのヒント をご覧ください。
2. Firebase ステータス ダッシュボードを確認する
Firebase または Performance Monitoring に既知の停止が発生しているかどうか、Firebase ステータス ダッシュボード を確認します。
Performance Monitoring を使ってみる
Performance Monitoring (iOS+ | Android | Web )、の使用を開始するうえで、Firebase が SDK を検出したり、Firebase コンソールに最初のパフォーマンス データを表示したりする際に問題が発生した場合は、次のトラブルシューティングのヒントを参考にしてください。
SDK をアプリに追加したが、SDK を追加するようコンソールに指示が表示される
Firebase は、アプリからイベント情報(アプリの操作など)を受け取るときに、アプリに Performance Monitoring SDK が正常に追加されたかどうかを検出できます。通常、アプリを起動してから 10 分以内に、Firebase コンソールのパフォーマンス ダッシュボード に「SDK を検出しました」というメッセージが表示されます。30 分以内に、最初の処理済みのデータがダッシュボードに表示されます。
最新バージョンの SDK をアプリに追加してから 10 分以上経過しても変化が現れない場合は、ログ メッセージを確認 して、Performance Monitoring がイベントをロギングしているか確認します。以下の該当するトラブルシューティングの手順を試して、SDK 検出メッセージの遅延についてトラブルシューティングを行います。
アプリがイベントをロギングしている: トラブルシューティングの手順
注: Performance Monitoring SDK はイベントをローカルでバッチにまとめ、定期的に Firebase に送信します。これは、アプリの操作から Firebase がアプリからイベント情報を受け取るまでに時間がかかることを意味します。
ローカルで開発している場合は、データ収集用のイベントをさらに生成してみてください。
ローカル環境でウェブアプリを提供および表示します。
サイトのサブページを読み込んだり、アプリを操作したり、ネットワーク リクエストをトリガーしたりして、イベントを生成します。ページが読み込まれた後、ブラウザのタブを 10 秒以上開いたままにします。
Firebase 構成オブジェクト がアプリに正しく追加され、オブジェクトを変更していないことを確認します。具体的には、次の点を確認します。
構成オブジェクト内の Firebase ウェブアプリ ID(appId
)がアプリに適していること。settings プロジェクト設定 のアプリ カードで Firebase アプリ ID を確認します。
アプリの構成オブジェクトに問題があると思われる場合は、次の手順をお試しください。
現在アプリに設定されている構成オブジェクトを削除します。
こちらの手順 に沿って新しい構成オブジェクトを取得し、ウェブアプリに追加します。
SDK がイベントをロギングしていて、すべてが正しく設定されているにもかかわらず、2 時間経過しても SDK 検出メッセージや処理済みデータが表示されない場合は、Firebase サポートにお問い合わせ ください。
アプリがイベントをロギングしていない : トラブルシューティングの手順
アプリで Performance Monitoring SDK が正しく初期化 されていることを確認します。
次のフラグによって Performance Monitoring SDK が無効になっていない ことを確認します。
performance.instrumentationEnabled
ブラウザ キャッシュが無効になっている ことを確認します。無効でない場合、ブラウザは新しい計測設定を取得しない場合があります。
ウェブページのタブを閉じてからもう一度開きます。再度ロギングを確認します。
アプリに Performance Monitoring SDK を追加したばかりの場合は、SDK が機能するようにアプリを完全に再起動する必要がある場合があります。
アプリで無効になっているものが見つからない場合は、Firebase サポートにお問い合わせ ください。
一般的なトラブルシューティング
SDK を正常に追加し、アプリで Performance Monitoring を使用している場合、Performance Monitoring の機能とツールに関する一般的な問題には次のトラブルシューティングのヒントが役立ちます。
アプリがパフォーマンス イベントをロギングしない
パフォーマンス イベントのログ メッセージ が表示されない場合は、次のトラブルシューティング手順をお試しください。
アプリで Performance Monitoring SDK が正しく初期化 されていることを確認します。
次のフラグによって Performance Monitoring SDK が無効になっていない ことを確認します。
performance.instrumentationEnabled
ブラウザ キャッシュが無効になっている ことを確認します。無効でない場合、ブラウザは新しい計測設定を取得しない場合があります。
ウェブページのタブを閉じてからもう一度開きます。再度ロギングを確認します。
アプリに Performance Monitoring SDK を追加したばかりの場合は、SDK が機能するようにアプリを完全に再起動する必要がある場合があります。
アプリで無効になっているものが見つからない場合は、Firebase サポートにお問い合わせ ください。
パフォーマンス ダッシュボードにカスタム トレースデータが表示されない
自動収集されるトレースのパフォーマンス データは表示され、カスタムコード トレースのデータは表示されませんか。 次のトラブルシューティング手順をお試しください。
Trace API を使用してインストルメント化したカスタム コード トレースの設定を確認します。特に次の点に注意してください。
カスタム コード トレースとカスタム指標の名前には制限があります。先頭または末尾が空白文字でなく、先頭がアンダースコア(_
)でない 32 文字以下の名前を指定する必要があります。
すべてのトレースを開始して停止する必要があります。開始されていないトレース、停止されていないトレース、開始前に停止されたトレースはログに記録されません。
record()
メソッドを使用している場合は、トレースを明示的に開始または停止する必要はありません。
次のフラグによってPerformance Monitoring データ収集が無効になっていない ことを確認します。
ログ メッセージを確認 して、Performance Monitoring が、想定されるカスタム コード トレースをロギングしていることを確かめます。
Performance Monitoring がイベントをロギングしているが、24 時間経過してもデータが表示されない場合は、Firebase サポートにお問い合わせ ください。
パフォーマンス ダッシュボードにネットワーク リクエスト データが表示されない
ネットワーク リクエスト データが表示されない場合は、次の点に注意してください。
Performance Monitoring は、ブラウザ API によって報告されたネットワーク リクエストの指標を自動的に収集します。これらのレポートには、失敗したネットワーク リクエストは含まれません。
コードとそのコードで使用しているネットワーキング ライブラリの動作によっては、Performance Monitoring で報告されるのが、完了したネットワーク リクエストだけになることがあります。この場合、開いたままの HTTP/S 接続が報告されていない可能性があります。
よくある質問
iOS+
Android
ウェブ
プロジェクト ホームのパフォーマンス カードの [問い合わせが多い問題] はどうなったのですか?
[問い合わせが多い問題 ] は、[最近のアラート ] に置き換えられました。これは、設定したしきい値を超えると自動的に通知されるアラートを、最近導入したことを反映したものです。「問題」のサポートは終了 し、アラートに置き換えられました。
パフォーマンス カードの上部にあるアプリセレクタでは、[最近のアラート ] でアラート エントリがフィルタされます。選択したアプリについて、直近 3 件のアラートのみが表示されます。
アラートについて詳しくは、パフォーマンスの問題に関するアラートを設定する をご覧ください。
コンソールで問題に対してしきい値を設定する機能は、現在どうなっていますか?
Performance Monitoring では、定義したしきい値を超える指標に対するアラート がサポートされています。パフォーマンス指標に対するこれらの構成可能なしきい値との混同を回避するため、問題 に対してしきい値を構成する機能は削除されています。
Firebase コンソールの [詳細] と [指標] の情報はどうなったのですか?
詳細ページと指標ページが一新され、新たに再設計され、一元化されたユーザー インターフェース(UI)に置き換えられました。これにより、問題のトラブルシューティングが向上します。この新しいトラブルシューティングの UI は、詳細や指標と同じコア機能を提供します。トラブルシューティングの詳細については、特定のトレースのデータをさらに表示する をご覧ください。
サンプル数が想定した数と異なるのはなぜですか?
Performance Monitoring は、アプリのユーザー デバイスからパフォーマンス データを収集します。多くのユーザーがアプリを利用している場合や、アプリが大量のパフォーマンス アクティビティを生成する場合は、処理するイベントの数を減らすために、Performance Monitoring はデバイスのサブセットのみに限定してデータを収集することがあります。このように制限しても十分なデータが得られるため、イベントが少なくなったとしても、指標の値はユーザーのアプリ エクスペリエンスを適切に表しています。
収集するデータの量を管理するために、Performance Monitoring は次のサンプリング オプションを使用します。
デバイス上のレート制限 : デバイスが送信するトレースが急増することがないように、デバイスから送信されるコードトレースとネットワーク リクエスト トレースの数を 10 分間あたり 300 イベントに制限しています。このアプローチにより、大量のパフォーマンス データを送信する可能性があるループ型のインストルメンテーションからデバイスを保護し、1 つのデバイスによってパフォーマンスの測定値が歪められるのを防ぎます。
動的サンプリング : Performance Monitoring は、1 つのアプリで、すべてのアプリユーザーを通じてコードトレースとネットワーク リクエスト トレースについてそれぞれ制限された数のデータを毎日収集します。(Firebase Remote Config を使用して)デバイスに関する動的サンプリング レートを取得し、ランダムなデバイスでトレースをキャプチャして送信する必要があるかどうかを判断します。サンプリングの対象として選択されていないデバイスはイベントを送信しません。動的サンプリング レートはアプリに固有であり、収集されるデータの全体量が制限を下回るように調整されます。
ユーザー セッションでは、ユーザーのデバイスからさらに多くの詳細なデータを送信します。そのため、データをキャプチャして送信するために必要となるリソースが増えます。ユーザー セッションの影響を最小限に抑えるため、Performance Monitoring はセッション数を制限する場合もあります。
サーバーサイドのレート制限 : アプリでサンプリングの制限を超えないようにするため、Performance Monitoring はサーバーサイドのサンプリングを使用して、デバイスから受信した一部のイベントを破棄する場合があります。この制限によって指標の有効性が変化することはありませんが、次のような小規模なパターンの変化が生じることがあります。
トレースの数とコードが実行された回数が異なる場合があります。
コード内で密接に結合している複数のトレースのサンプル数が異なる場合があります。
注: Performance Monitoring の進化に伴い、特定のサンプリング制限とその適用範囲は変更される可能性があります。
コンソールの [問題 ] タブはどうなったのですか?
[問題] タブに代わってアラートが導入されました。アラートは、設定したしきい値を超えると自動的に通知されます。これにより、しきい値のステータスを特定するために手動で Firebase コンソールを確認する必要がなくなりました。アラートについて詳しくは、パフォーマンスの問題に関するアラートを設定する をご覧ください。
コンソールの [ デバイス] タブと [ ネットワーク] タブはどうなったのですか?それらのページに表示されていたトレースを表示するにはどうすればよいですか?
Firebase コンソールの Performance Monitoring セクションが再設計され、主要な指標とすべてのトレースがまとめて [ダッシュボード ] タブに表示されるようになりました。今回の再設計の一環として、[デバイス ] ページと [ネットワーク ] ページを削除しました。
[ ダッシュボード] タブの下部にあるトレース テーブルには、[ デバイス] タブと [ ネットワーク] タブに表示されていた同じ情報がすべて含まれていますが、特定の指標の変化率でトレースを並べ替える機能など、一部の機能が追加されました。特定のトレースの指標とデータをすべて表示するには、トレース テーブル内のトレース名をクリックします。
トレースはトレース テーブルの次のサブタブに表示されます。
ネットワーク リクエスト トレース(すぐに使用できるものとカスタムの両方) - [ ネットワーク リクエスト] サブタブ
カスタムコード トレース - [ カスタム トレース] サブタブ
アプリの起動、フォアグラウンドのアプリ、バックグラウンド アプリのトレース - [ カスタム トレース] サブタブ
画面レンダリング トレース - [ 画面レンダリング] サブタブ
ページ読み込みトレース - [ ページ読み込み] サブタブ
トレース テーブルの詳細と、指標やデータの表示については、コンソールの概要ページ(iOS+ | Android | ウェブ )をご覧ください。
遅いフレームやフリーズしたフレームの数が想定した数と異なるのはなぜですか?
レンダリングが遅いフレームとフリーズしたフレームは、想定される 60 Hz のデバイス リフレッシュ レートで計算されます。デバイスのリフレッシュ レートが 60 Hz 未満の場合は、1 秒間にレンダリングされるフレームが少なくなるため、各フレームでレンダリング時間が長くなります。レンダリング時間が長くなると、レンダリングが遅くなるフレームやフリーズするフレームが多くなるため、遅いフレームやフリーズしたフレームの報告が増えます。ただし、デバイスのリフレッシュ レートが 60 Hz を超える場合は、各フレームでレンダリング時間が短くなります。これにより、遅いフレームやフリーズしたフレームが報告される回数が少なくなります。これは、Performance Monitoring SDK の現在の制限です。
軽量で名前空間付きの Performance Monitoring JS SDK(「スタンドアロン」SDK)をウェブアプリに追加するにはどうすればよいですか?
アプリで使用している Firebase プロダクトが Performance Monitoring だけで、次のことを行いたい場合は、スタンドアロンの Performance Monitoring SDK と以下の推奨ヘッダー スクリプトを使用できます。
名前空間付きライブラリを使用する
SDK パッケージ サイズを小さくする
ページが読み込まれるまで SDK の初期化を延期する
アプリにスタンドアロンの Performance Monitoring SDK を追加し、ページが読み込まれるまで初期化を延期するには、次の操作を行います。
次のスクリプトをインデックス ファイルのヘッダーに追加します。
アプリの Firebase プロジェクト構成オブジェクト を追加します。
( function ( sa , fbc ){ function load ( f , c ){ var a = document . createElement ( 'script' );
a . async = 1 ; a . src = f ; var s = document . getElementsByTagName ( 'script' )[ 0 ];
s . parentNode . insertBefore ( a , s );} load ( sa );
window . addEventListener ( 'load' , function (){ firebase . initializeApp ( fbc ) . performance ()});
})( performance_standalone , firebaseConfig );
ここで
performance_standalone は 'https://www.gstatic.com/firebasejs/11.0.2/firebase-performance.js'
です
firebaseConfig はアプリの Firebase 構成オブジェクト です。
上記のスクリプトはスタンドアロン SDK を非同期で読み込み、ウィンドウの onload
イベントが発生した後で Firebase を初期化します。この方法では、SDK を初期化する時点でブラウザが読み込み指標をすでに報告しているため、SDK がページ読み込み指標 に及ぼす影響が小さくなります。
注: スタンドアロンの Performance Monitoring SDK を使用している場合は、Firebase のコア SDK を明示的に組み込みません。スタンドアロン SDK には軽量の Firebase コア SDK が含まれています。
スタンドアロンの Performance Monitoring SDK とヘッダー スクリプトについて
このスタンドアロン SDK はサイズが小さくなるよう最適化されています。gzip で圧縮され、約 10 KB です。Firebase Performance Monitoring のすべての機能と Firebase コア SDK 機能の最小セットも含まれています。
Firebase Performance Monitoring が使用する API(fetch
と Promise
)は、古いブラウザでは機能しません。これらの API のポリフィルは標準の Firebase Performance Monitoring JS SDK に含まれていますが、サイズを小さくするため、スタンドアロン SDK には含まれていません。
ブラウザからページ読み込み指標を取得するため、Performance Monitoring SDK は Resource Timing API に部分的に依存しています。
次のスニペットはヘッダー スクリプトの一部で、最後に SDK の初期化を延期しています。
( function ( sdkSource , firebaseConfigObject ) {
function load ( f , c ) {
// Creates a script tag to load the standalone SDK
var sdkScript = document . createElement ( 'script' );
// Sets it to an async script so that it doesn 't interfere with page load
sdkScript . async = 1 ;
// Sets the source of the script
sdkScript . src = f ;
// Inserts the script into the head of the page
var s = document . getElementsByTagName ( 'script' )[ 0 ];
s . parentNode . insertBefore ( sdkScript , s );
}
// Calls the load method
load ( sdkSource );
// Initializes the SDK only when the onload method is called
window . addEventListener ( 'load' , function () {
firebase . initializeApp ( firebaseConfigObject ) . performance ();
});
})( performance_standalone , firebaseConfig );
ここで
performance_standalone は 'https://www.gstatic.com/firebasejs/11.0.2/firebase-performance-standalone.js'
です。
firebaseConfig はアプリの Firebase 構成オブジェクト です。
ほぼリアルタイムのデータ処理と表示
「準リアルタイム」(またはニア リアルタイム)のパフォーマンス データとは何ですか?
Firebase Performance Monitoring が収集されたパフォーマンス データを適時処理すると、ほぼリアルタイムのデータが Firebase コンソールに表示されます。処理されたデータは、収集されて数分以内にコンソールに表示されるため、「ほぼリアルタイム」という言葉を使用しています。
ほぼリアルタイムのデータ処理を利用するには、リアルタイム対応の SDK バージョン をアプリで使用します。
準リアルタイムのパフォーマンス データをアプリで取得するにはどうすればよいですか?
リアルタイムのデータ処理に対応した Performance Monitoring SDK のバージョンをアプリで使用するだけで、ほぼリアルタイムのデータ処理を利用できます。
リアルタイム対応の SDK のバージョンは次のとおりです。
iOS - v7.3.0 以降
tvOS - v8.9.0 以降
Android - v19.0.10 以降(または Firebase Android BoM v26.1.0 以降)
ウェブ - v7.14.0 以降
常に最新バージョンの SDK を使用することをおすすめします。ただし、上述のいずれのバージョンでも、Performance Monitoring でほぼリアルタイムのデータ処理が行われます。
どのバージョンの Performance Monitoring SDK がリアルタイムに対応していますか?
リアルタイムのデータ処理に対応している SDK のバージョンは次のとおりです。
iOS - v7.3.0 以降
tvOS - v8.9.0 以降
Android - v19.0.10 以降(または Firebase Android BoM v26.1.0 以降)
ウェブ - v7.14.0 以降
常に最新バージョンの SDK を使用することをおすすめします。ただし、上述のいずれのバージョンでも、Performance Monitoring でほぼリアルタイムのデータ処理が行われます。
リアルタイム対応の SDK バージョンを使用するようにアプリを更新していないとどうなりますか?
リアルタイム対応の SDK バージョンをアプリで使用していない場合でも、Firebase コンソールにはアプリのパフォーマンス データがすべて表示されます。ただし、パフォーマンス データはデータの収集からおよそ 36 時間遅れて表示されます。
リアルタイム対応の SDK バージョンにアップデートしましたが、一部のユーザーは古いバージョンのアプリを使用しています。それらのユーザーのパフォーマンス データも Firebase コンソールで引き続き表示されますか?
はい。アプリ インスタンスで使用している SDK バージョンに関係なく、すべてのユーザーのパフォーマンス データが表示されます。
ただし、 最近(約 36 時間以内)のデータについては、リアルタイム対応の SDK バージョンを使用するアプリ インスタンスのユーザーのデータが表示されます。一方、 最近ではないデータには、すべてのバージョンのアプリのパフォーマンス データが表示されます。
Firebase サポートに連絡する 場合は、必ず Firebase アプリ ID をお知らせください。Firebase アプリ ID は、settings プロジェクト設定 のアプリ カードで確認します。