毎週のCrashlytics週報づくりが地味につらかったので、Claude Desktop にまとめてやらせるようにしました。Firebase Crashlytics MCP でデータを取り、ビジネス担当向けの内容に要約し、そのまま PowerPoint まで生成します。この記事では、Claude Desktop の local scheduled task を使って、週次レポート作成を自動化した手順をまとめます。
やっていることは、次の3つです。
- Claude Desktop から Firebase MCP を使えるようにする
- Crashlytics のデータを取得して要約する
- Claude に
python-pptxのコードを書かせて実行し、.pptxを自動生成する
レポートは ビジネス担当とエンジニアが一緒に見る ことを想定しています。前半のスライドはビジネスインパクト中心、後半は同じ FATAL issue をエンジニア向けの技術詳細で見せる構成です。1つのファイルを共有するだけで、それぞれが必要な情報を得られます。
今回の構成では、Python スクリプトや JSON スキーマを事前に用意しません。Claude Code がその場で python-pptx のコードを書いて実行するので、事前準備は pip install だけで済みます。毎回レイアウトが微妙に変わる可能性はありますが、週次レポートとしては十分実用的です。
参考リンク
先に結論
この構成は実現できます。ただし、前提条件があります。
Claude Desktop の local scheduled task は、アプリが起動していて、PCが起きている間だけ実行 されます。予定時刻ぴったりではなく、最大10分の固定遅延 が入り、アプリ終了中やスリープ中はその回は走りません。再起動や復帰時には、過去7日以内の取り逃しのうち直近1回だけ catch-up 実行 されます。なので、厳密な時刻実行が必要なジョブより、週次レポート のような用途に向いています。
また、Crashlytics の MCP 機能は 試験運用版 です。今後の仕様変更や下位互換性のない変更がありえます。運用に入れる前に、まずは手動実行で一度通すのが安全です。
想定する構成
今回の構成はこうです。
Claude Desktop local scheduled task
→ Firebase MCP server で Crashlytics データ取得
→ Claude が python-pptx のコードを書いて実行
→ crashlytics_weekly_report.pptx を保存
Firebase MCP server は Claude Desktop と Claude Code の両方で使えます。Claude Desktop では claude_desktop_config.json に MCP サーバーを設定します。
前提条件
以下を満たしている前提で進めます。
- iOSアプリで Firebase Crashlytics をすでに使っている
- macOS 上で Claude Desktop が動く
- Node.js と npm が入っている
- Python 3 が入っている
- 週次レポートの出力先フォルダをローカルに作成できる
Firebase の公式ドキュメントでも、Crashlytics MCP を使う前提として、Firebase MCP server のセットアップ、Node.js / npm、MCP対応ツール を挙げています。Claude Desktop も公式の設定先として案内されています。
Step 1. Claude Desktop で Firebase MCP を使えるようにする
Claude Desktop で Firebase MCP server を使うには、claude_desktop_config.json に mcpServers を設定します。Firebase の公式ドキュメントに、Claude Desktop 用の設定例が載っています。
設定例はこれです。
{
"mcpServers": {
"firebase": {
"command": "npx",
"args": ["-y", "firebase-tools@latest", "mcp"]
}
}
}
設定後に Claude Desktop を開き直して、Code タブから Firebase MCP が見えるか確認します。Claude Desktop の Code タブは、ターミナルではなく GUI で Claude Code を使うための画面です。
最初の確認は、Code でこう聞けば十分です。
Firebase MCP がこのセッションで使えるか確認してください。
使えるなら、利用可能な tool を列挙してください。
Crashlytics に関係する tool があれば、それだけ抜き出して表示してください。
ここで大事なのは、Firebase MCP に接続できていること と Crashlytics 関連ツールが本当に見えていること を分けて確認することです。Firebase MCP server 自体は多機能なので、Firebase に接続できていても Crashlytics 用のツールが見えていないケースはありえます。
Step 2. 作業フォルダと python-pptx を用意する
今回は、次のフォルダ構成を使います。
# 作業フォルダと出力先を作る
mkdir -p ~/Documents/crashlytics-weekly-report/output/latest
mkdir -p ~/Documents/crashlytics-weekly-report/output/archive
作業フォルダは ~/Documents/crashlytics-weekly-report にします。出力先は2つあります。
-
output/latest/— 常に最新のファイルが入る(毎回上書き) -
output/archive/— 日付入りファイル名で過去の週報を蓄積する
次に、python-pptx をインストールします。
# 作業フォルダに移動する
cd ~/Documents/crashlytics-weekly-report
# このフォルダ専用の Python 仮想環境を作る(.venv というフォルダができる)
python3 -m venv .venv
# 仮想環境を有効にする(以降の pip install はこの環境内だけに入る)
source .venv/bin/activate
# python-pptx をインストールする
pip install python-pptx
python3 -m venv .venv は、このフォルダの中だけで使える Python 環境を作るコマンドです。こうしておくと、ほかのプロジェクトに入れたライブラリとぶつかりません。source .venv/bin/activate で仮想環境に入ると、ターミナルの先頭に (.venv) と表示されます。この状態で pip install すれば、.venv の中だけにインストールされます。
local scheduled task はローカルマシン上で新しいセッションを作って実行されるので、working folder を明示しておく と事故が減ります。タスク実行時には、Claude がそのフォルダ内でファイル編集やコマンド実行を行えます。
今回の構成では、Python スクリプトを事前に用意する必要はありません。Claude Code がデータ取得後にその場でコードを書いて実行します。
Step 3. Claude Desktop の Code で手動テストする
いきなり scheduled task を作る前に、まずは Code で 1 回手動実行します。Crashlytics MCP は試験運用版なので、ここを飛ばさない方が安全です。
今回のスライド構成は 6 枚〜です。前半 5 枚がビジネス担当向け、後半がエンジニア向けです。同じ FATAL issue を、スライド 4 ではユーザー視点で、スライド 6〜 では技術視点で見せます。件数は Claude がデータの状況に応じて判断します(目安は5〜10件)。
| スライド | 対象 | 内容 |
|---|---|---|
| 1 | 共通 | 表紙(アプリ名・対象期間・生成日時) |
| 2 | ビジネス | エグゼクティブサマリー(クラッシュフリー率・影響ユーザー数・前週比) |
| 3 | ビジネス | 安定性トレンド(クラッシュフリー率の折れ線グラフ) |
| 4 | ビジネス | FATAL ユーザー影響(影響ユーザー数の多い FATAL issue を平易な言葉で) |
| 5 | ビジネス | バージョン別・OS別の安定性比較 |
| 6〜 | エンジニア | FATAL 技術詳細(スライド4と同じ issue について、スタックトレース要約・該当クラス・再現条件・調査メモ。1枚あたり2〜3件で複数枚に分ける) |
テストには、次の Step 4 で scheduled task に設定するのと 同じ prompt を使います。Code の working folder を ~/Documents/crashlytics-weekly-report に設定してから、Step 4 の prompt を貼り付けて実行してください。
ここで .pptx ファイルが生成されれば、MCP 連携と PPTX 生成の2点が通ったことになります。
Step 4. local scheduled task を作る
Claude Desktop には local scheduled tasks があり、Schedule 画面から定期タスクを作れます。local task はローカルマシン上で動き、due になると新しいセッションが作られます。
おすすめの設定はこれです。
-
名前:
iOS 週次 Crashlytics PPTレポート - 頻度: 毎週月曜 10:00
-
working folder:
~/Documents/crashlytics-weekly-report
Step 3 の手動テストと同じ、以下の prompt を設定します。
Firebase MCP を使って、Crashlytics の週次レポートを PowerPoint で作成してください。
対象期間は実行時点から過去7日間です。
タイムゾーンは Asia/Tokyo を使ってください。
このレポートはビジネス担当とエンジニアが一緒に見る資料です。
前半はビジネスインパクト中心、後半はエンジニア向けの技術詳細です。
ビジネスインパクトが伝わるビジュアル重視の資料にしつつ、
エンジニアがそのまま調査に入れる情報も含めてください。
前提:
- 対象は iOS アプリ(Swift)
- 最小サポート iOS は 16.7
- python-pptx は .venv にインストール済み(.venv/bin/python3 で実行する)
- PowerPoint 出力先は ~/Documents/crashlytics-weekly-report/output/latest/crashlytics_weekly_report.pptx
スライド構成(6枚〜):
1. 表紙(アプリ名・対象期間・生成日時)
2. エグゼクティブサマリー(クラッシュフリー率・影響ユーザー数・前週比をKPIカードで表示)
3. 安定性トレンド(クラッシュフリー率の推移を折れ線グラフで描画)
4. FATAL ユーザー影響(影響ユーザー数の多い FATAL issue を表形式で)
5. バージョン別・OS別の安定性比較(横棒グラフを左右に並べる)
6〜. FATAL 技術詳細(スライド4と同じ issue について技術情報を表形式で)
スライド4のルール:
- FATAL クラッシュのみ対象とする
- 件数はデータの状況に応じて判断する(目安は5〜10件)
- issue の説明にスタックトレースやクラス名を含めない
- 「○○画面で△△すると落ちる」のようなユーザー視点の表現にする
- 列: #、概要、影響ユーザー数、傾向、ステータス
スライド6〜のルール:
- スライド4と同じ FATAL issue を技術視点で記載する
- 1枚あたり2〜3件にとどめ、文字が詰まらないよう余裕を持たせる
- issue 数に応じてスライド枚数を増やす
- 列: #、該当クラス/メソッド、スタックトレース要約、再現条件、調査メモ
- スタックトレース要約はクラッシュの原因箇所がわかる程度に簡潔にする
- 再現条件は Crashlytics のメタデータから推測できる範囲で記載する
- 調査メモは「次にどこを見るべきか」のヒントを書く
やること:
1. Firebase MCP を使って、Crashlytics の対象期間データを取得する
2. 取得したデータをもとに、上記スライドを生成する python-pptx コードを書く
3. .venv/bin/python3 でそのコードを実行し、PowerPoint を生成する
4. 生成された PowerPoint を ~/Documents/crashlytics-weekly-report/output/archive/ に日付入りファイル名でコピーする
- 形式: crashlytics_weekly_report_YYYYMMDD.pptx
- YYYYMMDD は対象期間の終了日を使う
5. 最後に生成結果を簡潔に報告する
表現ルール:
- 出力は日本語
- スライド4では issue の説明にスタックトレースやクラス名を含めない
- スライド4では「○○画面で△△すると落ちる」のようなユーザー視点の表現にする
- クラッシュフリー率・影響ユーザー数・前週比を必ず含める
- risk_level は「低」「中」「高」のいずれかで表す
ビジュアルルール:
- スライドは 16:9 で作成する
- 表紙は背景色付きのフル背景デザインにする
- エグゼクティブサマリーは KPI カードを横に並べる
- テーブルはヘッダー行を色付き、偶数行をストライプ表示にする
- グラフには系列の色を明示的に指定する
- スライド6〜はスライド4と視覚的に区別できるよう、ヘッダー色を変える
- データが取得できない項目は「データなし」と表示する
データルール:
- データが空でもスライドは作成する
- 保存先フォルダが無ければ作成する
- ~/Documents/crashlytics-weekly-report/output/archive/ に同名ファイルが既にある場合は上書きする
- 処理失敗時は ~/Documents/crashlytics-weekly-report/output/latest/error.txt に理由を書いて保存する
- PowerPoint 生成に失敗した場合も error.txt に理由を書いて保存する
local scheduled task は due になるたびに新しいセッションを開始し、アプリが開いている間だけ動きます。なので、最初は Run now で 1 回テストして、MCP・ファイル書き込み・Python 実行の許可まわりを確認しておくのが安全です。
Step 5. 運用上の注意点
この構成で一番大事なのは、Claude Desktop を終了すると local scheduled task は走らない ことです。PC がスリープした場合もその回はスキップされます。再起動や復帰時には、直近 1 回分だけ catch-up 実行される可能性があります。たとえば月曜 09:00 のタスクでも、PC を一日閉じていたら夜に動くことがあります。
そのため、prompt 側にガードを入れるのもありです。たとえば、月曜の午後になってから catch-up 実行された場合は、Slack 送信をスキップする、といった条件です。
もう1つの注意点は、Crashlytics MCP が試験運用版なので、使える tool や prompt が将来変わる可能性がある ことです。特定のツール名に強く依存しすぎず、まずは「利用可能な tool 一覧を出して」と確認できる状態にしておく方が運用しやすいです。
3つ目は、Claude に毎回コードを書かせる方式なので、スライドのレイアウトが毎週少しずつ変わる可能性がある ことです。ビジュアルルールを prompt で細かく指定していますが、完全に固定したい場合は Python スクリプトを事前に用意する方式に切り替えてください。週次レポートとして「だいたい同じ見た目」で十分なら、この方式で問題ありません。
Step 6. レイアウトを固定したくなったら
運用していて「毎回同じレイアウトにしたい」と感じたら、Claude が生成した Python コードをそのままスクリプトとして保存すればいいです。
手順はこうです。
- Step 3 の手動テストで、納得のいく
.pptxが出るまで何回か試す - そのとき Claude が書いた Python コードを
./scripts/build_crashlytics_report_ppt.pyとして保存する - scheduled task の prompt を「このスクリプトを実行してください」に書き換える
最初はスクリプトなしで始めて、固定したくなったタイミングで移行するのが楽です。
まとめ
Claude Desktop の local scheduled task と Firebase Crashlytics MCP を組み合わせると、Crashlytics の週次確認を半自動化 できます。Claude に python-pptx のコードごと書かせることで、事前にスクリプトを用意しなくても週報を自動で作れます。
スライド 4 と 6〜 で同じ FATAL issue をユーザー視点と技術視点の両面で見せることで、ビジネス担当は影響範囲を、エンジニアは調査の起点を、1つのファイルから得られます。
ポイントは次の3つです。
- Claude には データ取得・要約・PPTX 生成 をまとめてやらせる
- 事前準備は
pip install python-pptxだけ - レイアウトを固定したくなったら、Claude が書いたコードをスクリプトとして保存する
「毎週 Crashlytics を見て、口頭で共有して終わり」から一歩進めたいなら、この構成はかなり実用的です。
