モバイルアプリのシナリオテストをAIで行う
はじめに
株式会社GENDAでモバイルエンジニアをしている前原です。
弊社ではAIを積極的に活用し、業務の効率化や生産性向上を目指しています。また、必要に応じて幅広いツールやサービスを自由に導入できる環境も整っています。
今回はモバイルアプリの自動シナリオテストに着目してみました。
自動シナリオテストにおいては様々な難しさがあり、それらがテストの不安定さにつながっていきます。
例えばテスト時に使用するサーバーのレスポンスの変化、アカウントの状態、端末の状態などが起因し画面の要素に揺らぎが生じ、テストが不安定になるなどが起こり得ます。
そういった不安定さをAIが考えながらテストすることにより乗り越えられるのでは、と思いArbigentというツールを試してみました。
Arbigentの特徴
Arbigentの特徴について紹介します。
Arbigent以外の選択肢として、FirebaseAppTesting, Journeys for Android Studioなどが挙げられます。
本記事では他ツールを詳しく紹介することはしませんが、Arbigentの大まかな特徴を以下の表にまとめました。
機能/項目 | Arbigent |
---|---|
OSS | ✅️ |
シナリオ依存関係 | ✅️ |
シナリオ自動作成 | ✅️ |
マネージド環境 | ❌️ |
CLI | ✅️ |
MCP連携 | ✅️ |
Android/iOS/Web対応 | ✅️ |
モデルの選択 | ✅️ |
CLIがある
CLIが用意されているため、ローカル環境やCI/CD上など、実行、導入のハードルが低く日々の開発フローに組み込み易いです。
GithubActionsで実行する際はこちらのサンプルが参考になります。
モデルの選択ができる
Arbigentでは、APIキーによってモデルを使用する形でテストを行います。
APIキーはOpenAI、Gemini、Azure Open AI,Custom OpenAI API BasedAIから選ぶことができ、「所属している会社などで使いやすいAIを使いたい」「より精度が出るモデルを使いたい」などの事情を吸収しやすいです。
スクリーンショットを解析するテストである
ArbigentはAndroid/iOS/Webのテストに対応しています。テストはスクリーンショットをAIが解析して進める形で行われておりDOM構造やViewの構造を解析するわけではないため、実装の影響を受けづらいです。Flutter、Unityなどでも問題なくテストを実行することが可能です。
実際に動かしてみる
今回はシンプルなカウントアプリのテストを題材に進めていきます。
claude codeで生成したカウントアプリ
インストール
READMEにて詳しく解説されています。GithubのReleaseにて配布されているのでそこからインストール可能です。CLIはHomeBrew経由でインストール出来ます。
ストーリーを作成する
OpenAIのAPI Keyを使用し、モデルはgpt-4.1を使用します。
GUIでストーリーを作成することができますが、実態としてはyamlファイルです。
以下のようにカジュアルなプロンプトからシナリオを作成してくれる機能があります。
ストーリー生成機能
生成されたストーリー
また、ストーリーを入れ子にして、関係性を持たせることが可能です。
以下の動画は
「カウンター画面で0が表示されていることを確認する」
のあとに
「カウンター画面で+ボタンを押すと、表示されているカウントが1になることを確認する」
を実行する例です。
テストが失敗するパターン
続いてテストが失敗するパターンを確認してみましょう。
カウントが0のときに、+10のボタンを押下すると10になる
というテストを実行します。
今回は+10のボタンを押下したときに+5されるように実装を変更しておいたので、ストーリーが失敗するはずです。
期待通り失敗しています。
安定したテストを構築するためにポイントがあります。
AIは自分で考えてその時にUIに応じて指示していないことも行うのでそこをいかにして制御するかが肝になってきます。
今回の動画の通り、テストをリトライして最初のステップから実施する際に、カウントは0ではないのですがリセットを押下して0にして最初のステップを突破しています。
これらの挙動を制御するためには、ストーリーごとに用意されている Max Step Count という設定値を細かく設定するのが良いです。Max Step Count をできる限りシビアにチューニングして無駄な試行錯誤が起こるのを早めに止めれるようにすると安定さが増す印象です。
最後に
Arbigentは「AIが画面を見て考えながら操作する」というアプローチで、DOMやView構造への依存を減らしつつ、環境の揺らぎに強いテストを組み立てやすいツールです。一方で、AIの自律的な試行をどう制御するかが安定運用の鍵です。今回の例のように、Max Step Count のチューニングや前提状態の扱いを詰めることで、無駄な試行を抑え、再現性を高められます。
参考
Discussion