mcpField
A
axiom-ios-testing

axiom-ios-testing

github.com/charleswiltgenテスト・品質1.2k238 回インストール今日更新
リポジトリ

axiom-ios-testing について

iOS開発者向けのテストルータースキルです。テスト設計、信頼性、速度、実行に関する質問を、専門スキルやエージェントへ振り分けます。Swift Testing、XCTest/XCUITest、非同期テスト、コマンドラインの手順を扱います。

主な機能

  1. 01ニーズに応じてテスト質問を振り分け
  2. 02Swift TestingとXCTestの選択を案内
  3. 03非同期テストや不安定なテストの調査を案内
  4. 04コマンドライン実行をtest-runnerへ案内
  5. 05UI自動化とテスト監査を網羅

活用シーン

  1. 01新しいユニットテストやUIテストの方式選定
  2. 02CIで断続的に失敗するテストの指針探し
  3. 03非同期テストコードのパターン選択
  4. 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 を使用)


判断ツリー

  1. ユニットテスト/Swift Testing を作成する? → swift-testing
  2. UI テスト/XCUITest を作成する? → ui-testing
  3. async/await コードをテストする? → testing-async
  4. 不安定なテスト/競合状態(XCUITest)? → ui-testing
  5. 不安定なテスト/競合状態(Swift Testing)? → test-failure-analyzer(エージェント)
  6. テストがクラッシュする/環境が間違っている? → xcode-debugging(ios-build 経由)
  7. テストが遅い/swift test を使いたい? → swift-testing(戦略 1:パッケージの切り出し)
  8. CLI からテストを実行する/結果を解析する? → test-runner(エージェント)
  9. 失敗するテストを自動的に修正する? → test-debugger(エージェント)
  10. テスト品質を監査したい(不安定なパターン、移行など)? → testing-auditor(エージェント)
  11. UI 操作を記録する(Xcode 26)? → ui-recording
  12. 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 エージェント

コメント