Firebase Summit で発表されたすべての情報をご覧ください。Firebase を使用してアプリ開発を加速し、自信を持ってアプリを実行する方法を紹介しています。詳細

FirebaseCrashlyticsデータをBigQueryにエクスポートする

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

さらに分析するために、Crashlytics データをBigQueryにエクスポートできます。 BigQuery では、BigQuery SQL を使用してデータを分析し、別のクラウド プロバイダにエクスポートして、Google データポータルでの可視化とカスタム ダッシュボードに使用できます。

BigQuery エクスポートを有効にする

  1. Firebase コンソールの [統合] ページに移動します。
  2. BigQueryカードで、[リンク] をクリックします。
  3. 画面の指示に従って BigQuery を有効にします。

プロジェクトを BigQuery にリンクすると:

  • Firebase は、Firebase プロジェクトから BigQuery へのデータの毎日の同期を設定します。
  • デフォルトでは、プロジェクト内のすべてのアプリが BigQuery にリンクされ、後でプロジェクトに追加するアプリは自動的に BigQuery にリンクされます。データを送信するアプリを管理できます
  • Firebaseは、既存のデータのコピーを BigQuery にエクスポートします。これには、リンクされたアプリごとに、毎日の同期からのデータを含むバッチ テーブルが含まれます。
  • Crashlytics BigQuery ストリーミング エクスポートを有効にすると、リンクされたすべてのアプリにも、常に更新されるデータを含むリアルタイム テーブルが作成されます。

BigQuery エクスポートを無効にするには、Firebase コンソールでプロジェクトのリンクを解除します。

BigQuery にエクスポートされるデータは何ですか?

Firebase Crashlytics データは、 firebase_crashlyticsという名前の BigQuery データセットにエクスポートされます。デフォルトでは、プロジェクト内の各アプリの Crashlytics データ セット内に個々のテーブルが作成されます。 Firebase は、アプリのバンドル ID に基づいてテーブルに名前を付け、ピリオドをアンダースコアに変換し、最後にプラットフォーム名を追加します。

たとえば、ID がcom.google.testのアプリのデータは、 com_google_test_ANDROIDという名前のテーブルにあります。このバッチ テーブルは、毎日 1 回更新されます。 Crashlytics BigQuery ストリーミング エクスポートを有効にすると、Firebase Crashlytics データもリアルタイムでcom_google_test_ANDROID_REALTIMEにストリーミングされます。

表の各行は、クラッシュ、致命的でないエラー、ANR など、アプリで発生したイベントを表します。

Crashlytics BigQuery ストリーミング エクスポートを有効にする

BigQueryStreamingを使用して、Crashlytics データをリアルタイムでストリーミングできます。ライブ ダッシュボードに情報を表示する、ロールアウトをライブで見る、アラートやカスタム ワークフローをトリガーするアプリケーションの問題を監視するなど、ライブ データを必要とするあらゆる目的に使用できます。

Crashlytics BigQuery ストリーミング エクスポートは、BigQuery サンドボックスでは使用できません。

Crashlytics BigQuery ストリーミング エクスポートを有効にすると、バッチ テーブルに加えてリアルタイム テーブルが作成されます。以下に、テーブル間の注意すべき相違点を示します。

バッチテーブルリアルタイム テーブル
  • 1 日 1 回エクスポートされるデータ
  • BigQuery へのバッチ書き込み前に永続的に保存されるイベント
  • 90日前までバックフィル可能
  • リアルタイムでエクスポートされたデータ
  • バックフィルなし

バッチ テーブルは、イベントを書き込む前に永続的に保存し、最大 90 日間テーブルにバックフィルできるため、長期的な分析と経時的な傾向の特定に最適です。リアルタイム テーブルにデータを書き込むと、すぐに BigQuery に書き込まれるため、ライブ ダッシュボードやカスタム アラートに最適です。これら 2 つのテーブルをスティッチング クエリと組み合わせて、両方の利点を得ることができます。以下のクエリ例 9を参照してください。

デフォルトでは、リアルタイム テーブルのパーティションの有効期限は 30 日です。これを変更する方法については、「パーティションの有効期限の更新」を参照してください。

Crashlytics BigQuery ストリーミングを有効にする

ストリーミングを有効にするには、BigQuery統合ページの Crashlytics セクションに移動し、[ストリーミングを含める]チェックボックスをオンにします。

