ios-testing について
iOSおよびSwiftアプリのテスト設計と作成に向けたリファレンススキルで、8カテゴリにわたる規則を優先度順にまとめています。指定されたモジュール型MVVM-Cの契約に沿って、テストアーキテクチャ、単体・UIテスト、並行処理、スナップショット、CIに取り組む開発者向けです。
主な機能
- 018カテゴリにわたる44の優先規則
- 02テスト設計と単体テストの指針
- 03Mock・Stub・Fakeによる分離パターン
- 04非同期・並行処理のテスト手法
- 05SwiftUI・UI・スナップショットテストの指針
- 06CIの信頼性と実行に関する推奨事項
活用シーン
- 01テスト可能な依存関係とテストターゲットの設計
- 02非同期Swiftコードの単体テスト作成
- 03SwiftUIモデル、バインディング、ユーザーフローのテスト
- 04スナップショットテストとCI実行の設定
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill ios-testingインストール後、Claude Code で/ios-testingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
metadata.jsonassets/templates/_template.mdreferences/_sections.mdarch-arrange-act-assert.mdarch-constructor-injection.mdarch-protocol-dependencies.mdarch-single-responsibility-tests.mdarch-test-target-separation.mdarch-testable-import.mdasync-actor-testing.mdasync-await-directly.mdasync-confirmation.mdasync-mainactor-isolation.mdasync-task-cancellation.mdci-coverage-thresholds.mdci-deterministic-test-data.mdci-flaky-test-quarantine.mdci-parallel-execution.mdci-test-plans.mdmock-avoid-over-mocking.mdmock-dependency-container.mdmock-fake-for-integration.mdmock-protocol-based-mocks.mdmock-spy-for-verification.mdmock-stub-return-values.mdsnap-device-matrix.mdsnap-inline-snapshots.mdsnap-named-references.mdsnap-swift-snapshot-testing.mdswiftui-binding-testing.md詳細
iOS テストのベストプラクティス
iOS および Swift アプリケーション向けの包括的なテストガイドです。プリンシパルエンジニアのレベルで記述されています。8 つのカテゴリにわたる 44 のルールを収録し、テストアーキテクチャの決定、テスト作成パターン、CI インフラストラクチャの指針となるよう、影響度順に優先順位を付けています。
Clinic アーキテクチャ契約(iOS 26 / Swift 6.2)
このスキルのすべてのガイダンスは、Clinic のモジュール型 MVVM-C アーキテクチャを前提としています。
- Feature モジュールがインポートするのは
DomainとDesignSystemのみです(Dataや兄弟 Feature モジュールはインポートしません)。 - App ターゲットが集約点となり、
DependencyContainer、具体的な Coordinator、Route Shell の配線を所有します。 Domainは純粋な Swift を維持し、モデルに加え、リポジトリ、*Coordinating、ErrorRouting、AppErrorの各契約を定義します。Dataは SwiftData/ネットワーク/同期/再試行/バックグラウンド I/O を所有し、Domain のプロトコルを実装します。- 読み取り/書き込みフローでは、デフォルトで stale-while-revalidate 方式の読み取りと、楽観的なキューイング書き込みを使用します。
- ViewModel はリポジトリのプロトコルを直接呼び出します(デフォルトのユースケース/インタラクターレイヤーは設けません)。
適用する場面
次の場合に、これらのガイドラインを参照してください。
- iOS アプリの新しいユニットテストまたは UI テストを作成するとき
- 依存性注入を用いたテスト可能なアーキテクチャを設計するとき
- async/await、アクター、Combine パブリッシャーをテストするとき
- スナップショットテストまたはビジュアルリグレッションテストスイートを設定するとき
- CI パイプライン、テストプラン、並列実行を構成するとき
優先度別ルールカテゴリ
| 優先度 | カテゴリ | 影響度 | 接頭辞 |
|---|---|---|---|
| 1 | テストアーキテクチャとテスト容易性 | CRITICAL | arch- |
| 2 | ユニットテストの基礎 | CRITICAL | unit- |
| 3 | テストダブルと分離 | HIGH | mock- |
| 4 | 非同期処理と並行性のテスト | HIGH | async- |
| 5 | SwiftUI のテスト | MEDIUM-HIGH | swiftui- |
| 6 | UI テストと受け入れテスト | MEDIUM | ui- |
| 7 | スナップショットテストとビジュアルテスト | MEDIUM | snap- |
| 8 | テストの信頼性と CI | LOW-MEDIUM | ci- |
クイックリファレンス
1. テストアーキテクチャとテスト容易性(CRITICAL)
arch-protocol-dependencies- 具体型ではなく、プロトコルに依存するarch-constructor-injection- サービスロケーターではなく、コンストラクターインジェクションを使用するarch-test-target-separation- ユニットテストと UI テストのターゲットを分けるarch-testable-import- @testable import は必要最小限にするarch-single-responsibility-tests- 1 つのテストにつき、1 つのアサーションの概念を扱うarch-arrange-act-assert- テストを Arrange-Act-Assert の構成にする
2. ユニットテストの基礎(CRITICAL)
unit-swift-testing-framework- 新しいテストでは XCTest より Swift Testing を使用するunit-parameterized-tests- 入力のバリエーションにはパラメーター化テストを使用するunit-descriptive-test-names- 検証する振る舞いに基づいてテストに名前を付けるunit-expect-over-assert- XCTAssert より #expect と #require を使用するunit-require-preconditions- テストの前提条件には #require を使用するunit-test-suites- 関連するテストをスイートにまとめるunit-test-tags- 横断的なテストの分類にはタグを使用する
3. テストダブルと分離(高)
mock-protocol-based-mocks- サブクラスではなく、プロトコルからモックを作成しますmock-spy-for-verification- スパイを使ってやり取りを検証しますmock-stub-return-values- 決定的な戻り値にはスタブを使いますmock-avoid-over-mocking- 値型や単純なロジックのモック化を避けますmock-fake-for-integration- 統合テストにはメモリ内のフェイクを使いますmock-dependency-container- テスト構成には依存関係コンテナを使います
4. 非同期処理と並行性のテスト(高)
async-await-directly- テスト内で非同期関数を直接 await しますasync-confirmation- コールバックベースの API には confirmation() を使いますasync-mainactor-isolation- MainActor に分離されたコードを MainActor 上でテストしますasync-actor-testing- 非同期インターフェースを通じてアクターの状態をテストしますasync-task-cancellation- タスクのキャンセル経路を明示的にテストします
5. SwiftUI のテスト(中〜高)
swiftui-test-observable-models- @Observable モデルを通常のオブジェクトとしてテストしますswiftui-environment-injection- テスト用に環境の依存関係を注入しますswiftui-preview-as-test- プレビューをビジュアルスモークテストとして使いますswiftui-view-model-extraction- ビューからロジックをテスト可能なモデルに切り出しますswiftui-binding-testing- @Bindable を使ってバインディングの動作をテストします
6. UI と受け入れテスト(中)
ui-accessibility-identifiers- 要素の検索にはアクセシビリティ識別子を使いますui-page-object-pattern- 画面をページオブジェクトにカプセル化しますui-launch-arguments- 起動引数でテスト状態を設定しますui-wait-for-elements- sleep() を使わずに要素を待ちますui-test-user-journeys- 個別の画面ではなく、一連のユーザージャーニーをテストしますui-reset-state-between-tests- UI テスト間でアプリの状態をリセットします
7. スナップショットとビジュアルテスト(中)
snap-swift-snapshot-testing- ビジュアルリグレッションには swift-snapshot-testing を使いますsnap-device-matrix- さまざまなデバイスサイズと特性でスナップショットを撮りますsnap-named-references- 明確にするため、名前付きのスナップショット参照を使いますsnap-inline-snapshots- 画像以外のアサーションにはインラインスナップショットを使います
8. テストの信頼性と CI(低〜中)
ci-test-plans- 環境構成には Xcode Test Plans を使いますci-parallel-execution- テストの並列実行を有効にしますci-flaky-test-quarantine- 不安定なテストは無効化せず、隔離しますci-deterministic-test-data- ランダムな生成よりも決定的なテストデータを使いますci-coverage-thresholds- 重要な経路にカバレッジのしきい値を設定します
使用方法
詳しい説明とコード例については、各リファレンスファイルをご覧ください。
リファレンスファイル
| ファイル | 説明 |
|---|---|
| references/_sections.md | カテゴリーの定義と順序 |
| assets/templates/_template.md | 新しいルール用のテンプレート |
| metadata.json | バージョンとリファレンス情報 |
コメント
Markdown 対応