axiom-ios-testing について
iOS開発者向けのテストルータースキルです。テスト設計、信頼性、速度、実行に関する質問を、専門スキルやエージェントへ振り分けます。Swift Testing、XCTest/XCUITest、非同期テスト、コマンドラインの手順を扱います。
主な機能
- 01ニーズに応じてテスト質問を振り分け
- 02Swift TestingとXCTestの選択を案内
- 03非同期テストや不安定なテストの調査を案内
- 04コマンドライン実行をtest-runnerへ案内
- 05UI自動化とテスト監査を網羅
活用シーン
- 01新しいユニットテストやUIテストの方式選定
- 02CIで断続的に失敗するテストの指針探し
- 03非同期テストコードのパターン選択
- 04テスト実行と結果分析の振り分け
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ charleswiltgen/ axiom --skill axiom-ios-testingインストール後、Claude Code で/axiom-ios-testingを入力して読み込まれたか確認します。
詳細
iOS テストルーター
テストに関するあらゆる質問では、テストの作成、テスト失敗のデバッグ、テストの高速化、テスト手法の選択を含め、必ずこのスキルを使用してください。
使用する場面
次のような状況では、このルーターを使用してください。
- 新しいユニットテストまたは UI テストを作成する
- Swift Testing フレームワーク(@Test、#expect、@Suite)
- XCTest または XCUITest に関する質問
- テストを高速化する(シミュレーターを使わない)
- 不安定なテスト(成功したり失敗したりする)
- 非同期コードを確実にテストする
- XCTest から Swift Testing に移行する
- テストアーキテクチャに関する判断
- 条件ベースの待機パターン
ルーティングのロジック
このルーターは、具体的なテストのニーズに応じて、専門スキルを呼び出します。
1. ユニットテスト/高速テスト → swift-testing
トリガー:
- 新しいユニットテストを作成する
- Swift Testing フレームワーク(
@Test、#expect、#require、@Suite) - シミュレーターを使わずにテストを実行する
- 非同期コードを確実にテストする
withMainSerialExecutor、TestClock- XCTest から移行する
- パラメーター化されたテスト
- タグと特性
- Host Application: None の設定
- Swift Package のテスト(
swift test) - 純粋なロジックのテストに 5 秒以上かかる
- 高速なフィードバックループで TDD を行いたい
swift-testing を使う理由:並列実行、より優れた非同期サポート、シミュレーターを起動せずに実行できる機能を備えた、モダンな Swift Testing フレームワークです。
呼び出し方法:axiom-swift-testing スキルを読みます
2. UI テスト/XCUITest → ui-testing
トリガー:
- UI オートメーションを記録する(Xcode 26)
- XCUIApplication、XCUIElement
- 不安定な UI テスト
- ローカルでは成功するが、CI では失敗するテスト
sleep()または任意のタイムアウト- 条件ベースの待機
- デバイスをまたいだテスト
- アクセシビリティを優先したテスト
ui-testing を使う理由:XCUITest にはシミュレーターが必要であり、信頼性を高めるための独自のパターンがあります。
呼び出し方法:axiom-ui-testing スキルを読みます
3. 不安定なテスト/競合状態 → test-failure-analyzer(エージェント)
トリガー:
- CI でテストがランダムに失敗する
- ローカルでは成功するが、CI では失敗するテスト
- 不安定なテスト(成功したり失敗したりする)
- Swift Testing における競合状態
- 非同期コールバックに対する
await confirmationがない - UI テストに
@MainActorがない @Suite内の共有可変状態- 単独では成功するが、まとめて実行すると失敗するテスト
test-failure-analyzer を使う理由:Swift Testing で断続的な失敗を引き起こすパターンをスキャンする、専門エージェントです。
呼び出し方法:test-failure-analyzer エージェントを起動します
4. 非同期テストのパターン → testing-async
トリガー:
- async/await 関数をテストする
- コールバックに対する
confirmation(Swift Testing) - 複数のコールバックに対する
expectedCount @MainActor @Testを使って MainActor のコードをテストする- XCTestExpectation から confirmation に移行する
- テストの並列実行に関する懸念
- テストのタイムアウト設定
testing-async を使う理由:Swift Testing フレームワークで非同期コードを扱うための専用パターンがあります。
呼び出し方法:axiom-testing-async スキルを読みます
5. テストのクラッシュ/環境の問題 → xcode-debugging
トリガー:
- アサーションの実行前にテストがクラッシュする
- テスト用のシミュレーターが起動しない
- テストがいつまでも停止しない
- 「Unable to boot simulator」エラー
- クリーンなテスト実行とインクリメンタル実行で結果が異なる
xcode-debugging を使う理由:テストロジックではなく、環境の問題によるテスト失敗に対応します。
呼び出し方法:axiom-xcode-debugging スキルを読みます
6. コマンドラインから XCUITest を実行する → test-runner(エージェント)
トリガー:
- xcodebuild でテストを実行する
- xcresult バンドルを解析する
- 失敗時のスクリーンショット/動画を書き出す
- コードカバレッジレポート
- CI/CD でのテスト実行
test-runner を使う理由:xcresulttool による解析を含む、コマンドラインでのテスト実行を専門とするエージェントです。
呼び出し方法:test-runner エージェントを起動します
7. クローズドループでのテストデバッグ → test-debugger(エージェント)
トリガー:
- 失敗するテストを自動的に修正する
- 解消しないテスト失敗をデバッグする
- 実行 → 分析 → 修正 → 検証のサイクル
- テストが通るまで反復する必要がある
- 失敗時のスクリーンショットを分析する
test-debugger を使う理由:テストの実行、失敗の分析、修正案の提示、再実行を自動で繰り返すサイクルを提供します。
呼び出し:test-debugger エージェントを起動します
8. UI オートメーションの記録(Xcode 26) → ui-recording
トリガー:
- Xcode でユーザー操作を記録する
- 複数構成で再生するためのテストプランを作成する
- テスト実行の動画を確認する
- Xcode 26 の記録ワークフローを利用する
- 記録したテストコードを改善する
ui-recording を使う理由:Xcode 26 の記録/再生/確認ワークフローに特化したガイドです。
呼び出し:axiom-ui-recording スキルを読みます
9. テスト品質監査 → testing-auditor(エージェント)
トリガー:
- テスト品質を監査したい
- 不安定なテストのパターン(sleep の呼び出し、共有された可変状態)を見つける
- テストの実行速度を上げる
- XCTest から Swift Testing に移行する
- Swift 6 の並行処理に関する問題がないかテストを確認する
testing-auditor を使う理由:テストカバレッジの構成を本番コードと照らし合わせ、不安定なパターンや速度の問題を検出し、テストされていない重要な経路(認証、支払い、永続化)を特定して、テスト全体の健全性を評価します。
呼び出し:testing-auditor エージェントまたは /axiom:audit testing を実行します
10. XCUITest を使わない UI オートメーション → simulator-tester + axe-ref
トリガー:
- テストターゲットなしでアプリを自動操作する
- AXe CLI の使い方(タップ、スワイプ、文字入力)
- describe-ui でアクセシビリティツリーを確認する
- XCUITest の外で手早くオートメーションを行う
- スクリプトでシミュレーターを操作する
simulator-tester + axe-ref を使う理由:XCUITest を利用できない場合に、AXe がアクセシビリティに基づく UI オートメーションを提供します。
呼び出し:simulator-tester エージェントを起動します(axiom-axe-ref を使用)
判断ツリー
- ユニットテスト/Swift Testing を作成する? → swift-testing
- UI テスト/XCUITest を作成する? → ui-testing
- async/await コードをテストする? → testing-async
- 不安定なテスト/競合状態(XCUITest)? → ui-testing
- 不安定なテスト/競合状態(Swift Testing)? → test-failure-analyzer(エージェント)
- テストがクラッシュする/環境が間違っている? → xcode-debugging(ios-build 経由)
- テストが遅い/swift test を使いたい? → swift-testing(戦略 1:パッケージの切り出し)
- CLI からテストを実行する/結果を解析する? → test-runner(エージェント)
- 失敗するテストを自動的に修正する? → test-debugger(エージェント)
- テスト品質を監査したい(不安定なパターン、移行など)? → testing-auditor(エージェント)
- UI 操作を記録する(Xcode 26)? → ui-recording
- XCUITest/AXe CLI なしで自動操作する? → simulator-tester + axe-ref
Swift Testing と XCTest のクイックガイド
| 必要なこと | 使用するもの |
|---|---|
| ユニットテスト(ロジック、モデル) | Swift Testing |
| UI テスト(タップ、スワイプ、画面のアサーション) | XCUITest(XCTest) |
| シミュレーターなしでのテスト | Swift Testing + Package/Framework |
| パラメーター化テスト | Swift Testing |
| パフォーマンス測定 | XCTest(XCTMetric) |
| Objective-C のテスト | XCTest |
自己正当化への対処
| 考え | 実際のところ |
|---|---|
| "簡単なテストの質問だから、スキルは必要ない" | 適切なパターンによってテストの負債を防げます。swift-testing にはコピーして使える解決策があります。 |
| "XCTest は十分よく知っている" | ユニットテストでは Swift Testing のほうが大幅に優れています。swift-testing では移行方法も扱います。 |
| "テストは遅いけれど、これで問題ない" | テストが速ければ TDD を実践しやすくなります。swift-testing ではシミュレーターなしで実行する方法を紹介しています。 |
| "sleep() で不安定なテストを直そう" | sleep() はテストを遅くし、さらに不安定にします。ui-testing には条件に基づく待機パターンがあります。 |
| "テストは後で追加しよう" | 実装後に書いたテストでは、エッジケースを見落とします。swift-testing を使えば、先にテストを書くのが簡単になります。 |
使用例
ユーザー:「Swift でユニットテストを書くにはどうすればよいですか?」 → 呼び出し:axiom-swift-testing
ユーザー:「CI で UI テストが不安定です」 → コードベースを確認:XCUIApplication/XCUIElement のパターンを確認 → ui-testing → コードベースを確認:@Test/#expect のパターンを確認 → test-failure-analyzer
ユーザー:「テストがランダムに失敗し、通るときもあれば失敗するときもあります」 → 呼び出し:test-failure-analyzer(エージェント)
ユーザー:「ローカルではテストが通りますが、CI では失敗します」 → 呼び出し:test-failure-analyzer(エージェント)
ユーザー:「不安定にならないように非同期コードをテストするにはどうすればよいですか?」 → 呼び出し:testing-async
ユーザー:「Swift Testing でコールバックベースの API をテストするにはどうすればよいですか?」 → 呼び出し:testing-async
ユーザー:「XCTestExpectation に相当する Swift Testing の機能は何ですか?」 → 呼び出し:testing-async
ユーザー:「expectedCount を指定して confirmation を使うにはどうすればよいですか?」 → 呼び出し:testing-async
ユーザー:「テストをもっと速く実行したいです」 → 呼び出し:axiom-swift-testing(戦略 1:パッケージの切り出し)
ユーザー:「ユニットテストの実行に 25 秒かかります」 → 呼び出し:axiom-swift-testing(戦略 1:パッケージの切り出し)
ユーザー:「xcodebuild test の代わりに swift test を使うにはどうすればよいですか?」 → 呼び出し:axiom-swift-testing(高速テストのセクション)
ユーザー:「Swift Testing と XCTest のどちらを使うべきですか?」 → 呼び出し:axiom-swift-testing(移行のセクション)+この判断ツリー
ユーザー:「アサーションを実行する前にテストがクラッシュします」 → 呼び出し:axiom-xcode-debugging
ユーザー:「テストを実行して、失敗したものを見せてください」 → 呼び出し:test-runner(エージェント)
ユーザー:「失敗しているテストの修正を手伝ってください」 → 呼び出し:test-debugger(エージェント)
ユーザー:「最後のテスト実行の xcresult を解析してください」 → 呼び出し:test-runner(エージェント)
ユーザー:「テストの失敗スクリーンショットをエクスポートしてください」 → 呼び出し:test-runner(エージェント)
ユーザー:「Xcode 26 で UI オートメーションを記録するにはどうすればよいですか?」 → 呼び出し:axiom-ui-recording
ユーザー:「多言語テストにテストプランを使うにはどうすればよいですか?」 → 呼び出し:axiom-ui-recording
ユーザー:「XCUITests を書かずにアプリを自動化できますか?」 → 呼び出し:simulator-tester(エージェント)+ axiom-axe-ref
ユーザー:「AXe を使ってボタンをタップするにはどうすればよいですか?」 → 呼び出し:axiom-axe-ref(simulator-tester 経由)
ユーザー:「テストの品質上の問題を監査してください」
→ 呼び出し:testing-auditor エージェント
ユーザー:「Swift Testing に移行すべきですか?」
→ 呼び出し:testing-auditor エージェント