ユニファ開発者ブログ

ユニファ株式会社プロダクトデベロップメント本部メンバーによるブログです。

長期放置の不具合をAIで解決!Firebase CrashlyticsとGeminiの連携

1. はじめに

こんにちは、Android エンジニアのあいばです。
最近育休から復帰し、小学1年生と0歳保育園児を抱えていっぱいいっぱいの生活をしています。
「生活に余裕がないなら流行りのAIで仕事に余裕を持たせたい!」そんな思いから今回のテーマを選びました。

Firebase Crashlytics とは

軽量なリアルタイムのクラッシュ レポートツールで、アプリの品質を低下させる安定性の問題を追跡し、優先順位を付け、修正するのに役立ちます。Crashlytics を利用することで、特定のクラッシュが多くのユーザーに影響を与えるかどうかを調べたり、問題の重大度が急激に増した場合にアラートを受け取ったりできるほか、コード内でクラッシュの原因となっている行を特定することもできます。

導入も簡単なので、ほとんどのアプリで利用されていることでしょう。
しかし、長い間アプリを運用していると影響を受けているユーザーが多いとわかっているのに、なかなか修正できない問題も出てくるのではないでしょうか?
ユニファのAndroidアプリにもログからは原因が特定しづらかったり、エンジニアが再現できず調査が進まない不具合があり開発チームを悩ませています。

2. Gemini in Firebase

そこで今回、Gemini in Firebase の機能の一つであるFirebase Crashlytics の AI アシスタントを試してみました。

Gemini in Firebase は、Firebase コンソール内で直接、Firebase アプリの開発、最適化、トラブルシューティングをサポートする質問に答えることで、生産性を向上させる AI 搭載の協力型アシスタントです。開発プロセスを合理化し、デバッグ時間を短縮し、高品質なアプリを構築する手助けをしてくれます。

Crashlytics の AI アシスタントは、2024 年 7 月 30 日のプロモーション期間終了まで、Android と Apple のクラッシュについて無料で利用できます。

3.Gemini in Firebase の有効化

必要な権限

Gemini in Firebase の機能を有効にして使用するためには、特定の IAM ロールと権限が必要です。

  • オーナーまたは編集者の IAM ロールを持つプロジェクト メンバーは、Gemini in Firebase を有効にし、その機能を使用できます。
  • プロジェクト閲覧者は Gemini in Firebase を有効にすることはできませんが、Gemini in Firebase のチャット、ヘルプ、Crashlytics の AI 支援などの機能を使用できます(Cloud AI Companion ユーザーのロールが割り当てられている場合)。
Crashlytics で AI 支援を設定する

Crashlytics で AI 支援を設定するには、Gemini in Firebase の設定で説明されているように Gemini in Firebase を有効にして、分析情報の生成に進みます。

分析情報を生成

Crashlytics で AI 支援を使用してクラッシュに関する分析情報を生成するには以下を行います。

  • プロジェクトで Crashlytics ページを開き、アプリを選択します。
  • 調査するクラッシュを見つけて選択します。Crashlytics イベントページが表示され、[AI 分析情報を生成] ボタンが表示されます。
  • [AI 分析情報を生成] ボタンをクリックします。

分析情報と一緒に、以下のうちの 1 つ以上が表示されます。

  1. 考えられるクラッシュの原因とその分析
  2. デバッグ手順
  3. 実行可能な次のステップ
  4. ベスト プラクティス

Crashlytics で AI アシスタントを利用する  |  Firebase Crashlytics

4. 分析結果

実際のプロジェクトで発生している問題で利用してみました。
Crashlyticsで報告されているエラーの内容はこちらです。

Fatal Exception: java.lang.IllegalStateException
FragmentManager is already executing transactions

このエラーをとりあえずググってみるとこのような結果になります。

エラーの検索結果

一見、エラー対する解決策がすぐに見つかりそうですが、実際はクラッシュにつながった状況がそれぞれ異なる記事のため必要な情報を見つけ出すのは難しいです。

これに対し AI アシスタントを利用した結果がこちら。

Geminiの分析結果

どのようなステップで進めれば良いか教えてくれています。内容は若干当たり前なことを教えてくれている気もしますが、言われた通りにデバッグしてみたところ、 FragmentTransaction.commitNow() を呼んでいる所でクラッシュしており、 commitNow() のドキュメントを読むと IllegalStateException をスローする場合があることがわかりました。

commitNow() のドキュメントから抜粋

Transactions committed in this way may not be added to the FragmentManager's back stack, as doing so would break other expected ordering guarantees for other asynchronously committed transactions. 
This method will throw IllegalStateException if the transaction previously requested to be added to the back stack with addToBackStack(String).

A transaction can only be committed with this method prior to its containing activity saving its state. 
If the commit is attempted after that point, an exception will be thrown. 
This is because the state after the commit can be lost if the activity needs to be restored from its state. 
See commitAllowingStateLoss() for situations where it may be okay to lose the commit.

ふむふむ、ここまで来ると修正の方針も考えられそうです。

5. おわりに

Gemini in Firebase がプロモーション期間中ということで試してみましたが、なかなか良さそうです。 エンジニアが再現できず、しばらく放置されてしまった不具合などがあるなら、無料期間のうちに一度Geminiで分析してみてはいかがでしょう。また、スタックトレースのエラーがどんな時に発生するのかやデバッグ手順、実行可能なステップを示してくれるので、経験が浅いエンジニアの助けにもなりそうです。

ーーー

ユニファでは、一緒に働く仲間を募集しています!

jobs.unifa-e.com