🧚

Firebase MCP × Claude Code Action で実現する Crashlytics エラーの自動修正ワークフロー

に公開

こんにちは、株式会社IVRy のボルドーです。
本記事では、社内イベント「AI Award」の一環として開発した「Firebase MCP と Claude Code Action による Crashlytics エラーの自動修正ワークフロー」について紹介します。

https://note.com/yueda256/n/n816d56f988ff?magazine_key=m4fc501fc23f5

モチベーション

モバイルアプリ開発における永遠の課題

モバイルアプリ開発において、アップデートを重ねるたびに何かしら新たな問題が発生するのは避けられない現実です。ユーザー環境の多様性、OSバージョンや機種の違い、予期しない使われ方など、様々な要因で不具合は発生します。

Firebase Crashlytics は、こうしたクラッシュや非致命的エラーを自動で収集してくれる優れたツールです。しかし、ここで問題が生じます。

「温もり運用」になりがちな Crashlytics の確認作業

Crashlytics で拾われたエラーは、開発者が定期的に確認して対処する必要があります。しかし実際には

  • エラーが積み重なっていく: 日々発生する複数のエラーを追いきれない
  • 善意の温もり運用: 誰かが気づいたときに対応する属人的な運用になりがち
  • スタックトレースが難しい: 人間がスタックトレースを追うのは難しい

この課題を解決するため、GitHub Actions 上で Claude Code Action を動かし、Firebase MCP を通じて Crashlytics のエラーを自動分析・自動修正する仕組みを構築しました。

利用ツール: Firebase MCP と Claude Code GitHub Actions

この課題を解決するために、前述の 2つのツールを組み合わせて使用します。

Firebase MCP とは

https://firebase.google.com/docs/ai-assistance/mcp-server?hl=ja

MCP (Model Context Protocol) は、Anthropic が開発した、AI アシスタントが外部サービスと安全に連携するための標準プロトコルです。従来は AI に外部データを渡すために毎回 API を呼び出してコンテキストに含める必要がありましたが、MCP を使うことで AI が直接外部サービスと対話できるようになります。

Firebase MCP は、この MCP を使って Firebase の各種サービスにアクセスできるようにした公式サーバーです。2025年初頭に登場した比較的新しい機能で、以下のような操作が可能です。

  • Crashlytics: アプリのクラッシュレポートの取得と分析
  • Firebase プロジェクト管理: プロジェクト情報の取得、アプリの一覧表示
  • Firebase AI アシスタント: Firebase に関する質問への回答や実装のアドバイス

今回特に重要なのが crashlytics_list_top_issues という機能で、これを使うと「現在最も頻繁に発生しているクラッシュ」を AI が直接取得できます。

crashlytics_list_top_issues({
  app_id: "your-app-id",
  issue_type: "FATAL",  // クラッシュのみ
  issue_count: 10       // 上位10件
})

Firebase MCP は firebase-tools パッケージに同梱されており、以下のコマンドで起動できます。

npx firebase-tools@latest experimental:mcp

Claude Code GitHub Actions とは

https://code.claude.com/docs/ja/github-actions

Claude Code GitHub Actions は、GitHub Actions 上で Claude(Anthropic の AI アシスタント)を動かすための公式アクションです。通常の GitHub Actions ワークフローの中で、Claude にコード分析や修正、PR 作成などの複雑なタスクを任せることができます。
本記事中では Claude Code GitHub Actions の 1 action を Claude Code Action と表記しています。

主な特徴

  1. GitHub リポジトリへの直接アクセス: Claude がリポジトリのコードを読み書きできる
  2. Git 操作の実行: ブランチ作成、コミット、PR 作成などを自動化
  3. MCP サーバーとの連携: 外部サービス(Firebase MCP など)と組み合わせて使える
  4. セキュリティ: --allowedTools で実行可能な操作を制限できる

基本的な使い方

- name: Run Claude Code Action
  uses: anthropics/claude-code-action@8a1c4371755898f67cd97006ba7c97702d5fc4bf # v1.0.16
  with:
    anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
    prompt: |
      このリポジトリの README.md を改善してください
    claude_args: |
      --allowedTools "Read,Edit"

2つのツールを組み合わせると何ができるのか

Firebase MCP と Claude Code Action を組み合わせることで、以下のワークフローが実現できます。

  1. Firebase MCP が Crashlytics からエラー情報を取得
  2. Claude がエラーの内容を分析し、根本原因を特定して修正案を生成
  3. Claude Code Action が修正 Pull Request (PR) を作成

つまり、「エラーの検知」から「修正 PR の作成」までを完全自動化することができます。

ワークフローの実装

それでは、実際のワークフロー実装を見ていきましょう。

前提条件

