Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

2 © SpiderPlus & Co. 自己紹介 ピヨコ (X:@LabosPiyoko) スパイダープラス株式会社 - iOSアプリエンジニア - 8月まではEM、 9月からエンジニアに再チャレンジ - 趣味はスノーボードと野球観戦

Slide 3

Slide 3 text

3 © 2025 SpiderPlus & Co. Securities Code:4192

Slide 4

Slide 4 text

4 © SpiderPlus & Co. 今日お話しすること AI Agentをどう活用してテストの自動化を進めていくか? 前提 iOSアプリの既存プロダクト 手動テスト等で一定の正常性が担保 話さないこと ● 新規プロダクトでの自動テストの導入 ● 良いプロンプトの書き方 ● 環境構築

Slide 5

Slide 5 text

テストの自動化 に向けて

Slide 6

Slide 6 text

6 © SpiderPlus & Co. テストを自動化したいのはなぜ? テストを自動化すると嬉しいこと ● 開発サイクルのスピードアップ ○ 繰り返しテストが可能 ○ すぐに不具合がわかる ○ 属人化しない ● 長期的なコストの削減 ○ 手動でのテスト作業を減らせる

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

9 © SpiderPlus & Co. iOSアプリの自動テスト 単体テスト - テストコードを作成 a. Swift Testing(XCTest): Apple純正のUnitテストの Framework 結合テスト - テストコードを作成 a. XCUITest: Apple純正のUI テストのFramework b. Appium, Maestro: OSSの UIテストのFramework - ノーコードツールで作成 c. MagicPodさんなどのサービス

Slide 10

Slide 10 text

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できる状態にしておく

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

12 © SpiderPlus & Co. AI Agentと手動の比較(動画) (ワイプ) こちらは手動で 実装解析→テストコード作成 →テスト実行をやっていきます (ベース側) 実装コードの解析→1つ目のテストコードの作成 →テストの実行までを比較します

Slide 13

Slide 13 text

13 © SpiderPlus & Co. AI Agentと手動の比較(動画) (ワイプ) 引き続き1つ目の テストコードを作成中 (ベース側) ここまで約5分30秒でした

Slide 14

Slide 14 text

14 © SpiderPlus & Co. AI Agentと手動の比較(動画) (ワイプ) 1つ目のテストコードの 実行完了まで約14分15秒かかりました (ベース側) こちらは5つ目のテストコード作成まで 完了していました

Slide 15

Slide 15 text

単体テスト Swift Testing (XCTest)

Slide 16

Slide 16 text

16 © SpiderPlus & Co. 単体テスト - Swift Testing Unitテストコード作成のためのステップ 前提 AI Agent x MCP Serverを 使える状態になっている 1. 実装のソースコードからAI Agentに作成させる

Slide 17

Slide 17 text

17 © SpiderPlus & Co. 単体テスト MCP Serverの初期セットアップが終われば プロンプトを渡すだけでテストコードの作成〜テストの実施まで可能 あなたはプロフェッショナルなiOSアプリ開発エンジニアです。以下のルールに従い、レビューを受けながら単体テストのコードを作成してください。 ## 手順 対象のファイルの各関数で関数1つずつに対して順番に以下を行ってください。 // 実装の解析→テストの方針→テストコードの作成→テストの実行→テスト結果の作成、レビューのタイミングを手順化 ## 対象 @TestSampleApp/Presentation/Hoge/HogeViewModel.swift ## 言語 Swift 6.1 ## テストフレームワーク Swift Testing ## テスト環境 iOS18のiPhoneシミュレーター ## ルール // テストコードの作成についてのルール ## 出力 // テストコードやテスト結果の出力先、ファイル名の指定、テンプレートの指定など ステップ①

Slide 18

Slide 18 text

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で保存してください。 実装の解析→テストの方針→テストの作成→テスト失敗へ対応など 各工程をレビューをしながら進めた方が良い ポイント①

Slide 19

Slide 19 text

19 © SpiderPlus & Co.      レビューしながら進める ハルシネーションのリスクを減らすため ※低品質:リファクタリングに弱い、可読性・保守性が低い、カバレッジが不十分など AI Agentはハルシネーションのリスクがあるため、「生成された テストコードが本当に適切なテストなのか?」の確認は必須 そもそも実装の意図がコンテキストに反映できているか?の確認から ステップごとに確認した方が低品質なテストコードが生成されにくく 手戻りも少なくて済むケースが多い ポイント① ナゼ?

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

21 © SpiderPlus & Co.      観点・基準・ルールをコンテキストに含める テストコード生成の精度を高めるため ● テストコードの生成ごとにテスト品質にバラつきがある(=精度が 低い)と効果的なテストができない、レビュー&手戻りが大変、 メンテナンス性が下がるなど、デメリットが大きくなってしまう ● 低品質なテストコードを大量生産しないように先手を打っておく のが重要 ● ClaudeCodeならSubagents機能を活用してチームで共通の コンテキストを利用できるようにするのがオススメ ポイント② ナゼ?

Slide 22

Slide 22 text

22 © SpiderPlus & Co.   継続的なプロダクトの開発という観点では 実装側のレガシーな状態をできるだけ解消しておいた方が良い ポイント③ レガシーな状態の解消とは ● 関数名や変数名が適切な命名か見直す ● 単一責任の原則を守れるよう関数の分離 ● 多重ループや再帰呼び出しが必要になるデータ構造 を解消する ● アーキテクチャの見直しなど依存の方向の最適化

