Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AI Agentと MCP Serverで実現する iOSアプリの 自動テスト作成の効率化

AI Agentと MCP Serverで実現する iOSアプリの 自動テスト作成の効率化

2025年9月29日
【実践事例4選】AI Agentで変わるモバイルアプリ開発におけるテスト 登壇資料
https://trident-qa.connpass.com/event/367282/

・自己紹介
・今日お話しすること
 ・iOSアプリの既存プロダクトにおける自動テストの活用
 ・話さないこと(新規導入/プロンプト作成/環境構築)
・テスト自動化の背景
 ・自動化のメリット
 ・なぜ自動化が進まないのか
・iOSアプリの自動テストの種類
 ・単体テスト(Swift Testing / XCTest)
 ・結合テスト(XCUITest, Appium, Maestro, MagicPod 等)
・AI Agent と MCP Server の活用環境
 ・必要な環境(VSCode, Claude Code CLI, MCP Server, Xcode など)
 ・MCP Server の機能(XcodeBuildMCP, Serena)
・AI Agent と手動の比較(動画)
 ・実装解析~テストコード作成~実行の比較
・単体テスト(Swift Testing)
 ・テストコード作成のステップ
 ・プロンプト例
 ・レビューを取り入れる進め方
 ・ルールと基準(Arrange/Act/Assert、Mock利用、非同期処理対応、カバレッジ基準など)
 ・ポイント①~③(レビュー、ルールのコンテキスト化、レガシー解消)
・結合テスト(XCUITest)
 ・外部仕様書作成ステップ
 ・外部仕様書の活用方法とメリット
 ・テストコード作成のステップとルール
 ・ポイント①~②(View単位、スクリーンショット保存指定)
・XcodeでのAI Agent活用の考察
 ・現状の精度や課題
 ・有料プラン活用やCode Intelligenceの可能性
・まとめ
 ・自動化で得られる効果
 ・注意すべき点(レビュー必須、ルールメイク、リファクタリング)

More Decks by スパイダープラス株式会社

Other Decks in Technology

