ニューラルネットワークにモバイルアプリのテストをさせてみる方法
React Nativeプロジェクトの他の人のプルリクエストを開くたびに、私はこう考えます:iOSとAndroidでレイアウトを手動で確認するのは、泣き出したくなるような骨の折れる作業です。ブランチをプルして、バンドルをビルドして、エミュレータを起動して、シナリオをクリックして回って、スクリーンショットを撮って、ボタンが画面外去了ことを作者に書かなくてなりません。
Callstackのチームはcaliツールのバージョン2をリリースしました。これは、LLMエージェントを使用してモバイルテスト、パフォーマンス監査、コードレビューを行うコマンドラインツールです。
プロジェクトについて
Webエージェントはもう誰も驚かせません:PlaywrightやPuppeteerはすでに言語モデルと統合されています。モバイルでは、いつももっと複雑でした。エミュレータは気まぐれで、React Nativeデバッガーは独自の世界で動き、環境を壊さずにモデルを接続するにはそれなりの手間がかかります。
Caliはロール分離を通じて問題を解決します。このユーティリティは、すべてを行う万能チャットボットになろうとしません。代わりに、厳密な動作モードがあり、各エージェントは必要なツールパックだけを受け取ります:
cali qaはagent-deviceユーティリティ経由で実際のシミュレータまたはエミュレータでテストシナリオを実行します。cali perf-reviewは直接agent-react-devtoolsに接続して、不必要な再レンダリングとボトルネックを検出します。cali reviewはリポジトリを読み取り、プルリクエストの差分をチェックします。cali devはテストと型チェッカーの監督下で、自律的にコード変更を試みます。
review、perf-review、devコマンドはまだ実験的とマークされていますが、基本的なqaシナリオは使用する準備ができています。
ローカルマシンでテストを実行する方法
始めるにはNode.jsとグローバルにインストールされたagent-deviceパッケージが必要です。エージェントが必要なスキルを欠いている場合、Caliはそれらを介してnpx skillsにプルし、~/.cali/skillsディレクトリに保存します。
1行で起動を制御できます:
cali qa \
--local ios \
--artifact ./artifacts/MyApp.app \
--prompt "проверь текст на экране онбординга и нажми кнопку далее"
iOSシミュレータまたはAndroidエミュレータが1つだけ実行されている場合、ユーティリティはそれを自動的に検出します。Androidで起動する場合、Caliは追加のフラグなしでAndroidManifest.xmlから直接.apkを解析してapplicationIdを抽出できます。
重要な詳細:デバッグビルドの場合、Metroサーバーを別途起動および停止する必要があります。Caliはアプリのインターフェースとの対話のみを担当します。
プロファイリングと不必要な再レンダリングの検出
おそらく最も興味深いモードはperf-reviewです。重いリストに不安定なコールバックを誤って渡すことで、React Nativeでパフォーマンスを簡単に落とすことができるのは周知の事実です。
CaliはReact DevToolsにエージェントを接続し、ターゲット画面を実行します:
cali perf-review \
--context ./cali-context.json \
--platform android \
--artifact ./artifacts/app.apk \
--prompt "проверь экран оформления заказа на подвисания"
エージェントは対話を分析し、指標をキャプチャし、構造化されたレポートを生成します。結果はartifacts/perf-reviewフォルダに保存され、スクリーンショット、マニフェスト、主な問題を含むテキストサマリーが含まれます。
共有コンテキストとCIでの作業
長いターミナル引数のチェーンの代わりに、Caliは設定ファイルcali-context.jsonを使用します。リポジトリ、ビルド、受け入れ基準、エージェントの制約を記述します:
{
"workspaceRoot": ".",
"repository": {
"provider": "github.com",
"owner": "my-team",
"name": "shop-app",
"defaultBranch": "main",
"currentBranch": "feature/checkout-redesign"
},
"mobile": {
"platform": "android",
"artifactPath": "./artifacts/app.apk"
},
"qa": {
"acceptanceCriteria": [
"На экране оплаты отображается итоговая сумма",
"Кнопка подтверждения остаётся кликабельной"
]
},
"dev": {
"allowedValidations": ["bun test", "bunx tsc --noEmit"],
"writePolicy": "workspace",
"pushPolicy": "disabled"
}
}
コマンドラインフラグは常にファイルより優先されます。これは、パイプラインで新しいアーティファクトへのパスを代入する必要がある場合に便利です。
GitHub ActionsとExpo Application Services(EAS)では、ユーティリティは自動的に環境を検出します。追加のヘルパーcali export-ciは、スクリーンショットを含むマークダウンレポートを生成し、GitHub CLI介して開いているプルリクエストにコメントとしてすぐに投稿できます:
name: Запуск мобильного QA
env:
AI_GATEWAY_API_KEY: ${{ secrets.AI_GATEWAY_API_KEY }}
CALI_PLATFORM: android
CALI_ARTIFACT_PATH: ./builds/app.apk
run: npx cali qa --quiet
name: Подготовка отчёта
run: npx cali export-ci --report ./artifacts/qa/report.json
name: Публикация комментария в PR
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh pr comment "${{ github.event.pull_request.number }}" --body-file ./artifacts/qa/ci-comment.md
モデルの接続とセキュリティ
デフォルトでは、CaliはAI Gateway経由でopenai/gpt-5.4-miniと連携するように設定されています。直接Anthropicキーを持っている場合、環境変数介してSonnetに切り替えることができます:
ANTHROPIC_API_KEY=your-anthropic-api-key
QA_MODEL=anthropic/claude-sonnet-4.6
作者がセキュリティについて考えてくれたのは素晴らしいことです:ユーティリティはコンテキストを読み込むときにリポジトリURLからトークンやシークレットをスクラブし、最終的なreport.jsonは安全なフィールドのみを保存します。
試してみる価値はあるか
このツールは、ExpoとReact Nativeで記述されたチームにとって具体的な痛みを解決しに見えます。主な利点は、厳格な入力コントラクトと予測可能なJSON出力です。エージェントは抽象的なターミナルを放浪せず、明確なユーティリティのセットに制限されます。
プロジェクトはまだ人気を集めています(GitHubで約1000スター)が、ロールアーキテクチャにより、CI段階で重要なユーザーパスの自動チェックを実装できます。各リリース前に基本的なスモークテストを手動で実行することに疲れている場合は、リポジトリをクローンしてローカルシミュレーターで数画面を実行する価値があります。
関連プロジェクト