Slide 23

Slide 23 text

23 © SpiderPlus & Co.      レガシーな状態の解消 テストコードの確度を高めるため 実装側の関数がレガシーな状態だと 「実装の意図が分かりづらい=適切なテストコードが分かりづらい」 ハルシネーションを見抜く難易度が上がってしまう 特に実装者が退場後や記憶を失っている場合はつらい、ムリ AI Agentを活用してリファクタリングも進められると一石二鳥 ポイント③ ナゼ?

Slide 24

Slide 24 text

結合テスト XCUITest

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

26 © SpiderPlus & Co. 結合テスト - 外部仕様書を利用する 人間がテストをレビューしやすくするため ● AI Agentはハルシネーションのリスクがあり、生成された テストが本当に適切なテストなのか?の確認は必須 ● 他にも ○ カメラなどシミュレーターでテストできない機能は 手動テストが必要なため設計資料に活用 ○ QAやサポートの調査資料としても流用できる ナゼ?

Slide 27

Slide 27 text

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シミュレーター ## 出力 // スクリーンショットや外部仕様書の出力先、ファイル名の指定、テンプレートの指定など ステップ①

Slide 28

Slide 28 text

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の場合は範囲の指定をプロンプトで工夫する

Slide 29

Slide 29 text

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の確認用で出力できない ● 指定しないと実は意図した出力先へ保存できていない事故になりがち

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

31 © SpiderPlus & Co. あなたはプロフェッショナルなiOSアプリ開発エンジニアです。以下のルールに従い、レビューを受けながらUIテストのコードを作成してください。 ## 手順 1. 対象の外部仕様書から必要なUIテストについて全体像を説明し、レビューを求めてください。 2. 1のレビューが完了したら、テスト関数を1つ作成し、目的を説明し、レビューを求めてください。この時すでに作成されているテスト関数があり、流 用もしくは修正することで対応できる場合はその旨を説明してください。 3. 2のレビューが完了したら、シミュレーターでテストを実行してください。 4. テストが失敗する場合、考えられる原因からテストコードを修正し、レビューを求めてください。テストの失敗の原因がテストコード以外にある場 合、考えられる原因・修正案を提示し、レビューを求めてください。 5. 4のレビューが完了したら、再度シミュレーターでテストを実行してください。テストが失敗する場合は4に戻り繰り返してください。 6. テストが成功する場合、次のテスト関数の作成のため2に戻り繰り返してください。 7. すべてのテストコードの作成が完了したら、シミュレーターでテストを実行し、テスト結果をMarkdownで保存してください。 … … ## ルール - 1つのテスト関数で1つのイベントの確認とする - テスト関数の最後でスクリーンショットを取得する - テストコードのコメントは日本語で記載する 結合テスト     テストコード作成 ★ 手順とルールの考え方は単体テストと同様 ステップ②

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

34 © SpiderPlus & Co. まとめ 嬉しいこと ● AI AgentとMCP Serverを連携 することで、AI Agentにコード の解析→テストコードの作成→ 実行→修正の大部分を任せるこ とができる ● Xcode26のCode Intelligence でも近しいことはできそう ● 従来の半分以下の時間で自動テ ストが作成できる 気をつけたいこと ● AI Agentはハルシネーションの リスクがあり、人間によるレ ビューは必須 ● 人間がレビューできるサイズ感を 考慮してAI Agentの手順を構築 する ● テストコードの品質を保つため に、ルールメイクやリファクタリ ングは重要

Slide 35

Slide 35 text

35 © 2025 SpiderPlus & Co. Securities Code:4192

Slide 36

Slide 36 text

36 © SpiderPlus & Co. 開発組織のの取り組み 開発組織の生産性向上に向けての 活動や、開発プロセスや案件管理 の改善・構築、組織文化構築、の 一環としてエンジニア向けイベン トに協賛・ブース出展していま す。 イベント出展 サービスのアップデートや新機能 リリースを社内向けに解説、共有 する社内イベント「リリース前共 有会」という社内文化がありま す。 スパイダープラスのエンジニアが プロダクトの技術や開発の途上で 気づいたこと・学んだこと・体験 したこと等を発信しています。 リリース前共有会 テックブログ https://techblog.spiderplus.co.jp ほぼ毎週更新中!

Slide 37

Slide 37 text

37 © SpiderPlus & Co. 東京オフィスの様子 商店建築2023年5月号 にて紹介されました

Slide 38

Slide 38 text

38 © SpiderPlus & Co. こんな方、ぜひ一度お話ししましょう 顧客第一、顧客により良いもの を提供することに集中しこだわ りたい方 顧客に寄り添う より良い技術を磨くのは当然な がら、あくまで技術は手段とし て、その先にある顧客の課題解 決と、ビジネスの成功が大事、 という考えを持っている方 自分自身のエンジニアとしての こだわりは大事にしつつ、大き な目標の達成や課題解決のため に、「チームで取り組むこと」 の意識が高い方 技術≦課題解決 チームで価値を出す

Slide 39

Slide 39 text

ご清聴ありがとうございました! エンジニアを募集中! https://hrmos.co/pages/spiderplus/jobs SPIDERPLUS Tech Blog https://techblog.spiderplus.co.jp エンジニアを募集中! https://hrmos.co/pages/spiderplus/jobs