swift-concurrency-pro
Swiftのコードを並行処理の正確性・モダンなAPI使用法・async/awaitの落とし穴の観点からレビューします。Swiftの並行処理コードの読み書きやレビューを行う際に使用してください。
description の原文を見る
Reviews Swift code for concurrency correctness, modern API usage, and common async/await pitfalls. Use when reading, writing, or reviewing Swift concurrency code.
SKILL.md 本文
Swift の並行処理コードの正確性、モダン API の使用法、およびプロジェクト規約への準拠状況をレビューします。本物の問題のみを報告し、細かい指摘や架空の問題は作りません。
レビュープロセス:
references/hotspots.mdを使用して既知の危険なパターンをスキャンし、検査優先度を決定します。references/new-features.mdを使用して Swift 6.2 の最新の並行処理動作をチェックします。references/actors.mdを使用してアクターの使用法を再入可能性と分離正確性で検証します。references/structured.mdを使用して構造化された並行処理が適切な場所で非構造化を優先していることを確認します。references/unstructured.mdを使用して非構造化タスク使用の正確性をチェックします。references/cancellation.mdを使用してキャンセルが正しく処理されていることを検証します。references/async-streams.mdを使用して非同期ストリームと継続の使用法を検証します。references/bridging.mdを使用して同期と非同期の世界を結ぶコードをチェックします。references/interop.mdを使用してレガシー並行処理マイグレーションをレビューします。references/bug-patterns.mdを使用して一般的な失敗モードと比較確認します。- プロジェクトが strict-concurrency エラーを持つ場合、
references/diagnostics.mdを使用して診断内容を修正にマップします。 - テストのレビュー時は、
references/testing.mdを使用して非同期テストパターンをチェックします。
部分的なレビューを行う場合は、関連する参照ファイルのみを読み込みます。
主要な指示
- Swift 6.2 以降を strict 並行処理チェック対応でターゲットとします。
- コードが複数のターゲットまたはパッケージにまたがる場合、動作が一致すると仮定する前に、それらの並行処理ビルド設定を比較します。
- 非構造化 (
Task {}) より構造化された並行処理 (タスクグループ) を優先します。 - 新しいコードでは Grand Central Dispatch より Swift 並行処理を優先します。GCD は低レベルコード、フレームワークの相互運用性、キューとロックが適切な性能が最優先な同期作業でも受け入れられます。これらをエラーとしてフラグを立てないでください。
- API が
async/awaitとクロージャベースの両方の変種を提供する場合、常にasync/awaitを優先します。 - 事前に確認せずにサードパーティの並行処理フレームワークを導入しないでください。
- コンパイラエラーを修正するために
@unchecked Sendableを提案しないでください。これは基本的な競合状態を修正せず診断を黙らせるだけです。アクター、値型、またはsendingパラメータを優先してください。唯一の正当な用途は、内部ロックを持ち、証明可能なスレッドセーフな型です。
出力形式
ファイルごとに検査結果を整理します。各問題について以下を記述してください:
- ファイルと該当行を記述します。
- 違反されたルールに名前を付けます。
- 簡潔なビフォー/アフターコード修正を示します。
問題のないファイルはスキップします。最初に実施すべき最も影響度の高い変更の優先度付きサマリーで終わります。
出力例:
DataLoader.swift
Line 18: アクター再入可能性 – await 越えで状態が変更されている可能性があります。
// Before
actor Cache {
var items: [String: Data] = [:]
func fetch(_ key: String) async throws -> Data {
if items[key] == nil {
items[key] = try await download(key)
}
return items[key]!
}
}
// After
actor Cache {
var items: [String: Data] = [:]
func fetch(_ key: String) async throws -> Data {
if let existing = items[key] { return existing }
let data = try await download(key)
items[key] = data
return data
}
}
Line 34: ループ内のタスク作成の代わりに withTaskGroup を使用します。
// Before
for url in urls {
Task { try await fetch(url) }
}
// After
try await withThrowingTaskGroup(of: Data.self) { group in
for url in urls {
group.addTask { try await fetch(url) }
}
for try await result in group {
process(result)
}
}
サマリー
- 正確性 (高): Line 18 のアクター再入可能性バグは、重複ダウンロードと強制アンラップクラッシュを引き起こす可能性があります。
- 構造 (中): Line 34 のループ内の非構造化タスクはキャンセルの伝播を失います。
例の終わり。
参照資料
references/hotspots.md- コードレビュー用のターゲット検索: 既知の危険なパターンと各パターン用に何をチェックするか。references/new-features.md- レビューアドバイスを変更する Swift 6.2 の変更: デフォルトアクター分離、分離された適合性、呼び出し元アクター非同期動作、@concurrent、Task.immediate、タスク命名、および優先度エスカレーション。references/actors.md- アクター再入可能性、共有状態アノテーション、グローバルアクター推論、および分離パターン。references/structured.md- ループでのタスクグループ、廃棄タスクグループ、並行処理制限。references/unstructured.md- Task vs Task.detached、Task {} がコード臭い場合。references/cancellation.md- キャンセル伝播、協調チェック、破損したキャンセルパターン。references/async-streams.md- AsyncStream ファクトリ、継続ライフサイクル、バックプレッシャー。references/bridging.md- チェック済み継続、レガシー API のラップ、@unchecked Sendable。references/interop.md- GCD からの移行、Mutex/ロック、完了ハンドラー、デリゲート、および Combine。references/bug-patterns.md- 一般的な並行処理失敗モードとその修正。references/diagnostics.md- Strict-concurrency コンパイラエラー、プロトコル適合性の修正、およびおそらくの救済策。references/testing.md- Swift Testing による非同期テスト戦略、競合検出、タイミングベーステストの回避。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- twostraws
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/twostraws/swift-concurrency-agent-skill / ライセンス: MIT
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。