coding-swift について
coding-swiftは、iOSやmacOSの開発を支援するSwift 6向けスキルです。並行処理、ジェネリクス、パッケージ管理、テストを扱います。
主な機能
- 01async/awaitとアクターによる並行処理
- 02ジェネリクスとプロパティラッパー
- 03Swift Package Managerの依存関係管理
- 04XCTestによる非同期コードのテスト
活用シーン
- 01非同期ネットワークリクエストを使うアプリの構築
- 02アクターによる共有状態の安全な管理
- 03Sendable準拠に向けたコードの更新
- 04SPM依存関係の編集とテスト実行
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill coding-swiftインストール後、Claude Code で/coding-swiftを入力して読み込まれたか確認します。
詳細
目的
このスキルは、並行処理、ジェネリクス、パッケージ管理など、iOS および macOS 開発向けの最新機能に重点を置き、Swift 6 プログラミングを AI が支援できるようにします。
使用する場面
非同期処理ベースのアプリの構築、スレッドセーフを実現するアクターの実装、iOS/macOS プロジェクトでの Swift Package Manager(SPM)依存関係の管理など、Swift 6 コードに関するタスクでこのスキルを使用します。既存コードの Sendable 準拠やジェネリクスの機能強化が必要な場合にも適用します。
主な機能
- 非同期処理:ネットワークリクエストの処理など、ブロッキングを伴わないコード実行に使用します。
- アクター:共有状態を安全に管理し、Sendable 準拠を確保します。
- ジェネリクス:ジェネリック構造体の定義など、型制約を使って再利用可能なコードを実現します。
- プロパティラッパー:検証など、プロパティ管理を簡素化します。
- 結果ビルダー:SwiftUI のビューなど、複雑な型を構築します。
- SPM:Package.swift ファイルを使って依存関係を管理します。
- テスト:非同期コードのユニットテストを XCTest で記述します。
使用パターン
タスクを実行する際は、Swift 6 の慣用的な書き方に沿ってコードを構成します。I/O 操作には非同期関数を使用し、共有状態はアクターでラップし、コレクションにはジェネリクスを活用します。SPM では Package.swift を編集してビルドを実行します。データ競合を避けるため、常に Sendable に準拠していることを確認してください。Xcode と統合する場合は、プロジェクト設定でコンパイラのバージョンを指定して、Swift 6 ツールチェーンでプロジェクトをコンパイルします。
よく使うコマンド/API
- Swift パッケージをビルドする:プロジェクトディレクトリで
swift build --configuration releaseを実行します。 - テストを実行する:SPM プロジェクトで
swift test --enable-test-discoveryを実行します。 - 非同期 API の使用:
func fetchData() async throws -> Data { ... }のような非同期関数を定義し、Task { let data = try await fetchData() }で呼び出します。 - アクターの例:
actor MyActor { var state: Int = 0; func update() { state += 1 } }でアクターを作成します。 - ジェネリクス API:
func swap<T>(_ a: inout T, _ b: inout T) { let temp = a; a = b; b = temp }のようなジェネリック関数を使用します。 - プロパティラッパー:
@propertyWrapper struct Clamped<Value: Comparable> { var wrappedValue: Value { ... } }のように定義します。 - SPM の設定:
let package = Package(name: "MyApp", dependencies: [.package(url: "https://github.com/apple/swift-algorithms", from: "1.0.0")])のような形式で Package.swift を編集します。
統合に関する注意
Xcode 15 以降などを使って Swift 6 ツールチェーンがインストールされていることを確認し、このスキルを統合します。外部サービスを利用する場合は、コード内の API 呼び出しで $SWIFT_API_KEY のような環境変数を使って認証情報を設定します。例:let apiKey = ProcessInfo.processInfo.environment["SWIFT_API_KEY"]。他のスキルと組み合わせる場合は、「Swift Packages」タブでパッケージを追加し、Xcode にインポートします。並行処理では、実行時エラーを避けるため、非同期コンテキストでアクターを使用してください。
エラー処理
Swift 6 では、次のように非同期関数で do-catch ブロックを使用してエラーを処理します。
do {
let result = try await someAsyncFunction()
} catch let error as NSError {
print("Error code: \(error.code)")
}
Sendable エラーが発生した場合は、関数に @Sendable を追加し、準拠していないクロージャを修正してください。SPM では、swift build の出力からビルドエラーを確認します。たとえば、「error: dependency not found」を探し、Package.swift を更新して解決します。クラッシュを防ぐため、オプショナルには必ず guard 文を使用してください。
具体的な使用例
- 非同期ネットワークリクエスト:API からデータを取得するには、次を使用します:
func fetchUser() async throws -> User { let url = URL(string: "https://api.example.com/user")!; let (data, _) = try await URLSession.shared.data(from: url); return try JSONDecoder().decode(User.self, from: data) }。タスク内で呼び出します:Task { do { let user = try await fetchUser(); print(user.name) } catch { print(error) } }。 - 共有状態を管理するアクター:カウンターを安全に管理するには、次のように定義します:
actor Counter { private var value = 0; func increment() { value += 1 } }。スレッドセーフを確保するため、次のように使用します:let counter = Counter(); Task { await counter.increment(); print(await counter.value) }。
グラフの関係性
- 関連項目:coding-general(クラスターを共有)、ios-development(タグ「ios」経由)、macos-app(タグ「macos」経由)、concurrency-handling(埋め込みヒント「concurrency actor async」経由)。
- クラスター:より広範なプログラミングスキルを対象とする「coding」クラスターに接続しています。
- タグ:「swift」タグが付いたスキルとは言語固有のタスクで、「spm」タグが付いたスキルとはパッケージ管理で関連付けられています。