Swift Testing それとも XCTest?2026年初心者向け選択ガイド
2026年9月18日時点で、Appleは同じテストターゲット内でSwift TestingとXCTestを併用する移行方法を案内しています。Appleのテストプロジェクト追加ガイドに沿うなら、新しい単体テストと統合テストはSwift Testing、画面操作を確認するUIテストはXCTestが基本です。旧課題をすべて書き直す必要はありません。
この結論は、初めて@Testや#expectを見るSwift初学者、XCTestCaseを使う旧課題に取り組む学生、Windowsや学校の制限されたパソコンで学ぶ人に向いています。テストの理論ではなく、提出物を壊さずに選ぶ方法に絞ります。
最終更新:2026年9月18日。バージョンと互換性の確認元は、AppleのXcodeシステム要件、テスト移行資料、WWDC26資料、Swift.orgのSwift 6.4リリース情報です。
新しい課題なら、Swift TestingとXCTestを役割で分ける
Swift TestingとXCTestは、どちらか一方しか使えない関係ではありません。新しいロジックを確認する枠組みと、アプリ画面を実際に操作する枠組みを分けると、初心者でも判断しやすくなります。
学校の課題にたとえると、Swift Testingは「計算結果を採点する自動チェック」です。XCTestのUIテストは「実際に画面を開き、ボタンを押して動線を確認する実技チェック」に近い役割です。
最小コードで違いを確認する
例えば、割引後の金額を返す関数を確認する場合、Swift Testingでは次のように書けます。
import Testing
func discountedPrice(_ price: Int, rate: Int) -> Int {
price - (price * rate / 100)
}
@Test
func priceIsCalculated() {
#expect(discountedPrice(1000, rate: 20) == 800)
}
@Testは、この関数をテストとして実行する印です。#expectは、計算結果が期待値と一致するかを判定します。Appleのexpectationに関する公式説明でも、期待する条件を記述して結果を確認する仕組みが説明されています。
実行後は、条件が通ったか、どこで失敗したかをXcodeのテスト結果で確認します。テスト結果の読み方は、Appleのテスト実行と結果確認の資料に沿って確認できます。
一方、ボタンを押して画面が切り替わるかを調べるUIテストは、XCTestの役割として残ります。Swift Testingのコードに置き換えれば、UI操作まで自動的に確認できるわけではありません。
旧課題と新規プロジェクトでは、選択条件が変わる
同じSwift学習者でも、課題の状態によって安全な選び方は異なります。次の表では、 frameworkの新しさではなく、提出物と確認対象を基準にしています。
| 学習状況 | ロジックの確認 | 画面操作の確認 | 推奨する進め方 |
|---|---|---|---|
| 新しいSwift・SwiftUIプロジェクト | Swift Testing | XCTest | 新しいテストから役割分担する |
| XCTestを使う旧課題 | 既存のXCTestを維持してもよい | XCTest | 提出条件を優先し、急いで書き換えない |
| 既存リポジトリへの参加 | 既存構成を確認 | 既存のUIテストを確認 | テスト計画と補助コードを先に読む |
| Macを使えない段階 | Swift Packageのロジック | 実行にはXcode環境が必要 | ロジックを先に練習し、後でMacで確認する |
Appleはテストプロジェクトの作成時に、Swift TestingによるテストとXCTestによるUIテストを扱える構成を示しています。新規テスト追加の公式資料を読むと、両者を単純な一択として扱わない理由が分かります。
Swiftの新規プロジェクトでは、どちらを選ぶべきですか。
新しく書くロジックならSwift Testingを優先します。読みやすいテスト、複数の入力を確認するパラメータ化、並行処理を含むコードへの対応を考えやすいからです。これは「新しいから速い」と決めつける話ではなく、テストの書き方と対象に合わせた判断です。
Swift TestingとXCTestを同じプロジェクトに置けますか。
置けます。同じテストターゲットで共存させ、古いテストを残したまま新しいテストを追加できます。Appleの移行ガイドでも、段階的な移行が扱われています。
第一歩:旧XCTest課題を無理に移行しない
旧講座のサンプルがXCTestCase、setUp()、既存のアサーションを前提にしている場合、提出直前の全面移行は避けるべきです。教師の環境、テストターゲット名、提出方法がXCTest前提なら、動いている課題を保つことが優先されます。
次の条件に一つでも当てはまるなら、今回は移行を止めてください。
- 提出期限が近く、基準となるテストがまだ通っていない
- 講師がXCTestを指定している
- テストプランや共有ヘルパーの構成をまだ理解していない
- 移行前と移行後で、同じ失敗を再現できていない
反対に、課題に余裕があり、同じテストを比較できるなら、新しいロジックだけSwift Testingへ移します。UIテストと旧テストはXCTestに残します。移行前後で同じ入力を実行し、失敗が「正しく失敗」として表示されるかまで確認してください。
Xcode 27とSwift 6.4を確認する場所
Xcode 27のテストフレームワーク間の連携や、既存のテスト計画との挙動は、プロジェクトの設定によって見え方が変わります。Xcodeのシステム要件は更新される可能性があるため、利用中の環境はAppleのXcodeシステム要件で確認します。
Swift 6.4はSwift.orgが公開しているリリース情報で確認できます。Swift 6.4の公式リリース記事を参照し、講座の指定バージョンと実際の環境を混同しないことが重要です。講座が古い場合、コードの書き換えより先に、指定されたXcodeで提出できるかを確認します。
注意:テストが一覧に表示されたことと、テストが正しく検証されたことは同じではありません。失敗をわざと作り、Xcodeが失敗として表示するかを一度確認してください。
Macがない場合は、練習範囲を分ける
Swift TestingはSwiftが対応する主要なプラットフォームで利用でき、Swift PackageのロジックはMac以外の環境でも練習できます。Swift.orgのTesting説明を使えば、単純な関数やデータ処理から学習を始められます。
ただし、これだけでiOS開発全体を完了できるわけではありません。Xcodeプロジェクト、SwiftUI画面、iOSシミュレーター、UI自動化の確認には、Xcodeを動かせるMac環境が必要です。Windowsだけでコードを書き、最後のビルドと画面確認だけMacへ移す二段階の学び方が現実的です。
MacなしでSwift Testingを練習できますか。
純粋なSwift関数やSwift Packageなら練習できます。ただし、iOS画面を含む課題では、最後にXcodeでテストターゲットを開き、ビルド、実行、失敗結果の保存まで行う必要があります。
提出前に行う5段階の確認
- テスト対象の関数を、画面から切り離して小さく作ります。
- 新しいロジックには
@Testと#expectを追加します。 - UI操作はXCTestのUIテストとして残します。
- 成功する入力と、意図的に失敗する入力を両方実行します。
- 使用したXcode、Swift、テスト結果、提出ファイルを同じプロジェクトで再確認します。
Windowsで下書きした場合は、コードの同期だけで終わらせないでください。Mac側でテストが認識されるか、テストターゲットにファイルが含まれるか、結果が保存できるかを確認します。短期間だけXcodeを使う必要がある場合は、SFTPMACのMacレンタル案内を比較材料にできます。
人ごとの最終判断:若いコードだけ移す
判断を迷った場合は、次の条件分岐で決めます。
- 新しいロジックや統合テストを作るなら、Swift Testingを選びます。
- 画面のタップ、入力、画面遷移を確認するなら、XCTestを選びます。
- 旧課題がXCTestで動いているなら、全面移行せず、そのまま提出できる状態を守ります。
- 既存プロジェクトに参加するなら、テスト計画、補助関数、ターゲット設定を読んでから一部だけ移します。
- Macがないなら、Swift Packageのロジックを先に練習し、iOSとUIの確認時だけXcode環境へ移します。
学習用の小さなプロジェクトで、単体テストとUIテストを一度ずつ通すのが最短の確認方法です。失敗結果まで再現できれば、フレームワーク名だけを追いかけるより、提出時のトラブルを減らせます。
手元のWindowsや学校のパソコンでXcodeを動かせない場合、仮想環境では画面、シミュレーター、署名、テスト結果の再現に制限が出ることがあります。短期の課題や動作確認なら、実機のMacへ接続できるSFTPMACのレンタルを使い、終了後に自分の学習環境へ戻す方法も検討できます。SFTPMACのMacレンタル料金を確認する際は、必要な期間とXcode作業の範囲を先に整理してください。
長期的に毎日ビルドし、物理デバイスや安定した作業環境を使う学生には、自分でMacを用意する方が合う場合もあります。一方、1回の課題確認、短い講座、提出前のテスト実行が目的なら、購入よりも必要な期間だけ実際のMacへ接続する方が無駄を抑えやすいです。