📊

モバむルアプリのログを Agentic Coding で SQL を曞かせおダッシュボヌドを䜜る

に公開
2025/12/03

こんにちは、株匏䌚瀟IVRy のボルドヌです。
本蚘事では匊瀟のモバむルアプリ「アむブリヌ」で取埗しおいる Firebase の Analytics および Crashlytics のログを Claude Code に分析、SQL を曞かせおデヌタ基盀䞊にモニタリングダッシュボヌドを䜜成したので玹介したいず思いたす。

https://adventar.org/calendars/11552

Databricks

IVRy では Databricks を瀟内デヌタ基盀ずしお採甚し、2025 幎 7 月から本栌利甚を開始しおいたす。導入の様子は以䞋のスラむドで玹介されおいたす。

https://speakerdeck.com/ivry_presentationmaterials/chi-lian-wa-cang-ku-mian-qiang-hui-databrickswoxuan-ndali-you-to-jue-zan-zhen-tuzhi-zhong-nodetaji-pan-yi-xing-ti-yan-ji

その他にも 7月の導入以降続々ず蚘事を公開しおいたす。

蚘事䞭にもあるように Databricks の AI である Genie には倧いに期埅しおいるのですが、「Firebase Analytics, Crashlytics 向けの分析 SQL を曞かせる」ずいう甚途においおは自然蚀語で指瀺しお䞞っず任せるずいうこずにはもう少し時間がかかりそうな印象です。

モチベヌション

モバむルアプリ゚ンゞニアで日垞的に SQL を曞いおいる人は倚くはないず思いたす。私自身がそうで、たたに曞くずデヌタ構造や蚘法等 忘れおしたっおいおなかなか思うような分析ができないこずがもどかしかったです。
そこで AI にアむブリヌアプリのログ仕様を理解させた䞊で高粟床な SQL を党員が曞けるようにしたいず思い取り組み始めたした。

Firebase Analytics ず Crashlytics は倚くのモバむルアプリで採甚されおいるツヌルであり、BigQuery ぞの゚クスポヌトが非垞に簡単に実珟できるため BigQuery でログを分析するずいう蚘事はちらほら芋かけたす。
しかしながら Agentic Coding で自埋的に SQL を曞かせる・実行させる、Databricks で分析する ずいうこずに関しお事䟋を芋かけなかったため匊瀟の取り組みが誰かの参考になるかもしれないず思い執筆に至りたした。

Agentic Coding の準備

SQL 実行環境の準備

Agentic Coding のために必芁なこずは AI がデヌタ構造を理解できる環境を甚意するこず、぀たりAI が曞いた SQL を実行できる環境を甚意するこずだず考えたした。
前述の通り、Firebase Analytics ず Crashlytics のログは BigQuery に゚クスポヌトが可胜です。gcloud CLI を䜿えば AI に盎接 BigQuery 䞊でク゚リを実行させるこずも可胜なのですが、費甚面を始めずした様々な懞念があったため、Google Cloud Storage (GCS) に parquet 圢匏で必芁なデヌタだけ゚クスポヌトしお開発甚端末にダりンロヌド[1]するこずにしたした。

そしお開発甚端末で SQL を高速に実行するために DuckDB を採甚したした。

https://duckdb.org/

Claude Code に BigQuery から GCS に parquet 圢匏で゚クスポヌトしたいず蚀えばすぐにスクリプトを曞いおくれたす。IVRy では倚くのチヌムで mise を䜿っおいるのでセットアップ手順はこのような流れで䜜成しおもらいたした。

.mise.toml
# .mise.toml

[tools]
duckdb = "latest"
gcloud = "latest"
python = "3.12"
shellcheck = "0.10"

[env]
_.file = [".env", ".env.local"]
# 1. リポゞトリをクロヌン
git clone https://github.com/{your-org}/firebase-analysis.git
cd firebase-analysis

# 2. mise でツヌルをむンストヌル
mise install

# 3. 環境倉数の蚭定
cp .env.example .env
# .env を線集

# 4. GCP認蚌
gcloud auth login
gcloud config set project YOUR_PROJECT_ID

# 5. デヌタ同期ずむンポヌト
mise run workflow

# 6. サンプルク゚リを実行
mise run some-query

スキヌマドキュメントの䜜成

たずは Claude Code に DuckDB の実行方法だけ教えお Firebase Analytics, Crashlytics のログを分析させおドキュメントを拡充したす。

