ZhgChg.Li

CrashlyticsとGoogle Analytics連携|AppのCrash-Free Users率を自動取得する方法

Google Apps ScriptでGoogle AnalyticsからCrashlyticsのCrash-Free Users率を自動取得し、Google Sheetsに即時反映。手動作業を削減し、リアルタイムで安定性を把握可能です。

CrashlyticsとGoogle Analytics連携|AppのCrash-Free Users率を自動取得する方法
本記事は AI による翻訳です。お気づきの点があればお知らせください。

Crashlytics + Google Analytics で App のクラッシュフリー ユーザー率を自動取得

Google Apps Script を使って Google Analytics 経由で Crashlytics のデータを取得し、自動的に Google Sheet に記入する方法

前回の「 Crashlytics + Big Query でよりリアルタイムかつ便利なクラッシュ追跡ツールを作る 」では、Crashlytics のクラッシュ記録を Raw Data として Big Query にエクスポートし、Google Apps Script を使って Top 10 クラッシュを自動で定期的にクエリし、Slack チャンネルに通知を送る方法を紹介しました。

本稿は、Appのクラッシュに関連する重要な指標であるCrash-Free Users Rate(影響を受けていないユーザーの割合)の自動化の続きです。多くのAppチームがこのデータを継続的に追跡・記録していますが、従来は手動での確認が一般的でした。本稿の目的は、この繰り返し作業を自動化し、手動確認時のデータ貼り間違いを防ぐことです。前述の通り、Firebase CrashlyticsはAPIを提供していないため、Firebaseのデータを他のGoogleサービスと連携し、そのサービスのAPIを使って関連データを取得します。

最初はこのデータも Big Query から取得できると思っていました。しかし実際には全く違いました。Big Query はクラッシュの生データであり、クラッシュしなかったユーザーのデータがないため、Crash-Free Users Rate は計算できません。このニーズに関する情報はネット上にあまりなく、長く調べた結果、Google Analytics というキーワードが出てきました。Firebase の Analytics やイベントは GA と連携できることは知っていましたが、Crash-Free Users Rate も含まれているとは思いませんでした。GA の API を調べたところ、まさにそれがありました!

API Dimensions & Metrics

API Dimensions & Metrics

Google Analytics Data API (GA4) は2つの指標(Metrics)を提供しています:

  • crashAffectedUsers :クラッシュの影響を受けたユーザー数

  • crashFreeUsersRate :クラッシュの影響を受けていないユーザーの割合(小数で表示)

ルートがわかったら、いよいよ実装を始めましょう!

Firebase と Google Analytics の連携

参考にできるのは公式説明の手順設定であり、本記事では省略します。

GA4 クエリエクスプローラーツール

コードを書く前に、まず公式が提供する Web GUI ツールを使ってクエリ条件を素早く作成し、クエリ結果を取得できます。結果が望んだものであることを確認してから、コードを書き始めましょう。前

前往 >>> GA4 Query Explorer

  • 左上で必ず GA4 を選択してください

  • 右側でログイン後、該当する GA アカウントとプロパティを選択してください。

  • Start Date、EndDate:日付を直接入力するか、特殊変数で日付を指定できます(yesterdaytoday30daysAgo7daysAgo)。

  • metrics:crashFreeUsersRate を追加する

  • dimensions:platform(デバイスの種類 iOS/Android/Desktop…)を追加

  • dimension filter:platformstringexactiOS または Android を追加する

両プラットフォームの Crash Free Users Rate をそれぞれクエリする。

一番下までスクロールして「Make Request」をクリックすると、指定した日付範囲内の Crash-Free Users Rate を確認できます。

後で Firebase Crashlytics を開いて、同じ条件のデータと比較することができます。

ここで両者の数値にわずかな差があることが分かりました(ある数値で0.0002の差がありました)が、原因は不明です。ただし許容範囲内の誤差です。もしすべてGAのCrash-Free Users Rateを使うなら、誤差とは言えません。

Google Apps Script を使ってデータを自動で Google Sheet に入力する

次に自動化の部分です。Google Apps Script を使って GA の Crash-Free Users Rate のデータを取得し、自動で Google シートに入力します。これにより、自動入力と自動追跡を実現します。

上図のように Google Sheet があるとします。

Google Sheet の上部メニューから Extensions -> Apps Script をクリックして Google Apps Script を作成するか、こちらの Google Apps Script -> 左上の「新しいプロジェクト」をクリックしてください。

ログイン後、上部の「未命名プロジェクト名」をクリックして、プロジェクト名を入力してください。

左側の「Services」で「+」をクリックし、「Google Analytics Data API」を追加します。

先ほどの GA4 Query Explorer ツールに戻り、Make Request ボタンの隣にある「Show Request JSON」にチェックを入れて、この条件の Request JSON を取得できます。

この Request JSON を Google Apps Script に変換すると以下のようになります:

// Google Analytics Data API をサービスに追加するのを忘れないでください。さもないとこのエラーが出ます: ReferenceError: AnalyticsData is not defined
// https://ga-dev-tools.web.app/ga4/query-explorer/ -> プロパティID
const propertyId = "";
// https://docs.google.com/spreadsheets/d/googleSheetID/
const googleSheetID = "";
// Google シート名
const googleSheetName = "App Crash-Free Users Rate";

function execute() {
  Logger.log(fetchCrashFreeUsersRate())
}