データポータル テンプレート

Data Studio テンプレートでリアルタイム データを有効にするには、エクスポートされた Crashlytics データを Data Studio で視覚化する の手順に従います。

ビュー

BigQuery UI を使用して、以下のサンプル クエリをビューに変換できます。詳細な手順については、ビューの作成を参照してください。

エクスポートされたデータで何ができますか?

BigQuery のエクスポートには、デバイスの種類、オペレーティング システム、例外 (Android アプリ) またはエラー (Apple アプリ)、Crashlytics ログ、およびその他のデータを含む生のクラッシュ データが含まれます。

BigQuery での Firebase Crashlytics データの操作

次の例は、Crashlytics データに対して実行できるクエリを示しています。これらのクエリは、Crashlytics ダッシュボードでは利用できないレポートを生成します。

Crashlytics クエリの例

次の例は、クラッシュ イベント データをより理解しやすい要約に集約するレポートを生成する方法を示しています。

例 1: 日ごとのクラッシュ

リード開発者は、できるだけ多くのバグを修正するために取り組んだ後、自分のチームが新しい写真共有アプリをリリースする準備がようやく整ったと考えています。その前に、過去 1 か月間の 1 日あたりのクラッシュ数をチェックして、バグバッシュによってアプリが時間の経過とともにより安定したことを確認したいと考えています。

SELECT
  COUNT(DISTINCT event_id) AS number_of_crashes,
  FORMAT_TIMESTAMP("%F", event_timestamp) AS date_of_crashes
FROM
 `projectId.firebase_crashlytics.package_name_ANDROID`
GROUP BY
  date_of_crashes
ORDER BY
  date_of_crashes DESC
LIMIT 30;

例 2: 最も普及しているクラッシュを見つける

生産計画に適切な優先順位を付けるために、プロジェクト マネージャーは、製品に最も蔓延している上位 10 件のクラッシュを指摘する方法を熟考します。これらは、データの適切なポイントを提供するクエリを生成します。

SELECT
  DISTINCT issue_id,
  COUNT(DISTINCT event_id) AS number_of_crashes,
  COUNT(DISTINCT installation_uuid) AS number_of_impacted_user,
  blame_frame.file,
  blame_frame.line
FROM
  `projectId.firebase_crashlytics.package_name_ANDROID`
WHERE
  event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(),INTERVAL 168 HOUR)
  AND event_timestamp < CURRENT_TIMESTAMP()
GROUP BY
  issue_id,
  blame_frame.file,
  blame_frame.line
ORDER BY
  number_of_crashes DESC
LIMIT 10;

例 3: クラッシュしているデバイスのトップ 10

秋はスマホの新シーズン!開発者は、それが新しいデバイス固有の問題のシーズンであることも知っています。差し迫った互換性の問題に先んじるために、彼らは過去 1 週間で最も多くのクラッシュを経験した 10 台のデバイスを特定するクエリをまとめました。

SELECT
  device.model,
COUNT(DISTINCT event_id) AS number_of_crashes
FROM
  `projectId.firebase_crashlytics.package_name_ANDROID`
WHERE
  event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 168 HOUR)
  AND event_timestamp < CURRENT_TIMESTAMP()
GROUP BY
  device.model
ORDER BY
  number_of_crashes DESC
LIMIT 10;

例 4: カスタム キーによるフィルター処理

ゲーム開発者は、ゲームのどのレベルでクラッシュが最も多いかを知りたいと考えています。その統計を追跡できるように、カスタムの Crashlytics キーcurrent_levelを設定し、ユーザーが新しいレベルに到達するたびに更新します。

Objective-C

CrashlyticsKit setIntValue:3 forKey:@"current_level";

迅速

Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");

ジャワ

Crashlytics.setInt("current_level", 3);

BigQuery エクスポートでそのキーを使用して、各クラッシュ イベントに関連付けられたcurrent_level値の分布をレポートするクエリを作成します。

SELECT
COUNT(DISTINCT event_id) AS num_of_crashes,
  value
FROM
  `projectId.firebase_crashlytics.package_name_ANDROID`
UNNEST(custom_keys)
WHERE
  key = "current_level"
GROUP BY
  key,
  value
ORDER BY
  num_of_crashes DESC

