
こんにちは、スパイダープラスでiOSアプリエンジニアをしているピヨコです🐣
2020年入社。2025年8月まではEM、9月からエンジニアに復帰しました。スノーボードと野球観戦が好きです。
本記事はテックイベント「【実践事例4選】AI Agentで変わるモバイルアプリのテスト」(2025/9/29)登壇内容のダイジェストです。
この記事で取り扱うこと
- 既存のiOSプロダクト(手動検証で一定の安定性がある想定)におけるテスト自動化を、AI Agentを活用して加速する方法
この記事で取り扱わないこと
- 新規プロダクトの自動テスト導入論
- 良いプロンプトの一般論
- 初期の環境構築全般
テストの自動化
なぜ自動化するのか。主目的は以下の2点です。
- 開発サイクルの高速化
- 中長期的なコスト削減
自動化により、繰り返し実行の容易化、即時の不具合検知、属人化抑止といったメリットが得られます。一方で、現実には導入と継続の壁が存在します。
自動化のボトルネック
主に2点です。
- 初期の短期コスト
- テストコード作成の学習・実装コスト
- CIやテスト実行環境の整備コスト - 継続困難
- スケジュール都合での後回し・技術的負債化
- 壊れたテストの放置→メンテ不能化
AI活用へのブリッジーボトルネック解消の方針ー
上記のボトルネックは「テストコードの作成・更新・実行を人手で回し続ける」ことに起因します。ここをAI AgentとMCP Serverの連携で自動化・半自動化し、初期作成の負荷軽減と継続運用の省力化を同時に狙います。
つまり、人がやるべきは方針とレビュー、AIが担うのはコード生成・実行・修正の反復です。
効果(AI Agent x MCP Serverの効率)
比較条件:実装解析→初回テストコード作成→テスト実行まで
- AI(Claude Code + MCP Server):約5分30秒
- 手動:約14分15秒
動画デモでは、AI活用により初動から一気に差が出ることを確認できました。
この効率を実現するための具体的な手順と「コツ」を、このあと紹介します。
環境説明(iOSアプリ自動テストの序盤セットアップ)
- Visual Studio Code (VSCode)
- Claude Code CLI
- MCP Server
- XcodeBuildMCP(AIからXcode機能を操作:ビルド/起動/停止/UI操作、スクショ/動画、ログ収集など)
- URL: https://github.com/oraios/serena
macOS Sequoia 15以降 / Xcode 16以降
シミュレーターでアプリがRun可能な状態 - 採用フレームワーク
単体テスト(Swift Testing)
基本フロー(プロンプト運用の例)
- 対象: @TestSampleApp/Presentation/Hoge/HogeViewModel.swift
- 言語: Swift 6.1
- テストFW: Swift Testing
- 環境: iOS 18 シミュレーター
- 手順: 実装解析 → テスト方針 → テストコード生成 → 実行 → 結果確認 →(必要に応じて)修正
- 出力先の規約や命名ルールはプロンプトで明示
あなたはプロフェッショナルなiOSアプリ開発エンジニアです。以下のルールに従い、レビューを受けながら単体テストのコードを作成してください。 ## 手順 対象のファイルの各関数で関数1つずつに対して順番に以下を行ってください。 // 実装の解析→テストの方針→テストコードの作成→テストの実行→テスト結果の作成、レビューのタイミングを手順化 ## 対象 @TestSampleApp/Presentation/Hoge/HogeViewModel.swift ## 言語 Swift 6.1 ## テストフレームワーク Swift Testing ## テスト環境 iOS18のiPhoneシミュレーター ## ルール // テストコードの作成についてのルール ## 出力 // テストコードやテスト結果の出力先、ファイル名の指定、テンプレートの指定など
ここで押さえたい「コツ」は3つです。
コツ1 レビューを挟みながら進める
各工程で人が方針と妥当性を確認し、ハルシネーションを抑制します。
以下の運用テンプレートを、プロンプトとしてAI Agentに渡してください。
あなたはプロフェッショナルなiOSアプリ開発エンジニアです。以下のルールに従い、レビューを受けながら単体テストのコードを作成してください。 ## 手順 対象のファイルの各関数で関数1つずつに対して順番に以下を行ってください。 1.対象ファイルの関数の実装を解析してください。不明点があれば都度質問してください。 2.1の解析をもとに関数について目的や内容を説明し、レビューを求めてください。 3.2のレビューが完了したら、必要なテストコードについて全体像を説明し、レビューを求めてください。 4.3のレビューが完了したら、テスト関数を1つ作成し、目的を説明し、レビューを求めてください。この時すでに作成されているテスト関数があり、流用もしくは修正することで対応できる場合はその旨を説明してください。 5.4のレビューが完了したら、シミュレーターでテストを実行してください。 6.テストが失敗する場合、考えられる原因からテストコードを修正し、レビューを求めてください。テストの失敗の原因がメソッドにある場合、修正案を提示し、レビューを求めてください。 7.6のレビューが完了したら、再度シミュレーターでテストを実行してください。テストが失敗する場合は6に戻り繰り返してください。 8.テストが成功する場合、次のテスト関数の作成のため4に戻り繰り返してください。 9.1の関数に対するすべてのテスト関数の作成が完了したら、シミュレーターでテストを実行し、テストカバレッジを確認し、基準を満たしているか確認してください。満たしていない場合、追加のテストコードを作成するか確認してください。 10.テストコードを追加で作成する場合4に戻り繰り返してください。追加のテストコードを作成しない場合、理由をテストファイル内にコメントで残してください。 11.テストカバレッジの基準を満たしたら、次のメソッドのため1に戻り繰り返してください。 最後に、すべての関数に対するテストコードの作成が完了したら、シミュレーターでテストを実行し、テスト結果をMarkdownで保存してください。
コツ2 観点・基準・ルールをコンテキストに含める
チーム共通の品質基準をSubagents等で共有し、生成品質のバラつきを減らします。
## ルール
- 可読性, 保守性が高いテストコードを作成する。
- テストの内容から、どんなテストをやっているかが判明できること
- Arrange(準備), Act(実行), Assert(検証)のブロックごとに記載する
- 副作用のないテストコードを作成する。
1つのテスト関数では1つの関数をテスト対象とする
- メソッド内で参照している外部関数は、テストダブルを利用して外部依存をなくす
- 外部メソッドでMockを注入する際は以下を確認する。
- Mock化された外部関数に引数で値を渡した場合に、値の更新の確認
- Mock化された外部関数の呼び出し回数が適切かの確認
- 非同期処理に対するテストコードを作成する場合、待機にsleepを利用せず、confirmationを利用する。
- private関数のテストコードは作成しない。
- テストカバレッジの基準を満たすこと。
- C0: 100%
- C1: 80%以上
- 満たせない場合は理由をテストファイル内にコメントで残す
- テストコードのコメントは日本語で記載する
コツ3 レガシー状態の解消(実装側の整地)
結合テスト(XCUITest)
UIテストコード作成ステップ
- 前提:AI Agent x MCP Server利用可能
- 外部仕様書が無ければ、AIに画面操作させてたたき台を作成
- 外部仕様書からテストコードを生成
- 既存仕様書がある場合も「レビューしやすい粒度」に整える
なぜ外部仕様書を使うか
- 人がレビューしやすく、AI生成の妥当性確認がしやすい
- シミュレーター非対応機能(例: カメラ)の手動テスト設計にも転用可
- QA/サポートの調査資料としても有用
作成のコツ
- View単位で分割し、レビュー可能なサイズにする
- スクリーンショット保存はxcrunを指定(XcodeBuildMCPの出力はAI確認用に向かないため、保存先の取り違え防止)
- コード生成の流儀は単体テストと同様(手順とルールを明示)
Xcode(AI機能の所感)
- macOS Tahoe 26 + Xcode 26でCode Intelligenceを利用可能
- iOS全般の理解は良好で、テスト作成の相棒としては悪くない
- ただし保守要件でXcode 16が必要な場合、macOS要件の都合で導入不可に注意
- 実用にはClaude/OpenAIなどの有料プランが現実的
- ルールを渡せばリファクタ支援も可能
- 現時点でMCP Server連携は未対応のため、自由度に制約感あり
まとめ
嬉しいこと
- AI Agent x MCP Serverで、実装解析→テスト作成→実行→修正の大半を任せられる
- Xcode 26のCode Intelligenceでも近い体験は得られる
- 自動テストの作成時間は従来比で半分以下に短縮可能
気をつけたいこと
- ハルシネーション前提で人のレビューは必須
- レビューしやすい粒度に分割し、手順を標準化
- 品質維持のためのルール整備と、実装側の継続的リファクタリングが重要
以上です。課題は残しつつも、メリットを享受しながら楽しく開発を進められています。ぜひ皆さんも試してみてください。
スパイダープラスでは仲間を募集しています。もっと良い方法をご存じの方もぜひお話ししましょう。ありがとうございました!
※当日の資料を以下に再掲します。ご覧ください。
参考リンク
XcodeBuildMCP(Xcode連携のMCPサーバー。Simulator管理、UI自動化、スクショ/動画、ログ収集などを提供)
Serena(LSPベースのコード解析MCP。高効率な検索・編集を提供)