axiom-testing について
axiom-testing は Claude Code 向けの Swift テスト用スキルです。単体、非同期、UI、自動化テストのガイドへ案内し、失敗分析や品質監査にも対応します。
主な機能
- 01Swift Testing と XCTest のガイド
- 02非同期処理とコールバックのテストパターン
- 03UI と XCUITest のワークフロー
- 04テスト計画と CI の指針
- 05不安定なテストの分析と品質監査
活用シーン
- 01Swift Testing と XCTest の選択
- 02不安定な UI・非同期テストの調査
- 03シミュレーターなしでのテスト高速化
- 04カバレッジとテストの信頼性監査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ charleswiltgen/ axiom --skill axiom-testingインストール後、Claude Code で/axiom-testingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
skills/swift-testing.mdtest-failure-analyzer.mdtesting-async.mdtesting-auditor.mdui-recording.mdui-testing.mdxctest-automation.md詳細
テスト
テストの作成、テスト失敗のデバッグ、テストの高速化、テスト手法の選択など、テストに関するあらゆる質問では、必ずこのスキルを使用してください。
Claude Code にバンドルされているツール: command -v <tool> で何も見つからない場合(フックがオフ、または --bare の場合)は、ツール名の代わりに <plugin-root>/tools/<tool> を使用してください。<plugin-root> は、このスキルの Base directory for this skill: のパスから2階層上にあります。
Axiom エージェントを起動できませんか? このルーターがエージェントに誘導する場合は、その手順をここで実行してください。MCP 経由では、
axiom_get_agentが手順を返します。それ以外の場合は、以下のファイルを読み込んでください。必要なのはファイルの検索と読み取りだけです。ここで利用可能なもの:
skills/test-failure-analyzer.md、skills/testing-auditor.md。それ以外のエージェントについても、MCP 経由では
axiom_get_agentが手順を返します。axiom_xclog_*、axiom_xcsym_*、axiom_xcprof_*ツールを使って、エージェントの xclog、xcsym、xcprof の手順を実行してください。それ以外の場合は、Axiom のスキル内でskills/<agent>.mdを検索してください。見つからない場合は、このスイートのスキルを使い、PATH上にある Axiom のツールを利用して自分で作業してください。
クイックリファレンス
| 症状/タスク | 参照先 |
|---|---|
| 単体テストの作成、Swift Testing(@Test、#expect) | skills/swift-testing.md を参照 |
| シミュレーターなしでのテスト実行 | skills/swift-testing.md を参照 |
| パラメーター化テスト、タグ、特性 | skills/swift-testing.md を参照 |
| XCTest から Swift Testing への移行 | skills/swift-testing.md を参照 |
警告レベルの問題/テストのキャンセル — Issue.record(severity:)、Test.cancel(OS27) | skills/swift-testing.md を参照 |
| async/await 関数のテスト | skills/testing-async.md を参照 |
| コールバックの確認 | skills/testing-async.md を参照 |
| @MainActor テスト、並列実行 | skills/testing-async.md を参照 |
| UI テスト、XCUITest の作成 | skills/ui-testing.md を参照 |
UI テストから VoiceOver を操作する、読み上げ出力を検証する(OS27) | skills/ui-testing.md のパターン7を参照 |
システム経由での App Intents のテスト、AppIntentsTesting(OS27) | skills/ui-testing.md のパターン8を参照し、その後 axiom-integration(skills/app-intents-ref.md)を参照 |
| 条件に基づく待機パターン | skills/ui-testing.md を参照 |
| UI オートメーションの記録(Xcode 26) | skills/ui-testing.md を参照 |
| ネットワークコンディショニング、マルチファクターテスト | skills/ui-testing.md を参照 |
| リサイズ可能なアプリのテスト:寸法マトリックス、RTL/疑似ローカライズの起動引数、ライブリサイズのパス | skills/ui-testing.md を参照 |
| CI からの Face ID/Touch ID、向き、シミュレーター状態のテスト — devicectl | skills/ui-testing.md を参照 |
| XCUIElement クエリ、待機方法 | skills/xctest-automation.md を参照 |
| アクセシビリティ識別子、テストプラン | skills/xctest-automation.md を参照 |
| CI/CD でのテスト実行 | skills/xctest-automation.md を参照 |
| 記録/再生/レビューのワークフロー(Xcode 26) | skills/ui-recording.md を参照 |
| テストプランの複数構成での再生 | skills/ui-recording.md を参照 |
| 記録したテストの安定性向上 | skills/ui-recording.md を参照 |
生成 AI 機能のテスト — 出力は決定論的ではないため、#expect(result == expected) は成立しません(OS27) | 方法については axiom-ai(skills/foundation-models-evaluations.md)を参照し、その後 API については axiom-ai(skills/foundation-models-evaluations-ref.md)を参照 |
意思決定ツリー
digraph testing {
start [label="Testing task" shape=ellipse];
what [label="What kind of test?" shape=diamond];
start -> what;
what -> "skills/swift-testing.md" [label="unit tests,\nSwift Testing,\nfast tests"];
what -> "skills/testing-async.md" [label="testing async code,\ncallbacks,\nconfirmation"];
what -> "skills/ui-testing.md" [label="UI tests,\nflaky tests,\nrecording"];
what -> "skills/xctest-automation.md" [label="XCUITest patterns,\nelement queries"];
what -> "skills/ui-recording.md" [label="Xcode 26\nRecord/Replay/Review"];
what -> "axiom-ai (skills/foundation-models-evaluations.md)" [label="generative AI feature\n(nondeterministic output)"];
}
- 単体テスト/Swift Testing を作成する場合 →
skills/swift-testing.md - async/await コードをテストする場合 →
skills/testing-async.md - UI テスト/XCUITest/不安定なテストを作成する場合 →
skills/ui-testing.md - XCUIElement クエリ、待機、テストプラン、CI の場合 →
skills/xctest-automation.md - UI 操作を記録する場合(Xcode 26)→
skills/ui-recording.md - 不安定なテスト/競合状態(Swift Testing)の場合 → test-failure-analyzer(エージェント)
- テストがクラッシュする/環境が正しくない場合 → axiom-build を参照してください(skills/xcode-debugging.md)
- CLI からテストを実行する/結果を解析する場合 → test-runner(エージェント)
- 失敗したテストを自動で修正する場合 → test-debugger(エージェント)
- テスト品質の監査を行う場合 → testing-auditor(エージェント)または
/axiom:audit testing - XCUITest/AXe CLI を使わずに自動化する場合 → simulator-tester(エージェント)+ axiom-xcode-mcp を参照してください(skills/axe-ref.md)
- Foundation Models/生成機能をテストする場合 → axiom-ai(
skills/foundation-models-evaluations.md)で評価の考え方(データセットの設計、最適化目標とガードレールの違い、評価者のキャリブレーション)を確認し、その後 axiom-ai(skills/foundation-models-evaluations-ref.md)で API を確認してください。Evaluations フレームワーク(OS27)は.evaluates特性を通じて Swift Testing の内部で実行されます。Swift Testing に取って代わるものではありません。モデルは純粋関数ではないため、出力をデータセットに照らしてスコア化し、特定の文字列を一つずつ検証するのではなく、集約指標を基準に合否を判定します。
Swift Testing と XCTest の簡易ガイド
| 必要な用途 | 使用するもの |
|---|---|
| 単体テスト(ロジック、モデル) | Swift Testing |
| UI テスト(タップ、スワイプ、画面の検証) | XCUITest(XCTest) |
| システム経由で実行する App Intents(AppIntentsTesting) | XCTest を使用する UI Testing Bundle。Swift Testing を使用できるのは、文書化されていないビルド設定のオーバーライドを使う場合のみです |
| シミュレーターを使わないテスト | パッケージ/フレームワーク(いずれかのフレームワーク) |
| パラメーター化テスト | Swift Testing |
| パフォーマンス測定 | XCTest(XCTMetric) |
| Objective-C テスト | XCTest |
重要なパターン
Swift Testing(skills/swift-testing.md):
- @Test/@Suite マクロ、#expect/#require アサーション
- 反復的なテストをなくすためのパラメーター化テスト
- 高速なテストアーキテクチャ:パッケージ抽出、Host Application:None
- withMainSerialExecutor と TestClock を使った信頼性の高い非同期テスト
- XCTest からの移行ガイド(比較表)
- XCTestCase と Swift 6.2 MainActor の互換性修正
非同期テスト(skills/testing-async.md):
- 単一/複数のコールバックに対する confirmation
- 何も起きないことを検証する expectedCount: 0
- @MainActor によるテスト分離
- .timeLimit によるタイムアウト制御
- 並列実行時の注意点と .serialized
UI テスト(skills/ui-testing.md):
- 条件に基づく待機(sleep() の代わり)
- UI オートメーションの記録(Xcode 26)
- 3G/LTE テストのネットワーク環境調整
- 複数要因によるテスト(デバイスサイズ+ネットワーク速度)
- UI テスト失敗時のクラッシュデバッグ
XCUITest の自動化(skills/xctest-automation.md):
- accessibilityIdentifier による要素の識別
- 待機戦略(表示、非表示、操作可能)
- 複数構成のテスト向けテストプラン
- 並列実行による CI/CD 統合
UI 記録(skills/ui-recording.md):
- Xcode 26 の記録/再生/レビューのワークフロー
- 安定性を高めるための記録済みコードの改善
- クエリ選択のガイドライン
- 複数言語での再生に向けたテストプランの設定
自動スキャン
テスト品質の監査 → testing-auditor エージェントまたは /axiom:audit testing を起動します(テストカバレッジの形状を本番コードと照合し、不安定なパターンや速度の問題を検出し、未テストの重要な経路を特定し、テスト全体の健全性をスコア化します)
不安定なテストの分析 → test-failure-analyzer エージェントを起動します(Swift Testing で断続的な失敗を引き起こすパターン、たとえば confirmation の不足、共有可変状態、@MainActor の不足をスキャンします)
過度な合理化を避ける
| 考え | 実際 |
|---|---|
| 「簡単なテストの質問だから、スキルは必要ない」 | 適切なパターンを使えば、テストの負債を防げます。skills/swift-testing.md にコピーして使える解決策があります。 |
| 「XCTest は十分に理解している」 | 単体テストには Swift Testing のほうが大幅に優れています。移行ガイドも含まれています。 |
| 「テストは遅いけれど、問題ない」 | テストが速ければ TDD を実践できます。skills/swift-testing.md では、シミュレーターなしで実行する方法を紹介しています。 |
| 「sleep() を使って不安定なテストを修正しよう」 | sleep() はテストを遅くし、さらに不安定にします。skills/ui-testing.md では、条件に基づいて待機する方法を紹介しています。 |
| 「テストは後で追加しよう」 | 実装後に書いたテストでは、エッジケースを見落とします。 |
| 「モデルが正しい文字列を返すことを検証すれば、AI 機能をテストできる」 | モデルは純粋関数ではありません。このテストは類義語で失敗し、流暢な嘘では成功します。データセットを評価し、全体の指標を基準に判定します。axiom-ai(skills/foundation-models-evaluations.md)を参照してください。 |
| 「試してみたとき AI の出力は良かったので、テスト済みだ」 | いくつかのプロンプトを手作業で試しても何も測定できず、リグレッションも検出できません。Evaluations フレームワークは、まさにこのギャップを埋めるためにあります。 |
呼び出し例
ユーザー:「Swift で単体テストを書くにはどうすればよいですか?」
→ 参照:skills/swift-testing.md
ユーザー:「CI で UI テストが不安定です」
→ コードベースを確認:XCUIApplication/XCUIElement を使用していますか? → skills/ui-testing.md
→ コードベースを確認:@Test/#expect を使用していますか? → test-failure-analyzer(エージェント)
ユーザー:「不安定にならないように非同期コードをテストするにはどうすればよいですか?」
→ 参照:skills/testing-async.md
ユーザー:「XCTestExpectation に相当する Swift Testing の機能は何ですか?」
→ 参照:skills/testing-async.md
ユーザー:「テストの実行を速くしたい」
→ 参照:skills/swift-testing.md(戦略 1:パッケージの抽出)
ユーザー:「Swift Testing と XCTest のどちらを使うべきですか?」
→ 参照:skills/swift-testing.md(移行セクション)と、この判断ツリー
ユーザー:「Xcode 26 で UI オートメーションを記録するにはどうすればよいですか?」
→ 参照:skills/ui-recording.md
ユーザー:「テストを実行して、失敗したものを見せてください」 → 呼び出し:test-runner(エージェント)
ユーザー:「テストの品質上の問題を監査してください」 → 呼び出し:testing-auditor(エージェント)