以下の準備が必要です。

  1. Firebase プロジェクト: Crashlytics が有効化されていること
  2. Firebase サービスアカウント:
    • Firebase Console から作成
    • FIREBASE_TOKEN として GitHub Secrets に保存(認証トークン形式)
  3. Anthropic API キー:
    • ANTHROPIC_API_KEY として GitHub Secrets に保存
  4. Android/iOS アプリの設定 ※:
    • Android: パッケージ名(例: com.example.app
    • iOS: バンドルID(例: com.example.app

ワークフローファイル全体

.github/workflows/ に yaml ファイルを作成します。
この例では手動実行と定期実行どちらでも利用できるようにしています。

name: Crashlytics Top Issues Improvements

on:
  workflow_dispatch:  # 手動実行も可能
  schedule:
    - cron: "0 2 * * 1"  # 毎週月曜日の午前2時(UTC)に実行

jobs:
  setup:
    runs-on: ubuntu-latest
    permissions:
      contents: write
      issues: write
      pull-requests: write
      id-token: write
    
    steps:
      - name: Checkout repository
        uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0

      # Firebase MCP 利用のため CLI をセットアップする
      - name: Firebase Authentication
        env:
          FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
        run: |
          npx -y firebase-tools@latest projects:list

      - name: Run Claude Code with Firebase MCP config
        uses: anthropics/claude-code-action@8a1c4371755898f67cd97006ba7c97702d5fc4bf # v1.0.16
        env:
          FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          github_token: ${{ secrets.GITHUB_TOKEN }} # 後述
          prompt: |
            Firebase MCP で Crashlytics [YOUR_PROJECT_ID] のエラー改善をしたいです。
            - crashlytics_list_top_issues を使って Android `com.example.app` と iOS `com.example.app` で発生している上位の issue_type FATAL を列挙する
            - Android と iOS で共通の問題もあるし、片方だけの問題もあるので適切にグルーピングする
            - グルーピングした問題毎に新規で最新の main branch から branch を切り替えて修正を行う
            - 修正する際には firebase_consult_assistant, git と gh pr を用いる。適切な差分を git commit した上で PR を作成する
            - それぞれの PR タイトルには適切な名前を付けた上で [CrashlyticsTopIssues] プレフィクスを加える。概要に問題の説明と、修正内容を記載する。Labels に github_actions を指定し、Milestone は gh api を用いてその時点で一番大きいバージョンの milestone を指定する
            
          claude_args: |
            --mcp-config path/to/firebase-mcp.config.json
            --allowedTools "Read,
                            Edit,
                            Bash(gh pr:*),
                            Bash(gh api:*),
                            Bash(git:*),
                            mcp__firebase__firebase_get_environment,
                            mcp__firebase__firebase_get_project,
                            mcp__firebase__firebase_list_apps,
                            mcp__firebase__firebase_consult_assistant,
                            mcp__firebase__crashlytics_list_top_issues"

MCP 設定ファイル

firebase-mcp.config.json を作成します。

{
  "mcpServers": {
    "firebase": {
      "command": "npx",
      "args": ["-y", "firebase-tools@latest", "experimental:mcp"]
    }
  }
}

認証周りの苦労話

実装時、この仕組みを動かすまでに試行錯誤があったので簡単に紹介します。

苦労したポイント1: Claude Code Action の動作確認

最も時間を取られたのが GitHub Actions 上での Claude Code Action の動作確認でした。

ローカル環境では動作するものも、GitHub Actions 上では環境が異なるため思わぬところで失敗します。また、Claude Code Action は実行に数分かかるため一度の検証サイクルが長く、デフォルトブランチとの差分によって id-token の権限エラーが発生する問題も相まって細かい調整にも時間を要しました。

https://github.com/anthropics/claude-code-action/issues/443

回避策としてはこのコメントにあるように Claude Code Action に github_token を渡すことなのですが、Claude Code Action の説明にもあるように利用は推奨されていません。機能実装後は元に戻すのが良さそうです。

https://github.com/anthropics/claude-code-action/blob/v1.0.16/docs/faq.md

苦労したポイント2: Firebase MCP の認証方式

実装当時 Firebase MCP に関する情報が少ない状態でした。特に苦労したのがチームでの利用を想定した認証方法です。

最初はサービスアカウントの JSON を GitHub Secrets に保存し、GOOGLE_APPLICATION_CREDENTIALS 環境変数で指定する方法を試しましたが Claude Code Action から Firebase MCP への接続に失敗しました。

調査の結果、Firebase MCP(Firebase CLI に同梱)は Application Default Credentials (ADC) に対応していないことが判明しました。

https://github.com/firebase/firebase-tools/issues/8671

解決策: FIREBASE_TOKEN の利用

最終的に、Firebase CLI の FIREBASE_TOKEN 環境変数を使う方法で解決しました。

FIREBASE_TOKEN は以下のコマンドで取得できます(ただし deprecated な方法です)。

firebase login:ci

実行するとブラウザで認証後にトークンが表示されるので GitHub Secrets に保存して利用します。

まとめ

Firebase MCP と Claude Code GitHub Actions を組み合わせることで、Crashlytics のエラー対応を大幅に自動化できました。この仕組みにより見落としがなくなり、開発者は機能開発等の別の作業に集中することができるようになりました。

プロンプトの調整の余地はまだまだあるかと思いますが提出される PR の内容は的を得ているものが多く、導入してから 2ヶ月で 6件の修正 PR がマージされ、5件がレビュー中というように安定して動作しています。
AI Award の総括で弊社 代表取締役 奥西をはじめ社内のエンジニアから好評を得ることができて嬉しかったです。

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

We are hiring!

IVRyでは「イベントや最新ニュース、募集ポジションの情報を受け取りたい」「会社について詳しく話を聞いてみたい」といった方に向けて、キャリア登録やカジュアル面談の機会をご用意しています。ご興味をお持ちいただけた方は、ぜひ以下のページよりご登録・お申し込みください。

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

IVRyテックブログ

Discussion