mcpField
I
ios-chaos-monkey

ios-chaos-monkey

github.com/pproencaテスト・品質218264 回インストール11 週間前に更新
リポジトリ

ios-chaos-monkey について

ios-chaos-monkeyは、iOSおよびSwift開発者向けのクラッシュ調査ガイドです。並行処理、メモリ、永続化などの実行時リスクを優先度順に扱い、修正前にテストでクラッシュを再現する手順を採用しています。

主な機能

  1. 01優先度付きのクラッシュリスク規則
  2. 02並行処理とデータ競合の確認
  3. 03メモリとデッドロックの指針
  4. 04非同期タスクとキャンセルの確認
  5. 05永続化とファイルI/Oのリスク
  6. 06テストでクラッシュを再現する手順

活用シーン

  1. 01Swiftの並行処理におけるデータ競合の監査
  2. 02非同期コードのキャンセルやContinuation漏れの確認
  3. 03永続化とファイルI/Oの障害リスクのテスト
  4. 04修正前に失敗するクラッシュテストを作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/pproenca/dot-skills --skill ios-chaos-monkey

インストール後、Claude Code で/ios-chaos-monkeyを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

metadata.json
assets/templates/
_template.md
references/
_sections.md
async-actor-hop-starvation.md
async-continuation-leak.md
async-detached-task-leak.md
async-missing-cancellation.md
async-task-group-error.md
async-unsafe-sendable.md
dead-actor-reentrancy.md
dead-mainactor-blocking.md
dead-queue-hierarchy.md
dead-recursive-lock.md
dead-semaphore-in-async.md
dead-sync-on-main.md
exhaust-file-descriptor-leak.md
exhaust-memory-warning-ignored.md
exhaust-thread-explosion.md
exhaust-unbounded-task-spawn.md
exhaust-urlsession-leak.md
io-concurrent-file-write.md
io-coredata-cross-thread.md
io-filemanager-race.md
io-keychain-thread-safety.md
io-plist-concurrent-mutation.md
io-swiftdata-background.md
mem-async-task-self-capture.md
mem-closure-retain-cycle.md
mem-combine-sink-retain.md
mem-delegate-strong-reference.md

詳細

iOS Chaos Monkey — クラッシュハンターのベストプラクティス

iOS および Swift アプリケーション向けの、敵対的なクラッシュハンティングガイドです。8 つのカテゴリにわたる 47 のルールを、クラッシュの深刻度順に優先付けしています。各ルールは TDD に従います。危険なコード、バグを実証する失敗テスト、そしてテストを通過させる修正の順に扱います。

Clinic Architecture Contract (iOS 26 / Swift 6.2)

このスキルのすべてのガイダンスは、Clinic のモジュラー MVVM-C アーキテクチャを前提としています。

  • フィーチャーモジュールがインポートできるのは Domain と DesignSystem のみです(Data や兄弟フィーチャーはインポートしません)
  • App ターゲットが集約地点となり、DependencyContainer、具象コーディネーター、Route Shell の配線を所有します
  • Domain は純粋な Swift を維持し、モデルに加えて、リポジトリ、*Coordinating、ErrorRouting、AppError の契約を定義します
  • Data は SwiftData/ネットワーク/同期/リトライ/バックグラウンド I/O を所有し、Domain プロトコルを実装します
  • 読み取り/書き込みフローでは、デフォルトで stale-while-revalidate による読み取りと、キューに入れた楽観的な書き込みを使用します
  • ViewModel はリポジトリプロトコルを直接呼び出します(デフォルトのユースケース/インタラクターレイヤーはありません)

適用する場面

次のような場合に、これらのガイドラインを参照してください。

  • Swift のデータ競合、デッドロック、並行処理によるクラッシュを調査するとき
  • 保持サイクルや解放済みメモリへのアクセスがないか、メモリ管理を監査するとき
  • キャンセルや継続のリークがないか、async/await コードをレビューするとき
  • ファイル I/O や CoreData/SwiftData の永続化レイヤーにストレステストを実施するとき
  • 修正を実装する前に、クラッシュを証明するテストを作成するとき

優先度別のルールカテゴリ

