kubell Creator's Note

ビジネスチャット「Chatwork」のエンジニアのブログです。

ビジネスチャット「Chatwork」のエンジニアのブログです。

読者になる

BigQuery & Crashlytics & Zapier - 毎日アプリのクラッシュ数をチャットに流れるようにする

こんにちは、モバイルアプリケーション開発部のAndroidエンジニアのジェローム(@yujiro45)です。 最近寒いですね。寒くても、まだタンクトップを着ています〜

ChatworkのAdvent Calendar 2022の22日目の記事です。

どんなに気をつけていても、予期せずアプリがクラッシュしてしまうことはあるんじゃないですか? 発生したクラッシュが初の場合チャットへ通知したり、メールが送ったりすることがよくあると思いますが、クラッシュ数がどれくらいあるのかは、Firebase consoleでしか見れません。エンジニアでないと把握しづらいですね。この記事では毎日モバイルアプリのクラッシュ数をチャットに流れるようにする方法についてを記載したいと思います。

BigQueryとは

BigQueryは、Googleのクラウドデータベースで、Google Cloud (旧GCP:Google Cloud Platform)にて提供されています。そのため、他の多彩なGoogleのサービスとの連携や接続も非常に容易に行うことができ、データをマーケティング活用しやすいです(Firebase CrashlyticsとかAnalyticsなど)。BigQueryは非常に高性能で、エンジニアでなくともSQLの知識のみで大量のデータを使って集計作業や解析作業を行うことが可能です。

Crashlyticsとは

Crashlyticsは、Google Cloudで提供されるプロダクトの一つで、AndroidやiOSアプリのクラッシュの検知とその原因の究明に役立つサービスです。クラッシュログとどのクラスの何行目で発生したかまで確認することができ、原因の特定が行いやすいです。急なクラッシュの増加などを通知で知ることもできます。

Zapierとは

Zapierとはノーコードでワークフロー(Zap)の自動化を実現することができるWEBアプリケーションです。様々なクラウドサービスやSNSなどを連携して、自分の業務に合わせた自動化ワークフローをプログラミング知識不要で作成できます。

クラッシュ数をチャットに流れる方法

CrashlyticsのデータをBigQueryに保存する

  • 1) CrashlyticsにBigQueryを統合する

まずはFirebaseのコンソールを開いて、プロジェクトプロジェクト設定統合→BigQueryのリンクの順に選択してください。

  • 2) クエリを書きましょう。

次にBigQueryを開き、Crashlyticsのクラッシュ数をゲットするために、クエリを書きましょう。

# 自動
SELECT
    # Unique Users数
    COUNT(DISTINCT installation_uuid) as UniqueUser,
    # クラッシュ数
    COUNT(DISTINCT event_id) AS totalEvent
FROM
    `<テーブル名>`
WHERE
    # Fatalクラッシュのみです。全てのクラッシュ数が欲しいなら、消しても大丈夫です。
    error_type = 'FATAL'
    AND
    # 数日前のクラッシュ数
    DATE_DIFF(CURRENT_DATE(), DATE(event_timestamp), DAY) <= <期間>

クエリを書いたら、一回実行するのが必要です。そうしないと、Zapierで見れないようになります。

  • 3) スケジュールを設定しましょう。

クエリを書いた後、スケジュールを設定ましょう。スケジュールスケジュールされたクエリを新規作成を選択してください。

出てくる画面の情報を入力して、毎日に何時からの設定してください。終わったら、保存してください。

SQLスケジュールクエリを手動で実行する

必要であれば、以下の手順で手動でクエリを実行してください。

これでスケジュールクエリの設定は終わりました。次にZapierを設定しましょう٩( 'ω' )و

ZapierとBigQueryを繋いで、チャットに流れるようにする

新しいZapを作成し、BigQueryとChatworkのステップを追加してください。

BigQueryのイベントトリガーの方で、Query Job Completed (With Row Data)を選んで、他のところを設定してください。

Chatworkのステップで、イベントをSend Messageを選んで進んでください。

Set up actionで、どのRoomに通知を送りたいのかを選んで、

BigQueryで適切に設定できていたら、メッセージエリアをタップしたとき、BigQueryの画面が出てきたり、Rows Total EventRows Unique Userを選択できるようになります。

毎日スケジュールクエリが実行されたら、チャットに流れるようにできました!

これで終わりました〜!とても便利で、クラッシュ数が見やすくなったので、ぜひやってみてください。ヾ(๑╹◡╹)ノ"

ボーナス

ZapierはGoogleスプレットシートと繋がれるので、スプレットシートにデータを保存したら、チャートはもっと分かりやすくなるようになりました。😉

注意点

BigQueryの料金

毎日データをBigQueryに保存すると、たくさん課金されてしまうので、毎日「DELETE」クエリをスケジュールする必要があります。

cloud.google.com

Crashlyticsからデータ転送のタイミング

プロジェクトによって、毎日CrashlyticsからBigQueryにデータが転送されるタイミングは違って、設定できないので、クラッシュ数が0件になることがあります。タイミングをちゃんと考えてください。

プロジェクトA
プロジェクトB