function fetchCrashFreeUsersRate(platform = "iOS", startDate = "30daysAgo", endDate = "today") {
  const dimensionPlatform = AnalyticsData.newDimension();
  dimensionPlatform.name = "platform";

  const metric = AnalyticsData.newMetric();
  metric.name = "crashFreeUsersRate";

  const dateRange = AnalyticsData.newDateRange();
  dateRange.startDate = startDate;
  dateRange.endDate = endDate;

  const filterExpression = AnalyticsData.newFilterExpression();
  const filter = AnalyticsData.newFilter();
  filter.fieldName = "platform";
  const stringFilter = AnalyticsData.newStringFilter()
  stringFilter.value = platform;
  stringFilter.matchType = "EXACT";
  filter.stringFilter = stringFilter;
  filterExpression.filter = filter;

  const request = AnalyticsData.newRunReportRequest();
  request.dimensions = [dimensionPlatform];
  request.metrics = [metric];
  request.dateRanges = dateRange;
  request.dimensionFilter = filterExpression;

  const report = AnalyticsData.Properties.runReport(request, "properties/" + propertyId);

  return parseFloat(report.rows[0].metricValues[0].value) * 100;
}
  • GA Property ID:同様に、先ほどの GA4 Query Explorer ツールから取得できます:

最初のプロパティ選択メニューで選んだプロパティの下に表示されている数字が propertyId です。

以上のコードを Google Apps Script の右側コードエリアに貼り付け、上部の実行メニューから「execute」関数を選択して、デバッグで正常にデータが取得できるか確認してください:

初回実行時に認証画面が表示されます:

アカウントの認証を手順に従って完了してください。

実行に成功すると、下のログに Crash-Free Users Rate が表示され、クエリが成功したことを示します。

次に、自動で Google Sheet に入力する処理を追加すれば完成です!

完全なコード:

// Google Analytics Data APIをサービスに追加することを忘れないでください。さもないと、このエラーが発生します: ReferenceError: AnalyticsData is not defined

// https://ga-dev-tools.web.app/ga4/query-explorer/ -> プロパティID
const propertyId = "";
// https://docs.google.com/spreadsheets/d/googleSheetID/
const googleSheetID = "";
// Google Sheetの名前
const googleSheetName = "";

function execute() {
  const today = new Date();
  const daysAgo7 = new Date(new Date().setDate(today.getDate() - 6)); // 今日を含まないので -6

  const spreadsheet = SpreadsheetApp.openById(googleSheetID);
  const sheet = spreadsheet.getSheetByName(googleSheetName);
  
  var rows = [];
  rows[0] = Utilities.formatDate(daysAgo7, "GMT+8", "MM/dd")+"~"+Utilities.formatDate(today, "GMT+8", "MM/dd");
  rows[1] = fetchCrashFreeUsersRate("iOS", Utilities.formatDate(daysAgo7, "GMT+8", "yyyy-MM-dd"), Utilities.formatDate(today, "GMT+8", "yyyy-MM-dd"));
  rows[2] = fetchCrashFreeUsersRate("android", Utilities.formatDate(daysAgo7, "GMT+8", "yyyy-MM-dd"), Utilities.formatDate(today, "GMT+8", "yyyy-MM-dd"));
  sheet.appendRow(rows);
}

function fetchCrashFreeUsersRate(platform = "iOS", startDate = "30daysAgo", endDate = "today") {
  const dimensionPlatform = AnalyticsData.newDimension();
  dimensionPlatform.name = "platform";

  const metric = AnalyticsData.newMetric();
  metric.name = "crashFreeUsersRate";

  const dateRange = AnalyticsData.newDateRange();
  dateRange.startDate = startDate;
  dateRange.endDate = endDate;

  const filterExpression = AnalyticsData.newFilterExpression();
  const filter = AnalyticsData.newFilter();
  filter.fieldName = "platform";
  const stringFilter = AnalyticsData.newStringFilter()
  stringFilter.value = platform;
  stringFilter.matchType = "EXACT";
  filter.stringFilter = stringFilter;
  filterExpression.filter = filter;

  const request = AnalyticsData.newRunReportRequest();
  request.dimensions = [dimensionPlatform];
  request.metrics = [metric];
  request.dateRanges = dateRange;
  request.dimensionFilter = filterExpression;

  const report = AnalyticsData.Properties.runReport(request, "properties/" + propertyId);

  return parseFloat(report.rows[0].metricValues[0].value) * 100;
}

上部の「Run or Debug」を再度クリックして「execute」を実行してください。

Google Sheet に戻り、データの追加が成功しました!

トリガーの追加と自動実行のスケジュール設定

左側の時計アイコンを選択し、右下の「+ Add Trigger」をクリックします。

  • 最初の function は「execute」を選択してください。

  • time based trigger は週単位のタイマーを選択して、毎週データを追跡&追加できます。

設定が完了したら、[Save] をクリックしてください。

完了

今から、AppのCrash-Free Users Rateのデータ記録と追跡を完全に自動化します。手動での検索や入力は不要で、すべて機械に任せて自動処理します!

私たちはAppのクラッシュ問題の解決に専念するだけでいい!

p.s. 前回の Big Query を使ったデータ照会は有料でしたが、今回は Crash-Free Users Rate の照会も Google Apps Script も完全無料で安心して使えます。

結果を Slack チャンネルに同期送信したい場合は、前回の記事を参照してください:

関連記事

PostZMediumToMarkdown によって Medium から変換されました。

GitHub で編集
この記事を改善
本記事は Medium で初公開
オリジナルを読む
この記事をシェア
リンクをコピー · SNS でシェア
ZhgChgLi
著者

ZhgChgLi

An iOS, web, and automation developer from Taiwan 🇹🇼 who also loves sharing, traveling, and writing.

コメント