こんにちは。オブザーバビリティの世界へようこそ。
現場で最も恐ろしいのは、「ユーザーの手元で起きているのに、自分たちの手元では再現できない謎のクラッシュ」です。これを見逃すことは、エンジニアとして最も避けたい失態の一つ。そのためにFirebase Crashlyticsは必須の武器ですが、「シンボルアップロード」という最後の詰めで多くの現場が疲弊しています。
今回は、この儀式をGitHub Actionsで完全自動化し、あなたのPCを「ビルド待ちの奴隷」から解放する極意を伝授します。
—
なぜシンボルアップロードを自動化すべきなのか?
まず本質を理解しましょう。クラッシュログは、そのままではただの「メモリアドレスの羅列(バイナリ)」です。これを「人間が読める関数名や行番号」に変換するのがシンボル(dSYMやMappingファイル)の役割です。
これを手動でやるとどうなるか。
1. 忘れる。
2. チームメンバー間でバージョン不整合が起きる。
3. 調査時に「シンボル不足で解析不能」となり、貴重なデバッグ時間が溶ける。
CI/CDでの自動化は、単なる手抜きではありません。「観測の品質」を担保するためのエンジニアリングの防波堤なのです。
—
1. 準備:Crashlyticsがあなたを助けるための鍵
自動化の前に、まずFirebaseとプロジェクトが正しく握手できているか確認してください。
- GoogleService-Info.plist / google-services.json: これがないと何も始まりません。
- Firebase CLI: 現場の標準ツールです。ローカルでも検証できるよう、`npm install -g firebase-tools` でインストールしておきましょう。
- 認証の永続化: GitHub Actionsで `FIREBASE_TOKEN` を設定します(`firebase login:ci` で取得)。
—
2. GitHub Actionsによる自動化ワークフロー
iOS (dSYM) と Android (Proguard/R8 mapping) の双方に対応した、現場でそのまま使えるGitHub Actionsの設定テンプレートです。
`.github/workflows/upload-symbols.yml`
name: Upload Symbols to Crashlytics
on:
push:
branches: [ main ] # リリースビルドのタイミングに合わせて発火させるのが鉄則
jobs:
upload-symbols:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
# 1. 認証情報を設定
- name: Setup Firebase
run: echo “${{ secrets.FIREBASE_TOKEN }}” > ~/.firebaserc
# 2. Android: マッピングファイルのアップロード
# app/build/outputs/mapping/release/mapping.txt が生成されている前提
- name: Upload Android Mapping
run: |
./gradlew uploadCrashlyticsMappingFileRelease \
-PfirebaseCrashlyticsMappingFile=app/build/outputs/mapping/release/mapping.txt
# 3. iOS: dSYMのアップロード
# dSYMは巨大なディレクトリなので、アーカイブ後にパスを指定して送信
- name: Upload iOS dSYM
run: |
${PODS_ROOT}/FirebaseCrashlytics/upload-symbols \
-gsp ./GoogleService-Info.plist \
-p ios ./path/to/dSYM
—
3. この設定の「ここが神髄」
ただ動くスクリプトを書くのは誰でもできます。プロが意識すべきポイントはここです。
- 冪等性の担保: 失敗しても再実行可能なように、パスの指定は絶対パス、あるいは相対パスで明確に。
- シークレット管理: `FIREBASE_TOKEN` は絶対にリポジトリにコミットせず、GitHub Secretsで管理してください。これだけでセキュリティリスクを劇的に下げられます。
- パイプラインの分離: ビルドとシンボルアップロードを別ジョブに分け、「ビルドは成功したけどシンボルアップロードで失敗した」場合に、どこがボトルネックか即座に判別できるようにします。
—
4. 動作確認:これが「成功」のサインだ
設定したら、一度手動でワークフローをキックしてみてください。
1. Firebase Consoleを開く: 「プロジェクト設定」→「全般」→「アップロードされたdSYM」を確認します。
2. 成功の証明: ここに最新のビルド番号(Build ID)があれば、あなたの勝利です。
3. HelloWorld的テスト: 意図的にアプリで例外を発生させ、数分後にCrashlytics上で「難読化されていないスタックトレース」が表示されれば、全てが完璧に機能しています。
—
最後に:先輩からのアドバイス
「シンボルアップロードを自動化する」ということは、あなたのコードがエラーを吐いた瞬間、即座に修正可能な状態で目の前に現れるという環境を作ることに他なりません。
この仕組みさえ整えておけば、リリース前の焦燥感から解放されます。「もし何かあっても、すぐに原因がわかる」という確信は、エンジニアにとって何よりの精神安定剤です。
さあ、今すぐGitHub Actionsのyamlファイルを書いて、あなたの監視環境を一段上のレベルへ引き上げましょう。毎日の作業が劇的に楽になる感覚を、ぜひ味わってください。応援しています!