概要/紹介
皆様はじめまして![]()
menu株式会社エンジニアの森本と申します ![]()
Google社様が提供しているGeminiを活用した
バグ調査時間がすごいことになった驚愕の事実をお届け ![]()
事例などを含め紹介させていただきます
前提
- Expo で作成された Android / iOS アプリ
- Firebase Crashlytics から通知が来てる
libc.so 起因
ReactNativeのJavaScript層ではない、Native層の問題
(一見して原因がわからず、バグ調査困難
)
補足
- Firebase Crashlyticsとは?
Firebase Crashlytics は軽量なリアルタイムのクラッシュ レポート ツールです
技術
Gemini Deep Research
選択した理由
- Google Workspace をすでに会社で利用、新規契約なく気軽に使える
- Web Consoleで誰でもお手軽に実行できる
- Deep Research 機能でハレーションが少なく実行できる
- ファイルアップロードである程度、詳細調査カバーできる
- ソースコードを直接見る前に、必要な基礎をある程度知ることができる
バグの初期調査として、お手軽でとてもいい ![]()
![]()
![]()
Geminiへのプロンプト
自分が使っていたコツみたいなもの(2025/11時点)
Deep Research
- 設定を有効にする
File Upload
- Firebase Crashlyticsなどで出た、Stacktraceテキストファイル
- Expo Projectの package.json
プロンプト入力
- 基本は、UploadしたStacktraceテキストファイルを調査
- Expoを使用しているが、ReactNative側も調査
- New Architecture 有効にしているか?指定
- ギャル風 or イケメン風(すごい重要
説明がわかりやすくなる
)
補足
- New Architectureとは?
Expoが内部で利用しているReactNativeが
アプリを軽快に動作させるために開発した
新しい仕組みのことです
事例
expo-camera の CameraView 利用時
OTA Update 後 CameraView が真っ黒になる問題を調査
(Android & New Architecture無効 のみで発生)
補足
- OTA Update とは?
OTAとは Over the Air の略で
アプリストアへの申請を挟まずに直接アプリを更新する方法です
調査編
Upload Files
- Stacktrace File
エラー時の Stacktrace わかりにくい
**# Crashlytics - Stack trace
# Application: アプリのIdentifierだよ!
# Platform: android
# Version: アプリバージョンだよ! (内部バージョンだよ!)
# Issue: --------------
# Session: --------------
# Date: ----- GMT+0900 (日本標準時)
Fatal Exception: java.util.concurrent.TimeoutException: android.hardware.camera2.impl.CameraCaptureSessionImpl.finalize() timed out after 10 seconds
at android.hardware.camera2.impl.CameraCaptureSessionImpl.close(CameraCaptureSessionImpl.java:506)
at android.hardware.camera2.impl.CameraCaptureSessionImpl.finalize(CameraCaptureSessionImpl.java:827)
at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:250)
at java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:237)
at java.lang.Daemons$Daemon.run(Daemons.java:103)
at java.lang.Thread.run(Thread.java:764)
CameraX-scheduler:
at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
at android.os.MessageQueue.next(MessageQueue.java:327)
at android.os.Looper.loop(Looper.java:162)
at android.os.HandlerThread.run(HandlerThread.java:65)
- package.json
各PackageのバージョンがわかるとGemini調査時に精度が上がる
"dependencies": {
"expo": "~53.0.0",
"expo-camera": "~16.1.11",
"expo-dev-client": "~5.2.4",
"expo-status-bar": "~2.2.3",
"expo-updates": "~0.28.17",
"react": "19.0.0",
"react-native": "0.79.6"
},
Geminiへ入力したプロンプト例
下記点を考慮して添付logファイルのStacktraceエラーを調査してください、ギャル風に
・添付package.jsonを参照して、ExpoだけではなくReactNative側も調査してください
・ExpoのNewArchitectureの設定はOFFです
リサーチ計画を確認
計画が致命的に違うかどうかだけチェック ![]()
大体はそのまま、リサーチを開始![]()
リサーチ結果を確認
とってもわかりやすくスレッド状況などを含め説明してくれます ![]()
このクラッシュが起こった背景には、ハッキリとした因果連鎖があることが分析の結果判明したよ。
1. カメラクローズ漏れ (1st order): アプリ開発者が、カメラセッションを使い終わった後に明示的にクローズする(close()を呼ぶ)のをサボったこと
わかったこと
カメラのclose処理がまずいとの指摘 ![]()
説明がすべて当たっているわけではありませんが、修正の指針を得られました![]()
解決編
EditorAI(Cursor)を利用したソースコード調査時
Camera の close 関連を重点的に調査 ![]()
(今なら Antigravity でAIをGeminiに一本化できます)
補足
- Cursor とは?
Cursor(カーソル)とは、AI機能によってプログラミング開発を効率化できるコードエディタです
- Antigravity とは?
Antigravity(アンチグラビティ)とは、Googleが発表した、AIエージェントとの協働を前提に設計された新しいソフトウェア開発プラットフォームです
考察
JS層の自前ソースはiOSでは正常に動作している
ということは、node_modules 内の expo-camera のAndroid処理![]()
修正
まずは activeプロパティあるね ![]()
CameraView close がちゃんと制御できるか試そう
あれ?動かない(by Android)
expo-cameraのソースコードみてみよ
EditorAI(Cursor)に、
node_modules 内の expo-camera の activeプロパティ 対象ソース部分を探してもらう
あれ?iosのみだ![]()
別の方法で CameraView closeしてから復帰できそうなもの。。。
pausePreview() / resumePreview() をためしてみるかーーーーーー
やったー CameraView が映るようになったー ![]()
![]()
![]()
最後に
AIを利用することでバグ調査・解決までスムーズでした![]()
調査時間のすごい短縮ができました![]()
(自分でいちから調べようとしたらどれくらいかかることやら
)
(もっといい方法あったらこっそり教えて!)
みなさまもバグ調査にAI活用してみてはいかがでしょうか? ![]()
今なら Crashlytics/Sentry などでもmcp利用でき、もっとお手軽に調査できそうです。
補足
- Sentryとは?
アプリケーションの「エラートラッキング(エラー監視)」と「パフォーマンス監視」を行うプラットフォームです
- mcpとは?
Model Context Protocolの略で、AIツールと外部サービスを連携する仕組み
▼新卒エンジニア研修のご紹介
レアゾン・ホールディングスでは、2025年新卒エンジニア研修にて「個のスキル」と「チーム開発力」の両立を重視した育成に取り組んでいます。 実際の研修の様子や、若手エンジニアの成長ストーリーは以下の記事で詳しくご紹介していますので、ぜひご覧ください!
▼採用情報
レアゾン・ホールディングスは、「世界一の企業へ」というビジョンを掲げ、「新しい"当たり前"を作り続ける」というミッションを推進しています。 現在、エンジニア採用を積極的に行っておりますので、ご興味をお持ちいただけましたら、ぜひ下記リンクからご応募ください。