端的にいうと
Apple謹製のUI操作記録が25年秋登場、UIテストの機運が高まります。
1) WWDC25
WWDC25が6月10日(日本時間)から5日にわたって開催されました。昨年WWDC24ではApple Intelligenceを銘打ってコンシューマーに向けに機械学習モデルをアピールするも実現できた機能は限られ、出てきたものはAIで先行する他社サービスをアレンジしたものか、パートナーとなったChatGPTの橋渡し程度のものでした。昨年のAppleの施作は継続するとして今年は開発者向けの機械学習モデルによる開発効率の向上が図られています。
本題から逸れますがAppleはXcode26で開いたエディターで開いたソースコードを一種のプロンプトとしてみなして、反復して確認や、プレビュー、ドキュメント作成などを蓄積できるように取り組んでおります。ソースコードにどのように機械学習が読み取れる意図を埋め込むか、出力した結果を再利用するかは以下のセッションを見ることで動きは確認できると思います。
Model Foundation フレームワークを下支えしているのはApple謹製オープンソースプログラミング言語Swiftの年次アップデートによる恩恵が大きいと考えます。SwiftがいかにアップデートしているかはWWDC23のSwift Macroについてのセッションが良い例かと考えます。
閑話休題。 Xcode26ではUIテスト向けの強力な機能が提供されています。UnitテストおよびUIテストに関してAppleは基盤整備のためのフレームワークを提供するも利用に際しては、開発者による人力入力や、サードパーティーおよびSaaSに任せきりだった機能があります。それが本題のUIテストの改善、UI操作記録機能となります。
2) CI(継続的インテグレーション)について
UI操作記録機能の前提として何に使うかというとプロダクトのテストで使用します。テストと関わりが深いのがCI(継続的インテグレーション)です。イメージとしてはCIの中に各種テストが含まれています。
プロダクトを構成するソースコードは、リリース可能なコードをメインコードとすると、プロダクトの改善や、プラットフォーム更新に伴う修正を実施するための、別バージョンのコードが時系列上で存在することになります。ソースコード管理ソフト(git)ではソースコードの派生と、統合までは面倒を見ますが実際にソースコードが正しいかどうかまではソースコード管理ソフトの範疇ではなくCIの役割となります。
CIは複数の派生コードをメインコードにまとめていくに際して(事前に用意した)テストを実行し、テスト結果(成功、失敗) に基づいて、または一旦差し戻すといったステップを繰り返すことでメインコードを常に健全に保つ手法となっています。派生コードを開発している環境と、CIのサイクルを回す環境を分けていると環境ごとの依存を分離できる副次的な効果も得られます。
ただし、ソースコード管理ソフトやCI/CD(継続的デプロイ)についても2010年代には普及しはじめ単体で認識されるよりかはコラボレーションツール(Github BitBucket)が担っているため意識することは少ないかもしれません。
CIを構成する要素を大まかに分けると、a. ソースコードが正しくビルドできるか、b.ビルド結果でテスト実施し成否を確認するかを含みます。aはそもそもプロダクトが出来上がらないので成否はわかりやすいですが、bはプロダクトがビルドできた分、プロダクトの内容をテストを通して信頼できるかを査定するものです。
ユニットテストとUIテスト
CIに含まれるテストは大きく2つに分けられ、単体テスト(構造体、ViewModelなどのユニット単位のテスト)とUIテストがあります。
単体テストはアプリを構成する構成物ごとに焦点を当てたテストとなります。構成物の内部構造を知っている開発者にとっては、テストのシナリオ(どうやったら成功or失敗する)が想定しやすいです。
他方、UIテストはアプリを構成する要素ではなく、アプリに対して利用者の操作(タップ、キーボード入力)の結果、期待した結果(画面に表示されるメッセージや、表示される画像) が得られるかを確認するもので、アプリ内部を知らずに操作に対しての結果を確認するテストとなり開発者にとってはテストを作るだけでも単体テストよりも見通しが立たない、労力を要するように思われます。
UIテストの現状
iOSアプリ開発では単体テストに比べてUIテストに腰が重たいのは別の理由もあります。
Apple 提供するSDKではテストのためのUI操作を直感的に記録する手段は提供されていませんでした。正確にはサポートするフレームワークは提供されているもののコードベースで記述することは可能ではありましたが、アプリ利用者が操作するシナリオを想定して記述するため実際の操作シナリオとの乖離がありました。
サードパーティー製のツール(Appiumほか)も存在していますが、クロスプラットフォーム由来のAppleのデバイスに最適化されていない、CI環境のセットアップと整備がそれほど容易ではないなどの問題点がありました、Appiumを採用して、UI操作記録をサポートするSaaSもいくつか見受けられますが、それぞれUI操作記録方法は様々というのが2025年までの状況と認識しております。
3) Xcode26でのUI操作記録
WWDC25で発表された統合開発環境の最新版Xcode26では、統合開発環境の中でUI操作記録を記録可能となります。
前提は、
- アプリプロジェクトにUIテストが含まれている(ターゲットがあること、ない場合は追加可能)
- 1のUIテストにテストケースが含まれていること
となります。はXocde上で新規にテストケースを用意することができます。
プロジェクトに追加されているテストケース内に目的に添ったテストを複数追加できます。
アプリの操作を記録する方法は簡単です。それぞれのテスト内の行にカーソルを合わせた際に左に出てくる録画アイコンをタップするだけです。
動作記録するiPhoneシミュレーターを確認されたのに続けるとアプリが起動し録画が開始されます。iPhoneシミュレーターでの操作がテスト内にシナリオとして記録されます。シナリオはソースコードなので後から加工も可能です。
UI操作を終了するには、先ほどタップした録画ボタンをもう一タップするか、iPhoneシミュレーターのナビゲーション画面の録画停止ボタンをタップします。
UI操作記録を加工する(recommendと置き換え)
UI操作記録を完了後、UI操作記録を最適化できます。これらの操作はXcode26がrecommendには操作対象のUIパーツのクエリーや、操作の置き換えがあります。
UI操作記録はアプリ内のIDを直接使えないのでUI上で見えている文字列やパーツの識別子(Accessibility Identifier)をクエリーとして特定します。パーツの識別子はアプリ開発側で指定できるのでrecommend の中にパーツの識別子があるのでればパーツの識別子を指定しなおします(UI操作記録のrecommend で最初に出てくるのはできるだけ短いクエリー名を選ぼうとします)。
またタップ操作が若干長いだけでもlong press 相当になる場合もあるので、タップ操作に置き換えてUI操作記録を加工します。
UI操作記録に検証を追加する
UI操作記録だけではテストとは言えません。実際には画面上に特定にメッセージが表示されているなどの確認が必要となります。UIテストは実装作業とは違うフレームワークを使用するので馴染みがないかもしれませんが、macOS26とXcode26の組み合わせではChatGPTなどAIサービスから提案を受けることができます!Xcode26のリリースが楽しみですね。
余談: 標準ではないUIは対応可能?
UI操作記録対象のUIパーツとしてUIKitおよびSwiftUIのいずれも対応しています。内部アーキテクチャも影響しないので少なくてもネイティブ言語(Swift, Objective-C)では影響は無いようです。
では、UIテーマのような拡張ライブラリを採用している場合にも有効でしょうか? 今回はmaterial-components/material-components-iosで確認を試みました。
以下のようなサンプルアプリを記述し、簡単なテストを実施できるようにしました。画面上には標準的TextField、UIButtonとmaterial-components のそれぞれ配置しています。
標準的なUIパーツでの記録を確認したのち、material-componentsでもUI操作記録が可能であるかを確認しました。material-components はObjective-C で記述されており、リリースから長い歴史が立っております。これらの条件でUI操作記録は可能なのでしょうか?
結果としては成功しております。
確認当初、material-componentsのTextFieldは正しく動作しないのではと疑っていましたが、material-componentsのTextFieldの実装はAppleの仕様に則した実装となっておりUI操作記録にも反映されております。
まとめ
Xcode26でApple謹製のUIテスト向けのUI操作記録機能が追加されました。Xcode26からのコーディングサポート機能も相まってUIテストに取り組む障壁の一つなくなったように思われます。また操作記録作業自体はbeta版でも期待通りに動いているので楽しさもあります。展望としてはUIテストの操作記録についてはQAチーム他に依頼する状況も生まれそうです。
ユニファでは一緒に働く仲間を募集しています!