例 5: ユーザー ID の抽出

開発者は早期アクセスのアプリを持っています。ほとんどのユーザーは気に入っていますが、異常な回数のクラッシュを経験したユーザーは 3 人です。問題の真相を突き止めるために、ユーザー ID を使用して、それらのユーザーのすべてのクラッシュ イベントを取得するクエリを作成します。

SELECT *
FROM
  `projectId.firebase_crashlytics.package_name_ANDROID`
WHERE
  user.id IN ("userid1", "userid2", "userid3")
ORDER BY
  user.id
 

例 6: 特定のクラッシュの問題に直面しているすべてのユーザーを見つける

開発者は、ベータ テスターのグループに重大なバグをリリースしました。チームは、上記の例 2 のクエリを使用して、特定のクラッシュの問題 ID を特定することができました。次に、クエリを実行して、このクラッシュの影響を受けたアプリ ユーザーのリストを抽出したいと考えています。

SELECT user.id as user_id
FROM
  `projectId.firebase_crashlytics.package_name_ANDROID`
WHERE
  issue_id = "YOUR_ISSUE_ID"
  AND application.display_version = ""
  AND user.id != ""
ORDER BY
  user.id;

例 7: クラッシュの問題によって影響を受けたユーザーの数 (国別内訳)

現在、チームは新しいリリースのロールアウト中に重大なバグを検出しました.上記の例 2 のクエリを使用して、特定のクラッシュの問題 ID を特定できました。チームは、このクラッシュが世界中のさまざまな国のユーザーに広がっているかどうかを確認したいと考えています。

このクエリを作成するには、チームは次のことを行う必要があります。

  1. Google アナリティクスの BigQuery エクスポートを有効にします。プロジェクト データを BigQuery にエクスポートする をご覧ください。

  2. アプリを更新して、Google アナリティクス SDK と Crashlytics SDK の両方にユーザー ID を渡します。

    Objective-C
    CrashlyticsKit setUserIdentifier:@"123456789";
    FIRAnalytics setUserID:@"12345678 9";
    
    迅速
    Crashlytics.sharedInstance().setUserIdentifier("123456789");
    Analytics.setUserID("123456789");
    
    ジャワ
    Crashlytics.setUserIdentifier("123456789");
    mFirebaseAnalytics.setUserId("123456789");
    
  3. ユーザー ID フィールドを使用して、Google アナリティクス BigQuery データ セットのイベントと Crashlytics BigQuery データ セットのクラッシュを結合するクエリを作成します。

    SELECT DISTINCT c.issue_id, a.geo.country, COUNT(DISTINCT c.user.id) as num_users_impacted
    FROM `projectId.firebase_crashlytics.package_name_ANDROID` c
    INNER JOIN  `projectId.analytics_YOUR_TABLE.events_*` a on c.user.id = a.user_id
    WHERE
     c.issue_id = "YOUR_ISSUE_ID"
     AND a._TABLE_SUFFIX BETWEEN '20190101'
     AND '20200101'
    GROUP BY
     c.issue_id,
     a.geo.country,
     c.user.id
    

例 8: 今日のこれまでの上位 5 件の問題

Crashlytics BigQuery ストリーミング エクスポートを有効にする必要があります

SELECT
  issue_id,
  COUNT(DISTINCT event_id) AS events
FROM
  `your_project.firebase_crashlytics.package_name_ANDROID_REALTIME`
WHERE
  DATE(event_timestamp) = CURRENT_DATE()
GROUP BY
  issue_id
ORDER BY
  events DESC
LIMIT
  5;

例 9: 今日を含む DATE 以降の上位 5 件の問題

Crashlytics BigQuery ストリーミング エクスポートを有効にする必要があります。

この例では、バッチ テーブルとリアルタイム テーブルを組み合わせて、信頼できるバッチ データにリアルタイム情報を追加します。 event_idは主キーであるため、 DISTINCT event_idを使用して、2 つのテーブルから共通のイベントを重複排除できます。

SELECT
  issue_id,
  COUNT(DISTINCT event_id) AS events
FROM (
  SELECT
    issue_id,
    event_id,
    event_timestamp
  FROM
    `your_project.firebase_crashlytics.package_name_ANDROID_REALTIME`
  UNION ALL
  SELECT
    issue_id,
    event_id,
    event_timestamp
  FROM
    `your_project.firebase_crashlytics.package_name_ANDROID`)