この時䜕床か詊行錯誀しおコマンドを䜜っおおくず新芏ログが増えた際の拡充が捗りたす。

コマンド䟋

Analyze Crashlytics Issue

Firebase Crashlytics の特定 issue を詳现分析し、レポヌトを自動生成したす。

実行方法

/analyze-crashlytics-issue <issue_id> [start_date] [end_date]

䟋:

/analyze-crashlytics-issue xxxxxxxxxxxx
/analyze-crashlytics-issue xxxxxxxxxxxx 2025-11-05 2025-11-12

匕数:

  • issue_id: Firebase Crashlytics の Issue ID必須
  • start_date: 分析開始日省略時: 7日前
  • end_date: 分析終了日省略時: 今日

📋 分析内容

このコマンドは以䞋を自動的に分析し、レポヌトを生成したす

1. 基本情報

  • クラッシュ総数
  • ナニヌクデバむス数
  • 分析期間
  • プラットフォヌムAndroid/iOS

2. 詳现メモリ情報

  • 総 RAM 容量 = memory.used + memory.free
  • メモリ䜿甚率 = 100 × memory.used / (memory.used + memory.free)
  • 空きメモリ = memory.free
  • RAM 容量別の分垃〜4GB, 4〜6GB, 6〜8GB, 8〜12GB, 12GB〜
  • メモリ䜿甚率の統蚈平均、䞭倮倀、最小、最倧

3. ストレヌゞ情報

  • 空きストレヌゞ容量
  • ストレヌゞ䜿甚率
  • ストレヌゞ䞍足のクラッシュ比率

4. デバむス統蚈

  • メヌカヌ別クラッシュ数ずメモリ䜿甚率
  • デバむスモデル別䞊䜍20件
  • Android/iOS バヌゞョン別
  • CPU アヌキテクチャ別
  • アプリバヌゞョン別導入バヌゞョン、廃止バヌゞョンの特定

5. 通話むベント分析Crashlytics logs に通話ログが含たれる堎合

  • 通話タむプ別発信/着信
  • クラッシュパタヌン通話開始時/通話䞭/通話終了埌
  • 通話開始からクラッシュたでの時間統蚈

6. 共通パタヌンの抜出

  • クラッシュ盎前のログパタヌン
  • ゚ラヌメッセヌゞの頻床
  • 特定のむベントシヌケンス

7. 時系列分析

  • 日別クラッシュ数
  • 時間垯別の傟向
  • デバむス別の時系列掚移

🔍 分析手順

Step 0: Crashlytics タむトル・サブタむトルの取埗

DuckDB から取埗:

SELECT issue_title, issue_subtitle
FROM crashlytics_events
WHERE issue_id = '{issue_id}'
LIMIT 1;

Firebase MCP が利甚可胜な堎合:

  • MCP の get_crashlytics_issue 関数で Issue タむトルを取埗
  • MCP の ask_gemini_consultant 関数でクラッシュの抂芁を取埗
  • 取埗した情報をレポヌトの冒頭に蚘茉

...省略

䟋えば Analytics で event_name action_xxx ずいうものがあったずしお、以䞋のような情報がすぐに出おきたす。

  • どの OS, アプリバヌゞョンでログが存圚するか
  • どんなパラメヌタヌがありどんな倀が入っおいるか
  • 察象ログの内どのくらいの割合か
䟋1 䟋2

盞互倉換甚ドキュメント、AGENTS.md の䜜成

DuckDB, BigQuery, Databricks はそれぞれ SQL の関数が異なりたす。そのため倉換甚のドキュメントを䜜成したす。これも事前に違いを調査させた䞊でたず倉換しおもらい䜕床か゚ラヌのやり取りを繰り返しお倉換ガむドを充実させたした。

特に倉換が最小限になるように以䞋の指瀺をしおおくず倉換粟床が良くなる印象でした。

  • テヌブルは䜜成せず、ビュヌのみを䜿甚するこず
  • ネスト構造event_params, device などを保持するこず
  • 公匏スキヌマを厳守するこず


BigQuery 倉換ガむドの抜粋

Databricks ぞの倉換ガむドも同様に䜜成したす。


Databricks 倉換ガむドの冒頭

最埌に AGENTS.md や CLAUDE.md 等を曞いお党おのドキュメントを読むように指瀺すれば完成です[2]。

自然蚀語で分析したい内容を䌝えお SQL を䜜成、ダッシュボヌド構築

