Swift-Concurrency-Agent-Skill は何をしますか?
🚀 AIコーディングツールを強化し、Swift 6+向けの安全な並行処理パターンを提供します。パフォーマンスと移行サポートに焦点を当てたエージェントスキル形式です。
概要
このスキルは、Swift Concurrency(async/await、アクター、Task、Sendableなど)を活用した、安全で効率的な並行処理コードの生成とリファクタリングを支援します。Swift 6の厳格な並行性チェック(Strict Concurrency Checking)に対応し、データ競合のないコードを実現します。
主な機能
- 安全な並行パターンの提案: アクター、
Sendable、async let、TaskGroupなど、状況に応じた最適なパターンを提示します。 - 移行サポート: 従来の完了ハンドラや
DispatchQueueベースのコードを、Swift Concurrencyへ段階的に移行するためのガイドを提供します。 - パフォーマンス最適化: 並行処理におけるパフォーマンスのボトルネックを特定し、改善策を提案します。
- コンパイラチェックの活用: Swift 6のデータ競合検出機能を最大限に活用するためのベストプラクティスを提供します。
対応プラットフォーム
このスキルは、以下のAIエージェントおよびツールで使用できます。
- Claude Code
- Cursor
- Codex
- その他、カスタムエージェント
使用方法
- エージェントにSwiftのコード(ファイルまたはプロジェクト全体)を読み込ませます。
- 以下のような指示を与えます。
- "このコードをSwift Concurrencyに変換してください"
- "データ競合の可能性がある場所を特定し、アクターで保護してください"
- "パフォーマンスを改善するための並行処理パターンを提案してください"
- エージェントがスキルの知識に基づいて、適切なコードと説明を生成します。
例
例1: 完了ハンドラをasync/awaitに変換
Before (従来のパターン):
func fetchData(completion: @escaping (Result<Data, Error>) -> Void) {
URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error {
completion(.failure(error))
} else if let data = data {
completion(.success(data))
}
}.resume()
}
After (Swift Concurrency):
func fetchData() async throws -> Data {
let (data, _) = try await URLSession.shared.data(from: url)
return data
}
例2: アクターを使用した状態保護
actor DataManager {
private var cache: [String: Data] = [:]
func fetchData(for key: String) async throws -> Data {
if let cached = cache[key] {
return cached
}
let data = try await networkFetch(for: key)
cache[key] = data
return data
}
}
貢献
改善提案やバグ報告は、GitHubリポジトリのIssueまたはPull Requestでお願いします。