WHERE
  event_timestamp >= "2020-01-13"
GROUP BY
  issue_id
ORDER BY
  events DESC
LIMIT
  5;

BigQuery の Firebase Crashlytics スキーマを理解する

Crashlytics を BigQuery にリンクすると、Firebase は最近のイベント(クラッシュ、致命的ではないエラー、ANR)をエクスポートします。これには、リンクの最大 2 日前までのイベントが含まれ、最大 90 日間のバックフィルが可能です。

その時点からリンクを無効にするまで、Firebase は Crashlytics イベントを毎日エクスポートします。各エクスポート後、データが BigQuery で使用できるようになるまでに数分かかる場合があります。

データセット

Firebase Crashlytics は、BigQuery に Crashlytics データ用の新しいデータセットを作成します。複数のアプリがある場合でも、データセットはプロジェクト全体をカバーします。

テーブル

アプリのデータのエクスポートをオプトアウトしていない限り、Firebase Crashlytics はプロジェクト内の各アプリのデータセットにテーブルを作成します。 Firebase は、アプリのバンドル ID に基づいてテーブルに名前を付け、ピリオドをアンダースコアに変換し、最後にプラットフォーム名を追加します。

たとえば、ID com.google.testを持つ Android アプリのデータはcom_google_test_ANDROIDという名前のテーブルにあり、リアルタイム データ (有効な場合) はcom_google_test_ANDROID_REALTIMEという名前のテーブルにあります。

テーブルには、開発者によって定義されたカスタム Crashlytics キーに加えて、Crashlytics データの標準セットが含まれています。

表の各行は、アプリで発生したエラーを表します。

コラム

テーブル内の列は、クラッシュ、致命的でないエラー、ANR で同じです。 Crashlytics BigQuery ストリーミング エクスポートが有効になっている場合、リアルタイム テーブルにはバッチ テーブルと同じ列が含まれます。エクスポート内の列を以下に示します。

スタック トレースなし

スタック トレースのないイベントを表す行に存在する列。

