swift-concurrency-expert
Swift 6.2以降のSwift Concurrencyのレビューと修正を行うスキルです。Swift Concurrencyの利用状況のレビュー、並行性コンプライアンスの改善、またはコンパイラエラーの修正を依頼された際に使用します。`Sendable`準拠の追加、`@MainActor`アノテーションの適用、アクター分離警告の解消、データ競合診断の修正、コールバックハンドラのasync/awaitへの移行などを具体的に対応します。
description の原文を見る
Swift Concurrency review and remediation for Swift 6.2+. Use when asked to review Swift Concurrency usage, improve concurrency compliance, or fix Swift concurrency compiler errors in a feature or file. Concrete actions include adding Sendable conformance, applying @MainActor annotations, resolving actor isolation warnings, fixing data race diagnostics, and migrating completion handlers to async/await.
SKILL.md 本文
Swift Concurrency Expert
概要
Swift 6.2+ コードベースの Swift Concurrency の問題を、actor isolation、Sendable の安全性、および最小限の動作変更で最新の concurrency パターンを適用することで、レビューおよび修正します。
ワークフロー
1. 問題の分類
- コンパイラ診断と問題のあるシンボルを正確に把握します。
- プロジェクトの concurrency 設定を確認します:Swift 言語バージョン (6.2+)、strict concurrency レベル、approachable concurrency (デフォルト actor isolation / main-actor-by-default) が有効かどうか。
- 現在の actor コンテキスト (
@MainActor、actor、nonisolated) とデフォルト actor isolation モードが有効かどうかを確認します。 - コードが UI に依存しているか、またはメインスレッド以外で実行する意図があるかを確認します。
2. 最小限の安全な修正を適用
既存の動作を保持しながら、データ競合の安全性を満たす編集を優先してください。
一般的な修正:
- UI に依存する型: 型または関連するメンバーに
@MainActorを注釈します。 - メインスレッド上の型でのプロトコル準拠: 準拠を isolated にします (例:
extension Foo: @MainActor SomeProtocol)。 - グローバル/静的状態:
@MainActorで保護するか、actor に移動します。 - バックグラウンド処理:
nonisolatedな型で@concurrentasync 関数に処理を移動するか、可変状態を保護するために actor を使用します。 - Sendable エラー: 不変/値型を優先します;Sendable 準拠は正しい場合のみ追加します;スレッド安全性を証明できない限り
@unchecked Sendableは回避します。
3. 修正を検証
- リビルドして、すべての concurrency 診断が解決され、新しい警告が導入されていないことを確認します。
- テストスイートを実行して、リグレッションをチェックします。concurrency の変更はビルドがクリーンでも微妙なランタイム問題を引き起こす可能性があります。
- 修正が新しい警告を生成する場合、各警告を新しい分類として扱い (ステップ 1 に戻る)、ビルドがクリーンでテストが成功するまで反復的に解決します。
例
UI に依存する型 — @MainActor を追加
// Before: ViewModel がメインスレッドからアクセスされていますが、
// actor isolation がないためデータ競合警告が出ます
class ViewModel: ObservableObject {
@Published var title: String = ""
func load() { title = "Loaded" }
}
// After: 型全体に注釈を付けます。すべての格納状態とメソッドが
// 自動的にメイン actor に isolation されます
@MainActor
class ViewModel: ObservableObject {
@Published var title: String = ""
func load() { title = "Loaded" }
}
プロトコル準拠の isolation
// Before: コンパイラエラー — SomeProtocol のメソッドが nonisolated ですが、
// 準拠する型が @MainActor です
@MainActor
class Foo: SomeProtocol {
func protocolMethod() { /* accesses main-actor state */ }
}
// After: 準拠スコープを @MainActor に設定して、
// 要件が正しい isolation コンテキスト内で満たされるようにします
@MainActor
extension Foo: SomeProtocol {
func protocolMethod() { /* safely accesses main-actor state */ }
}
@concurrent を使用したバックグラウンド処理
// Before: 重い計算がメイン actor をブロックします
@MainActor
func processData(_ input: [Int]) -> [Int] {
input.map { heavyTransform($0) } // メインスレッドで実行されます
}
// After: 重い処理をメイン actor から外し、結果を返します。
// 呼び出し元は結果を待機し、独自の actor に留まります
nonisolated func processData(_ input: [Int]) async -> [Int] {
await Task.detached(priority: .userInitiated) {
input.map { heavyTransform($0) }
}.value
}
// または、@concurrent async 関数を使用します (Swift 6.2+):
@concurrent
func processData(_ input: [Int]) async -> [Int] {
input.map { heavyTransform($0) }
}
参考資料
- Swift 6.2 の変更、パターン、および例については
references/swift-6-2-concurrency.mdを参照してください。 - プロジェクトが approachable concurrency モードにオプトインされている場合は
references/approachable-concurrency.mdを参照してください。 - SwiftUI 固有の concurrency ガイダンスについては
references/swiftui-concurrency-tour-wwdc.mdを参照してください。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- dimillian
- リポジトリ
- dimillian/skills
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/dimillian/skills / ライセンス: MIT
関連スキル
hugging-face-trackio
Trackioを使用してMLトレーニング実験を追跡・可視化できます。トレーニング中のメトリクスログ記録(Python API)、トレーニング診断のアラート発火、ログされたメトリクスの取得・分析(CLI)が必要な場合に活用してください。リアルタイムダッシュボード表示、Webhookを使用したアラート、HF Space同期、自動化向けのJSON出力に対応しています。
btc-bottom-model
ビットコインのサイクルタイミングモデルで、加重スコアリングシステムを搭載しています。日次パルス(4指標、32ポイント)とウィークリー構造(9指標、68ポイント)の2カテゴリーにわたる13の指標を追跡し、0~100のマーケットヒートスコアを算出します。ETFフロー、ファンディングレート、ロング/ショート比率、恐怖・貪欲指数、LTH-MVRV、NUPL、SOPR(LTH+STH)、LTH供給率、移動平均倍率(365日MA、200週MA)、週次RSI、出来高トレンドに対応します。市場サイクル全体を通じて買いと売りの両方の推奨を提供します。ビットコインの底値拾い、BTCサイクルポジション、買い時・売り時、オンチェーン指標、MVRV、NUPL、SOPR、LTH動向、ETFの流出入、ファンディングレート、恐怖指数、ビットコインが過熱状態か、マイナーコスト、暗号資産市場のセンチメント、BTCのポジションサイジング、「今ビットコインを買うべきか」「BTCが天井をつけているか」「オンチェーン指標は何を示しているか」といった質問の際にこのスキルを活用します。
protein_solubility_optimization
タンパク質の溶解性最適化 - タンパク質の溶解性を最適化します。タンパク質の特性を計算し、溶解性と親水性を予測し、有効な変異を提案します。タンパク質配列の特性計算、タンパク質機能の予測、親水性計算、ゼロショット配列予測を含むタンパク質エンジニアリング業務に使用できます。3つのSCPサーバーから4つのツールを統合しています。
research-lookup
Parallel Chat APIまたはPerplexity sonar-pro-searchを使用して、最新の研究情報を検索できます。学術論文の検索にも対応しています。クエリは自動的に最適なバックエンドにルーティングされるため、論文の検索、研究データの収集、科学情報の検証に活用できます。
tree-formatting
ggtree(R)またはiTOL(ウェブ)を使用して、系統樹の可視化とフォーマットを行います。系統樹を図として描画する際、ツリーレイアウトの選択、分類学に基づく枝やラベルの色付け、クレードの折りたたみ、サポート値の表示、またはツリーへのオーバーレイ追加が必要な場合に使用してください。系統推定(protein-phylogenyスキルを使用)やドメイン注釈(今後の独立したスキル)には使用しないでください。
querying-indonesian-gov-data
インドネシア政府の50以上のAPIとデータソースに接続できます。BPJPH(ハラール認証)、BOM(食品安全)、OJK(金融適正性)、BPS(統計)、BMKG(気象・地震)、インドネシア中央銀行(為替レート)、IDX(株式)、CKAN公開データポータル、pasal.id(第三者法MCP)に対応しています。インドネシア政府データを活用したアプリ開発、.go.idウェブサイトのスクレイピング、ハラール認証の確認、企業の法的適正性の検証、金融機関ステータスの照会、またはインドネシアMCPサーバーへの接続時に使用できます。CSRF処理、CKAN API使用方法、IP制限回避など、すぐに実行可能なPythonパターンを含んでいます。