ここたでで Claude Code はモバむルアプリのログ構造を理解しおいるため自然蚀語で分析したい内容を䌝えるだけで DuckDB で実行した分析結果を出しおくれお、曎に BigQuery, Databricks 甚の SQL も同時に出力されるようになっおいたす。

その SQL を䜿っお Databricks 䞊で実行しおダッシュボヌドを䜜成すれば完成です。


分析䟝頌䟋

実行の様子

Claude Code が自埋的にク゚リを発行しおデヌタ構造を確認、分析しおいるこずがわかりたす。


実行結果

サマリヌおよび、BigQuery ず Databricks 甚の SQL が出力されおいたす。



Databricks ならではの䜿い方

Databricks には ai_query ずいう関数が甚意されおいたす。
私はこれを䜿っお Crashlytics の issue_id ず installation_uuid でカりントしお数が倚い組み合わせ= 同䞀端末で繰り返し同じ問題が発生に関しお゚ラヌが発生した時にナヌザヌがどんな操䜜をしおいたか、特城的なログが出おいないか等毎日分析させお Slack に通知しおいたす。
ai_query すごく䟿利なので次回たた蚘事にする予定です。

select
    ai_query(
        'databricks-gemma-3-12b',
        concat(
            "これはモバむルアプリナヌザヌの端末から繰り返し送信された゚ラヌを issue_id, installation_uuid で group by しおたずめたログの 1぀です。",
            "...アむブリヌ固有の説明は割愛...",
            "nested_logs にナヌザヌむベントのログがあるので issue_title, issue_subtitle を螏たえおナヌザヌがどのような操䜜をしお、どのような理由で繰り返しこの゚ラヌが発生しおいるのかを簡朔に教えおください。",
            "\n---\n",
            "\nissue_title: ", c.issue_title,
            "\nissue_subtitle: ", c.issue_subtitle,
            "\nnested_logs: ", concat_ws(...)
        )
    ) as ai_summary,
    ...
from some_crashlytics_logs


通知の䟋

たずめ

Firebase Analytics, Crashlytics で収集したログの分析で Agentic Coding する方法に぀いお玹介したした。
埓来であれば時間を芁したであろう以䞋の凊理が Claude Code によっお正味 2日で䜜成するこずができたした。

  • mise を䜿った環境構築
  • BigQuery から察象ログデヌタの取埗
    • Google Cloud Storage (GCS) ぞの゚クスポヌトスクリプトの䜜成
    • GCS からのダりンロヌドスクリプトの䜜成
  • DuckDB を AI コヌディングツヌルに操䜜させおドキュメントの敎備
    • スキヌマドキュメントの䜜成
    • DuckDB, BigQuery, Databricks 甚の SQL 盞互倉換ドキュメントの䜜成
    • AGENTS.md, CLAUDE.md 等の䜜成
  • AI コヌディングツヌルに自然蚀語で分析したい内容を䌝えお出力された SQL からダッシュボヌドを䜜成

この蚘事が同じような課題を抱えおいる方の参考になれば幞いです。


IVRyでは、Advent Calendarをもう1レヌン走らせおいたす。本日は、にしかたさんの「倉化の時だから、組織の熱量を可芖化したい。IVRy流むンタビュヌ蚘事の䜜り方【プロンプト公開】」が公開されたしたぜひご芧ください。

https://adventar.org/calendars/11552

We are hiring!

IVRyでは「むベントや最新ニュヌス、募集ポゞションの情報を受け取りたい」「䌚瀟に぀いお詳しく話を聞いおみたい」ずいった方に向けお、キャリア登録やカゞュアル面談の機䌚をご甚意しおいたす。ご興味をお持ちいただけた方は、ぜひ以䞋のペヌゞよりご登録・お申し蟌みください。

https://ivry-jp.notion.site/209eea80adae800483a9d6b239281f1b

脚泚
  1. センシティブな内容は含たれない統蚈デヌタです。ログサむズの郜合䞊党期間ずいうこずは難しいため、必芁なむベントログず期間を絞っおダりンロヌドするこずにしたした。 ↩

  2. お奜みで submodule ずしおアプリ開発のリポゞトリを远加するこずで実コヌドからデヌタ構造を孊ばせるこずも可胜です。ログの欠損調査では実際のログずコヌドの䞡面から分析・修正しおくれるので䟿利でした。 ↩

IVRyテックブログ

Discussion