フィールド名データ・タイプ説明
プラットホームストリングApple または Android アプリ
bundle_identifierストリングバンドル ID (com.google.gmail など)
event_idストリングイベントの一意の ID
is_fatalブール値アプリがクラッシュしたかどうか
error_typeストリングイベントのエラー タイプ (FATAL、NON_FATAL、AN​​R)
issue_idストリングイベントに関連する問題
event_timestampタイムスタンプイベントが発生したとき
デバイス記録イベントが発生したデバイス
device.manufacturerストリングデバイスの製造元
デバイスモデルストリングデバイスモデル
デバイスのアーキテクチャストリングX86_32、X86_64、ARMV7、ARM64、ARMV7S、またはARMV7K
メモリー記録デバイスのメモリ ステータス
メモリ使用量INT64使用されたメモリのバイト数
メモリ.フリーINT65残りのメモリのバイト数
保管所記録デバイスの永続ストレージ
保管・中古INT64使用されたストレージのバイト数
保管無料INT64残りのストレージのバイト数
オペレーティング·システム記録デバイスの OS の詳細
operating_system.display_versionストリングOSのバージョン
operating_system.nameストリングOS名
operating_system.modification_stateストリングMODIFIED または UNMODIFIED、つまり、デバイスが脱獄/ルート化されているかどうか
operating_system.typeストリングデバイスのオペレーティング システムの種類。例: IOS、MACOS
operating_system.device_typeストリングデバイスのタイプ。例: モバイル、タブレット、テレビ
応用記録イベントを生成したアプリ
application.build_versionストリングアプリのビルド バージョン
application.display_versionストリング
ユーザー記録オプション: アプリのユーザーについて収集された情報
ユーザー名ストリングオプション: ユーザーの名前
user.emailストリングオプション: ユーザーのメールアドレス
ユーザーIDストリングオプション: ユーザーに関連付けられたアプリ固有の ID
カスタムキー繰り返し記録開発者が定義したキーと値のペア
custom_keys.keyストリング開発者が定義したキー
custom_keys.valueストリング開発者が定義した値
installation_uuidストリング一意のアプリとデバイスのインストールを識別する ID
crashlytics_sdk_versionsストリングイベントを生成した Crashlytics SDK のバージョン
app_orientationストリングPORTRAIT、LANDSCAPE、FACE_UP、またはFACE_DOWN
device_orientationストリングPORTRAIT、LANDSCAPE、FACE_UP、またはFACE_DOWN
プロセス状態ストリングバックグラウンドまたはフォアグラウンド
ログ繰り返し記録Crashlytics ロガーによって生成されたタイムスタンプ付きのログ メッセージ (有効な場合)
ログ.タイムスタンプタイムスタンプログが作成されたとき
ログ.メッセージストリングログに記録されたメッセージ
パン粉繰り返し記録タイムスタンプ付きの Google アナリティクス ブレッドクラム (有効な場合)
ブレッドクラム.タイムスタンプタイムスタンプブレッドクラムに関連付けられたタイムスタンプ
パンくずリスト名ストリングブレッドクラムに関連付けられた名前
パンくずリスト.params繰り返し記録ブレッドクラムに関連付けられたパラメータ
パンくずリスト.params.keyストリングブレッドクラムに関連付けられたパラメーター キー
パンくずリスト.params.値ストリングブレッドクラムに関連付けられたパラメーター値
非難_フレーム記録クラッシュまたはエラーの根本原因として特定されたフレーム
Blame_frame.line INT64フレームのファイルの行番号
Blame_frame.fileストリングフレームファイルの名前
Blame_frame.symbolストリング水和されたシンボル、または水和できない場合は生のシンボル
Blame_frame.offset INT64コードを含むバイナリ イメージへのバイト オフセット。Java 例外の設定は解除されます。
Blame_frame.address INT64コードを含むバイナリ イメージ内のアドレス。Java フレームでは未設定
Blame_frame.libraryストリングフレームを含むライブラリの表示名
Blame_frame.ownerストリングDEVELOPER、VENDOR、RUNTIME、PLATFORM、または SYSTEM
Blame_frame.blamedブール値Crashlytics の分析で、このフレームがクラッシュまたはエラーの原因であると判断されたかどうか
例外繰り返し記録Android のみ: このイベント中に発生した例外。ネストされた例外は、新しい順に表示されます (読み取り: 最後のレコードが最初にスローされた例外です)。
exceptions.typeストリングjava.lang.IllegalStateException などの例外タイプ
exceptions.exception_messageストリング例外に関連付けられたメッセージ
exceptions.nestedブール値最後にスローされた例外 (つまり、最初のレコード) を除くすべての例外に対して true
例外.タイトルストリングスレッドのタイトル
例外.サブタイトルストリングスレッドのサブタイトル
exceptions.blamedブール値Crashlytics が例外がエラーまたはクラッシュの原因であると判断した場合は true
例外.フレーム繰り返し記録例外に関連付けられたフレーム
例外.frames.line INT64フレームのファイルの行番号
例外.frames.ファイルストリングフレームファイルの名前
例外.フレーム.シンボルストリング水和されたシンボル、または水和できない場合は生のシンボル
例外.frames.offset INT64コードを含むバイナリ イメージへのバイト オフセット。Java 例外の設定は解除されます。
例外.フレーム.アドレスINT64コードを含むバイナリ イメージ内のアドレス。Java フレームでは未設定
例外.frames.libraryストリングフレームを含むライブラリの表示名
例外.frames.所有者ストリングDEVELOPER、VENDOR、RUNTIME、PLATFORM、または SYSTEM
exceptions.frames.blamedブール値Crashlytics の分析で、このフレームがクラッシュまたはエラーの原因であると判断されたかどうか
エラー繰り返し記録Apple アプリのみ: 致命的ではないエラー
error.queue_nameストリングスレッドが実行されていたキュー
エラーコードINT64アプリのカスタム ログ NSError に関連付けられたエラー コード
error.titleストリングスレッドのタイトル
error.subtitleストリングスレッドのサブタイトル
error.blamedブール値Crashlytics の分析により、このフレームがエラーの原因であると判断されたかどうか
エラーフレーム繰り返し記録スタックトレースのフレーム
error.frames.line INT64フレームのファイルの行番号
error.frames.fileストリングフレームファイルの名前
エラー.フレーム.シンボルストリング水和されたシンボル、または水和できない場合は生のシンボル
error.frames.offset INT64コードを含むバイナリ イメージへのバイト オフセット
error.frames.address INT64コードを含むバイナリ イメージ内のアドレス
error.frames.libraryストリングフレームを含むライブラリの表示名
error.frames.ownerストリングDEVELOPER、VENDOR、RUNTIME、PLATFORM、または SYSTEM
error.frames.blamedブール値Crashlytics の分析により、このフレームがエラーの原因であると判断されたかどうか
スレッド繰り返し記録イベント時に存在するスレッド
スレッドがクラッシュしましたブール値スレッドがクラッシュしたかどうか
スレッド.スレッド名ストリングスレッドの名前
スレッド.queue_nameストリングApple アプリのみ: スレッドが実行されていたキュー
スレッド.シグナル名ストリングアプリのクラッシュの原因となったシグナルの名前。クラッシュしたネイティブ スレッドにのみ存在します。
スレッド.シグナルコードストリングアプリのクラッシュの原因となったシグナルのコード。クラッシュしたネイティブ スレッドにのみ存在する
スレッド.crash_address INT64アプリケーションのクラッシュの原因となったシグナルのアドレス。クラッシュしたネイティブ スレッドにのみ存在する
スレッドコードINT64 Apple アプリのみ: アプリケーションのカスタム ログに記録された NSError のエラー コード
スレッド.タイトルストリングスレッドのタイトル
スレッド。サブタイトルストリングスレッドのサブタイトル
スレッド。ブール値Crashlytics の分析で、このフレームがクラッシュまたはエラーの原因であると判断されたかどうか
スレッド.フレーム繰り返し記録スレッドのフレーム
スレッド.フレーム.ラインINT64フレームのファイルの行番号
スレッド.フレーム.ファイルストリングフレームファイルの名前
スレッド.フレーム.シンボルストリング水和されたシンボル、または水和できない場合は生のシンボル
スレッド.フレーム.オフセットINT64コードを含むバイナリ イメージへのバイト オフセット
スレッド.フレーム.アドレスINT64コードを含むバイナリ イメージ内のアドレス
スレッド.フレーム.ライブラリストリングフレームを含むライブラリの表示名
スレッド.フレーム.所有者ストリングDEVELOPER、VENDOR、RUNTIME、PLATFORM、または SYSTEM
スレッド.フレーム.非難ブール値Crashlytics の分析により、このフレームがエラーの原因であると判断されたかどうか

