Communitygithub.com

Danielrami703/Swift-Concurrency-Agent-Skill

🚀 AIコーディングツールを強化し、Swift 6+向けの安全な並行処理パターンを提供します。パフォーマンスと移行サポートに焦点を当てたエージェントスキル形式です。

Swift-Concurrency-Agent-Skill とは?

このスキルは、AIエージェント(Claude Code、Cursor、Codexなど)がSwift 6以降のコードベースで安全かつ効率的な並行処理(Swift Concurrency)を実装・提案するための知識とガイドラインを提供します。Swiftのasync/await、アクター、Taskグループ、Sendableプロトコルといった最新の並行処理パターンを活用し、従来のクロージャベースの非同期コードやGCDからの移行を支援します。また、コンパイラのデータ競合チェックを最大限に活用するためのベストプラクティスや、パフォーマンスを考慮した並行処理設計のパターンも含まれています。開発者はこのスキルを使うことで、デッドロックやデータ競合のリスクを減らしつつ、Swift Concurrencyへのスムーズな移行が可能になります。

対応~Claude Code~Codex CLI~Cursor
npx skills add Danielrami703/Swift-Concurrency-Agent-Skill

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

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
  • その他、カスタムエージェント

使用方法

  1. エージェントにSwiftのコード(ファイルまたはプロジェクト全体)を読み込ませます。
  2. 以下のような指示を与えます。
    • "このコードをSwift Concurrencyに変換してください"
    • "データ競合の可能性がある場所を特定し、アクターで保護してください"
    • "パフォーマンスを改善するための並行処理パターンを提案してください"
  3. エージェントがスキルの知識に基づいて、適切なコードと説明を生成します。

例

例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でお願いします。

ライセンス

MIT

関連スキル