優先度カテゴリ影響度プレフィックス
1データ競合とスレッドセーフティCRITICALrace-
2メモリ破損とリークCRITICALmem-
3デッドロックとスレッド枯渇HIGHdead-
4Async/Await と構造化並行処理HIGHasync-
5ファイル I/O と永続化の破損MEDIUM-HIGHio-
6コレクションと状態の変更MEDIUMmut-
7リソース枯渇MEDIUMexhaust-
8Objective-C 相互運用の落とし穴LOW-MEDIUMobjc-

クイックリファレンス

1. データ競合とスレッドセーフティ(CRITICAL)
2. メモリ破損とリーク(CRITICAL)
  • mem-closure-retain-cycle - エスケープクロージャで強参照によって self を捕捉すると、保持サイクルが発生します
  • mem-timer-retain-cycle - Timer がターゲットを保持するため、検出困難な保持サイクルが発生します
  • mem-delegate-strong-reference - delegate への強参照によって解放が妨げられます
  • mem-unowned-crash - 所有者の解放後に unowned 参照へアクセスするとクラッシュします
  • mem-notification-observer-leak - 削除が必要になった後も NotificationCenter のオブザーバーがクロージャを保持します
  • mem-combine-sink-retain - キャンセラブルを保存せずに Combine の sink が self を保持します
  • mem-async-task-self-capture - Task が self を捕捉し、想定されたスコープを超えてライフタイムを延長します
3. デッドロックとスレッド枯渇(HIGH)
  • dead-sync-on-main - メインスレッドから DispatchQueue.main.sync を呼び出すと、即座にデッドロックします
  • dead-recursive-lock - 同じシリアルキューでロックを再帰的に取得します
  • dead-actor-reentrancy - Actor の再入によって予期しない処理の割り込みが発生します
  • dead-semaphore-in-async - 非同期コンテキスト内で Semaphore.wait() を呼び出すと、スレッドプールがデッドロックします
  • dead-queue-hierarchy - Dispatch キューのターゲット階層の逆転によってデッドロックが発生します
  • dead-mainactor-blocking - 重い同期処理によって MainActor がブロックされます
4. Async/Await と構造化並行性(HIGH)
  • async-missing-cancellation - Task.isCancelled の確認がないため、画面遷移後もリソースが無駄に消費されます
  • async-detached-task-leak - キャンセルハンドルのないデタッチされたタスクによって処理がリークします
  • async-task-group-error - TaskGroup が子タスクのエラーを黙って破棄します
  • async-continuation-leak - CheckedContinuation が一度も再開されず、待機中のタスクがリークします
  • async-actor-hop-starvation - ホットループ内で MainActor へのホップが過剰に発生すると、UI 更新が滞ります
  • async-unsafe-sendable - @unchecked Sendable によってデータ競合がコンパイラから隠されます
5. ファイル I/O と永続化データの破損(MEDIUM-HIGH)
6. コレクションと状態の変更(中)
  • mut-enumerate-and-mutate - 列挙中にコレクションを変更すると、実行時にクラッシュします
  • mut-kvo-dealloc-crash - 解放前にKVOオブザーバーを削除しないと、クラッシュします
  • mut-index-out-of-bounds - 境界チェックなしで配列インデックスにアクセスすると、クラッシュします
  • mut-force-unwrap - 本番環境でオプショナルを強制アンラップすると、値がnilの場合にクラッシュします
  • mut-enum-future-cases - 網羅性のないswitch文は、不明なenumケースでクラッシュします
7. リソースの枯渇(中)
8. Objective-C相互運用の落とし穴(低〜中)
  • objc-unrecognized-selector - @objcアノテーションがないと、認識されないセレクターでクラッシュします
  • objc-nsnull-in-json - デコードされたJSONコレクション内のNSNullにアクセスすると、クラッシュします
  • objc-bridge-type-mismatch - Swift/ObjCブリッジの型が一致しないと、実行時にクラッシュします
  • objc-dynamic-dispatch - dynamicキーワードがないと、メソッドスウィズリングが機能しません

使い方

詳しい説明とコード例については、各リファレンスファイルをお読みください。

リファレンスファイル

ファイル説明
references/_sections.mdカテゴリーの定義と順序
assets/templates/_template.md新しいルール用のテンプレート
metadata.jsonバージョンとリファレンス情報

コメント