エクスポートされた Crashlytics データをデータポータルで視覚化する

Google データスタジオは、BigQuery の Crashlytics データセットを読みやすく、共有しやすく、完全にカスタマイズ可能なレポートに変換します。

Data Studio の使用方法について詳しくは、Data Studio クイックスタート ガイドのWelcome to Data Studioをお試しください。

Crashlytics レポート テンプレートの使用

データポータルには、エクスポートされた Crashlytics BigQuery スキーマからのディメンションと指標の包括的なセットを含む Crashlytics のサンプル レポートがあります。 Crashlytics BigQuery ストリーミング エクスポートを有効にしている場合は、データポータル テンプレートのリアルタイム トレンドページでそのデータを表示できます。サンプルをテンプレートとして使用して、独自のアプリの生のクラッシュ データに基づいて新しいレポートと視覚化をすばやく作成できます。

  1. Crashlytics Data Studio ダッシュボード テンプレートを開きます。
  2. 右上隅にある [テンプレートを使用] をクリックします。
  3. [新しいデータ ソース] ドロップダウンで、[新しいデータ ソースの作成] を選択します。
  4. BigQueryカードで [選択] をクリックします。
  5. My Projects > [your-project-name] > firebase_crashlytics > [your-table-name]を選択して、エクスポートされた Crashlytics データを含むテーブルを選択します。バッチ テーブルはいつでも選択できます。 Crashlytics BigQuery ストリーミング エクスポートが有効になっている場合は、代わりにリアルタイム テーブルを選択できます。
  6. Configurationで、 Crashlytics Template levelDefaultに設定します。
  7. [接続]をクリックして、新しいデータ ソースを作成します。
  8. [レポートに追加] をクリックして、Crashlytics テンプレートに戻ります。
  9. 最後に、[レポートの作成] をクリックして、Crashlytics Data Studio ダッシュボード テンプレートのコピーを作成します。