Transcript

  1. 2 © SpiderPlus & Co. 自己紹介 ピヨコ (X:@LabosPiyoko) スパイダープラス株式会社 -

    iOSアプリエンジニア - 8月まではEM、 9月からエンジニアに再チャレンジ - 趣味はスノーボードと野球観戦
  2. 4 © SpiderPlus & Co. 今日お話しすること AI Agentをどう活用してテストの自動化を進めていくか? 前提 iOSアプリの既存プロダクト

    手動テスト等で一定の正常性が担保 話さないこと • 新規プロダクトでの自動テストの導入 • 良いプロンプトの書き方 • 環境構築
  3. 6 © SpiderPlus & Co. テストを自動化したいのはなぜ? テストを自動化すると嬉しいこと • 開発サイクルのスピードアップ ◦

    繰り返しテストが可能 ◦ すぐに不具合がわかる ◦ 属人化しない • 長期的なコストの削減 ◦ 手動でのテスト作業を減らせる
  4. 7 © SpiderPlus & Co. なぜテストの自動化が進まない? テスト自動化でネックになること • 短期的な(主に初期の)コストが高い ◦

    エンジニアによる自動テストの作成が必要 ▪ 初めてなら学習コストも必要 ◦ CI環境やテスト環境の準備が必要 • 継続できない ◦ スケジュールの関係で犠牲になりがち ◦ 一度動かなくなると放置されがち …。
  5. 8 © SpiderPlus & Co. なぜテストの自動化が進まない? テスト自動化でネックになること • 短期的な(主に初期の)コストが高い ◦

    エンジニアによる自動テストの作成が必要 ▪ 初めてなら学習コストも必要 ◦ CI環境やテスト環境の準備が必要 • 継続できない ◦ スケジュールの関係で犠牲になりがち ◦ 一度動かなくなると放置されがち AI Agentで 効率化できたら がんばれそう?
  6. 9 © SpiderPlus & Co. iOSアプリの自動テスト 単体テスト - テストコードを作成 a.

    Swift Testing(XCTest): Apple純正のUnitテストの Framework 結合テスト - テストコードを作成 a. XCUITest: Apple純正のUI テストのFramework b. Appium, Maestro: OSSの UIテストのFramework - ノーコードツールで作成 c. MagicPodさんなどのサービス
  7. 10 © SpiderPlus & Co. iOSアプリ開発でAI Agent 環境 • Visual

    Studio Code (VSCode) • Claude Code CLI • MCP Server ◦ XcodeBuildMCP ◦ Serena • mac OS Sequoia 15 以降 • Xcode 16 以降 ◦ SimulatorでアプリをRunできる状態にしておく
  8. 11 © SpiderPlus & Co. MCP Server XcodeBuildMCP AI AgentからXcodeの機能を利

    用するためのツール。 Simulator、実機でアプリの 起動・停止や、UIの操作なども 可能。 Xcodeの機能を利用するので Xcode自体は必要。 https://github.com/cameroncooke/XcodeBuildMCP Serena AI Agentに対してコード解析を 支援するツール。 トークン消費を抑えるために 導入。 予めオンボーディングしておく。 https://github.com/cameroncooke/XcodeBuildMCP
  9. 12 © SpiderPlus & Co. AI Agentと手動の比較(動画) (ワイプ) こちらは手動で 実装解析→テストコード作成

    →テスト実行をやっていきます (ベース側) 実装コードの解析→1つ目のテストコードの作成 →テストの実行までを比較します
  10. 16 © SpiderPlus & Co. 単体テスト - Swift Testing Unitテストコード作成のためのステップ

    前提 AI Agent x MCP Serverを 使える状態になっている 1. 実装のソースコードからAI Agentに作成させる
  11. 17 © SpiderPlus & Co. 単体テスト MCP Serverの初期セットアップが終われば プロンプトを渡すだけでテストコードの作成〜テストの実施まで可能 あなたはプロフェッショナルなiOSアプリ開発エンジニアです。以下のルールに従い、レビューを受けながら単体テストのコードを作成してください。

    ## 手順 対象のファイルの各関数で関数1つずつに対して順番に以下を行ってください。 // 実装の解析→テストの方針→テストコードの作成→テストの実行→テスト結果の作成、レビューのタイミングを手順化 ## 対象 @TestSampleApp/Presentation/Hoge/HogeViewModel.swift ## 言語 Swift 6.1 ## テストフレームワーク Swift Testing ## テスト環境 iOS18のiPhoneシミュレーター ## ルール // テストコードの作成についてのルール ## 出力 // テストコードやテスト結果の出力先、ファイル名の指定、テンプレートの指定など ステップ①
  12. 18 © SpiderPlus & Co.   あなたはプロフェッショナルな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で保存してください。 実装の解析→テストの方針→テストの作成→テスト失敗へ対応など 各工程をレビューをしながら進めた方が良い ポイント①
  13. 19 © SpiderPlus & Co.      レビューしながら進める ハルシネーションのリスクを減らすため ※低品質:リファクタリングに弱い、可読性・保守性が低い、カバレッジが不十分など AI Agentはハルシネーションのリスクがあるため、「生成された

    テストコードが本当に適切なテストなのか?」の確認は必須 そもそも実装の意図がコンテキストに反映できているか?の確認から ステップごとに確認した方が低品質なテストコードが生成されにくく 手戻りも少なくて済むケースが多い ポイント① ナゼ?
  14. 20 © SpiderPlus & Co.   ## ルール - 可読性,

    保守性が高いテストコードを作成する。 - テストの内容から、どんなテストをやっているかが判明できること - Arrange(準備), Act(実行), Assert(検証)のブロックごとに記載する - 副作用のないテストコードを作成する。 1つのテスト関数では1つの関数をテスト対象とする - メソッド内で参照している外部関数は、テストダブルを利用して外部依存をなくす - 外部メソッドでMockを注入する際は以下を確認する。 - Mock化された外部関数に引数で値を渡した場合に、値の更新の確認 - Mock化された外部関数の呼び出し回数が適切かの確認 - 非同期処理に対するテストコードを作成する場合、待機にsleepを利用せず、confirmationを利用する。 - private関数のテストコードは作成しない。 - テストカバレッジの基準を満たすこと。 - C0: 100% - C1: 80%以上 - 満たせない場合は理由をテストファイル内にコメントで残す - テストコードのコメントは日本語で記載する 特にチームでのプロダクトの開発という観点では テスト観点や基準、ルールをコンテキストに明確に含めた方が良い ポイント②
  15. 21 © SpiderPlus & Co.      観点・基準・ルールをコンテキストに含める テストコード生成の精度を高めるため • テストコードの生成ごとにテスト品質にバラつきがある(=精度が 低い)と効果的なテストができない、レビュー&手戻りが大変、

    メンテナンス性が下がるなど、デメリットが大きくなってしまう • 低品質なテストコードを大量生産しないように先手を打っておく のが重要 • ClaudeCodeならSubagents機能を活用してチームで共通の コンテキストを利用できるようにするのがオススメ ポイント② ナゼ?
  16. 22 © SpiderPlus & Co.   継続的なプロダクトの開発という観点では 実装側のレガシーな状態をできるだけ解消しておいた方が良い ポイント③ レガシーな状態の解消とは

    • 関数名や変数名が適切な命名か見直す • 単一責任の原則を守れるよう関数の分離 • 多重ループや再帰呼び出しが必要になるデータ構造 を解消する • アーキテクチャの見直しなど依存の方向の最適化
  17. 25 © SpiderPlus & Co. 結合テスト - XCUITest UIテストコード作成のためのステップ 前提

    AI Agent x MCP Serverを 使える状態になっている 1. 外部仕様書がない場合、AI Agentに画面操作をさせて作成する 2. 外部仕様書からテストコードをAI Agentに作成させる ※既存の外部仕様書がある場合もAI Agentとレビューしながら  テストコード生成可能な外部仕様書にブラッシュアップするのがオススメ
  18. 26 © SpiderPlus & Co. 結合テスト - 外部仕様書を利用する 人間がテストをレビューしやすくするため •

    AI Agentはハルシネーションのリスクがあり、生成された テストが本当に適切なテストなのか?の確認は必須 • 他にも ◦ カメラなどシミュレーターでテストできない機能は 手動テストが必要なため設計資料に活用 ◦ QAやサポートの調査資料としても流用できる ナゼ?
  19. 27 © SpiderPlus & Co. 結合テスト      外部仕様書作成 外部仕様書がない場合はAI Agentに画面を操作させて仕様書を作る ※対象のアプリは既に手動テスト等で動作の担保が取れている状態

    あなたはプロフェッショナルなiOSアプリ開発エンジニアです。目的が達成できるよう考えて以下を実行してください。 ## 手順 対象のファイルの各関数で関数1つずつに対して順番に以下を行ってください。 1. このXcodeプロジェクトをビルドしてシミュレータで起動して操作ログを記録 2. 各画面でxcrun機能でスクリーンショットを撮って出力先に保存 3. スクリーンショットのファイルが正常に出力先で保存されているか確認 4. 画面を操作して次の画面を表示 5. 対象のViewで構成された画面から別のViewの画面に遷移するまで2~4を繰り返す 6. 別のViewの画面に遷移したら操作のログとスクリーンショットから対象Viewの画面の外部仕様書をMarkdownで作成 ## 目的 作成した外部仕様書を元に対象画面のUIのテスト設計ができるようにする ## 対象 @TestSampleApp/Presentation/Hoge/HogeView.swift ## 実行環境 iOS18のiPhoneシミュレーター ## 出力 // スクリーンショットや外部仕様書の出力先、ファイル名の指定、テンプレートの指定など ステップ①
  20. 28 © SpiderPlus & Co. あなたはプロフェッショナルなiOSアプリ開発エンジニアです。目的が達成できるよう考えて以下を実行してください。 ## 手順 対象のViewで作成された画面に対して順番に以下を行ってください。 1.

    このXcodeプロジェクトをビルドしてシミュレータで起動して操作ログを記録 2. 各画面でxcrun機能でスクリーンショットを撮って出力先に保存 3. スクリーンショットのファイルが正常に出力先で保存されているか確認 4. 画面を操作して次の画面を表示 5. 対象のViewで構成された画面から別のViewの画面に遷移するまで2~4を繰り返す 6. 別のViewの画面に遷移したら操作のログとスクリーンショットから対象Viewの画面の外部仕様書をMarkdownで作成 ## 目的 作成した外部仕様書を元に対象画面のUIのテスト設計ができるようにする ## 対象 @TestSampleApp/Presentation/Hoge/HogeView.swift   ポイント① View単位で作業 • 外部仕様書やテストコード適切なサイズにし、レビューしやすくする • 巨大なViewの場合は範囲の指定をプロンプトで工夫する
  21. 29 © SpiderPlus & Co. あなたはプロフェッショナルなiOSアプリ開発エンジニアです。目的が達成できるよう考えて以下を実行してください。 ## 手順 対象のViewで作成された画面に対して順番に以下を行ってください。 1.

    このXcodeプロジェクトをビルドしてシミュレータで起動して操作ログを記録 2. 各画面でxcrun機能でスクリーンショットを撮って出力先に保存 3. スクリーンショットのファイルが正常に出力先で保存されているか確認 4. 画面を操作して次の画面を表示 5. 対象のViewで構成された画面から別のViewの画面に遷移するまで2~4を繰り返す 6. 別のViewの画面に遷移したら操作のログとスクリーンショットから対象Viewの画面の外部仕様書をMarkdownで作成 ## 目的 作成した外部仕様書を元に対象画面のUIのテスト設計ができるようにする ## 対象 @TestSampleApp/Presentation/Hoge/HogeView.swift   ポイント② スクリーンショットの保存はxcrunを指定 • XcodeBuildMCPのscreenshotはAI Agentの確認用で出力できない • 指定しないと実は意図した出力先へ保存できていない事故になりがち
  22. 30 © SpiderPlus & Co. あなたはプロフェッショナルなiOSアプリ開発エンジニアです。以下のルールに従い、レビューを受けながらUIテストのコードを作成してください。 ## 手順 // テストの方針→テストコードの作成→テストの実行→テスト結果の作成、レビューのタイミングを手順化

    ## 対象 @TestSampleApp/docs/外部仕様書_HogeView.md ## 言語 Swift 6.1 ## テストフレームワーク XCUITest ## テスト環境 iOS18のiPhoneシミュレーター ## ルール // テストコードの作成についてのルール ## 出力先 // テストコードやテスト結果の出力先の指定など 結合テスト     テストコード作成 外部仕様書からテストコードをAI Agentに作成させる ステップ②
  23. 31 © SpiderPlus & Co. あなたはプロフェッショナルなiOSアプリ開発エンジニアです。以下のルールに従い、レビューを受けながらUIテストのコードを作成してください。 ## 手順 1. 対象の外部仕様書から必要なUIテストについて全体像を説明し、レビューを求めてください。

    2. 1のレビューが完了したら、テスト関数を1つ作成し、目的を説明し、レビューを求めてください。この時すでに作成されているテスト関数があり、流 用もしくは修正することで対応できる場合はその旨を説明してください。 3. 2のレビューが完了したら、シミュレーターでテストを実行してください。 4. テストが失敗する場合、考えられる原因からテストコードを修正し、レビューを求めてください。テストの失敗の原因がテストコード以外にある場 合、考えられる原因・修正案を提示し、レビューを求めてください。 5. 4のレビューが完了したら、再度シミュレーターでテストを実行してください。テストが失敗する場合は4に戻り繰り返してください。 6. テストが成功する場合、次のテスト関数の作成のため2に戻り繰り返してください。 7. すべてのテストコードの作成が完了したら、シミュレーターでテストを実行し、テスト結果をMarkdownで保存してください。 … … ## ルール - 1つのテスト関数で1つのイベントの確認とする - テスト関数の最後でスクリーンショットを取得する - テストコードのコメントは日本語で記載する 結合テスト     テストコード作成 ★ 手順とルールの考え方は単体テストと同様 ステップ②
  24. 32 © SpiderPlus & Co. XcodeでAI Agentは使える? 結論 • iOS全般に対する精度

    は高い • テストコードを書く オトモとしては悪く ない • Xcode16を保守で必 要な場合は導入でき ない 感想 • 現時点Limitが厳しいかつ、利用状況が把握できない • 実用するならClaudeやOpenAIなどの有料プランが必 要 • 自然言語で簡単なアプリが作れた • コンテキストとしてルールを渡せば高い精度でリファ クタリングは可能 • エラーや警告の調査や解消については便利に使える • MCP Server連携ができないため自由度は低く感じる 場合も ★ macOS Tahoe 26かつ、Xcode26でCode Intelligence機能が使える
  25. 34 © SpiderPlus & Co. まとめ 嬉しいこと • AI AgentとMCP

    Serverを連携 することで、AI Agentにコード の解析→テストコードの作成→ 実行→修正の大部分を任せるこ とができる • Xcode26のCode Intelligence でも近しいことはできそう • 従来の半分以下の時間で自動テ ストが作成できる 気をつけたいこと • AI Agentはハルシネーションの リスクがあり、人間によるレ ビューは必須 • 人間がレビューできるサイズ感を 考慮してAI Agentの手順を構築 する • テストコードの品質を保つため に、ルールメイクやリファクタリ ングは重要
  26. 36 © SpiderPlus & Co. 開発組織のの取り組み 開発組織の生産性向上に向けての 活動や、開発プロセスや案件管理 の改善・構築、組織文化構築、の 一環としてエンジニア向けイベン

    トに協賛・ブース出展していま す。 イベント出展 サービスのアップデートや新機能 リリースを社内向けに解説、共有 する社内イベント「リリース前共 有会」という社内文化がありま す。 スパイダープラスのエンジニアが プロダクトの技術や開発の途上で 気づいたこと・学んだこと・体験 したこと等を発信しています。 リリース前共有会 テックブログ https://techblog.spiderplus.co.jp ほぼ毎週更新中!
  27. 38 © SpiderPlus & Co. こんな方、ぜひ一度お話ししましょう 顧客第一、顧客により良いもの を提供することに集中しこだわ りたい方 顧客に寄り添う

    より良い技術を磨くのは当然な がら、あくまで技術は手段とし て、その先にある顧客の課題解 決と、ビジネスの成功が大事、 という考えを持っている方 自分自身のエンジニアとしての こだわりは大事にしつつ、大き な目標の達成や課題解決のため に、「チームで取り組むこと」 の意識が高い方 技術≦課題解決 チームで価値を出す