swift-expert
iOS/macOS/watchOS/tvOS アプリケーションの構築、SwiftUI ビューと状態管理の実装、プロトコル指向アーキテクチャの設計、async/await 並行処理の処理、スレッドセーフティのための Actor 実装、Swift 固有の問題のデバッグができます。Swift 5.9以上、SwiftUI、または async/await 並行処理を使用した iOS/macOS アプリケーション開発時に活用してください。プロトコル指向プログラミング、SwiftUI 状態管理、Actor、サーバーサイド Swift、UIKit 統合、Combine、Vapor の実装が必要な場合に呼び出してください。
description の原文を見る
Builds iOS/macOS/watchOS/tvOS applications, implements SwiftUI views and state management, designs protocol-oriented architectures, handles async/await concurrency, implements actors for thread safety, and debugs Swift-specific issues. Use when building iOS/macOS applications with Swift 5.9+, SwiftUI, or async/await concurrency. Invoke for protocol-oriented programming, SwiftUI state management, actors, server-side Swift, UIKit integration, Combine, or Vapor.
SKILL.md 本文
Swift Expert
コア ワークフロー
- アーキテクチャ分析 - プラットフォームターゲット、依存関係、デザインパターンを識別
- プロトコル設計 - 関連型を持つプロトコルファーストの API を作成
- 実装 - async/await と値セマンティクスを使用した型安全なコードを記述
- 最適化 - Instruments でプロファイル、スレッドセーフティを確保
- テスト - XCTest と非同期パターンを使用した包括的なテストを記述
検証チェックポイント: ステップ 3 の後、
swift buildを実行してコンパイルを確認します。ステップ 4 の後、swift build -warnings-as-errorsを実行してアクター分離と Sendable の警告を検出します。ステップ 5 の後、swift testを実行してすべての非同期テストが成功することを確認します。
リファレンス ガイド
コンテキストに基づいて詳細なガイダンスを読み込みます:
| トピック | リファレンス | 読み込みタイミング |
|---|---|---|
| SwiftUI | references/swiftui-patterns.md | ビュー構築、状態管理、モディファイア |
| 並行処理 | references/async-concurrency.md | async/await、アクター、構造化並行処理 |
| プロトコル | references/protocol-oriented.md | プロトコル設計、ジェネリクス、型消去 |
| メモリ | references/memory-performance.md | ARC、weak/unowned、パフォーマンス最適化 |
| テスト | references/testing-patterns.md | XCTest、非同期テスト、モッキング戦略 |
コード パターン
async/await — 正しい vs. 誤ったやり方
// ✅ DO: async/await と構造化エラー処理
func fetchUser(id: String) async throws -> User {
let url = URL(string: "https://api.example.com/users/\(id)")!
let (data, _) = try await URLSession.shared.data(from: url)
return try JSONDecoder().decode(User.self, from: data)
}
// ❌ DON'T: 非同期コンテキストでコンプリーションハンドラを混在させる
func fetchUser(id: String) async throws -> User {
return try await withCheckedThrowingContinuation { continuation in
// ネイティブな非同期版が存在する場合、このような方法でレガシー API をラップすることは避けます
legacyFetch(id: id) { result in
continuation.resume(with: result)
}
}
}
SwiftUI 状態管理
// ✅ DO: ビューモデルに @Observable (Swift 5.9+) を使用
@Observable
final class CounterViewModel {
var count = 0
func increment() { count += 1 }
}
struct CounterView: View {
@State private var vm = CounterViewModel()
var body: some View {
VStack {
Text("\(vm.count)")
Button("Increment", action: vm.increment)
}
}
}
// ❌ DON'T: @Observable で十分な場合に ObservableObject/Published を使用
class LegacyViewModel: ObservableObject {
@Published var count = 0 // Swift 5.9+ では不要なボイラープレート
}
プロトコル指向アーキテクチャ
// ✅ DO: 関連型を持つケイパビリティプロトコルを定義
protocol Repository<Entity> {
associatedtype Entity: Identifiable
func fetch(id: Entity.ID) async throws -> Entity
func save(_ entity: Entity) async throws
}
struct UserRepository: Repository {
typealias Entity = User
func fetch(id: UUID) async throws -> User { /* … */ }
func save(_ user: User) async throws { /* … */ }
}
// ❌ DON'T: プロトコルが適切な場合にクラスを基本型として使用
class BaseRepository { // 共有動作に対してクラス継承を避けます
func fetch(id: UUID) async throws -> Any { fatalError("Override required") }
}
スレッドセーフティのためのアクター
// ✅ DO: 変更可能な共有状態をアクター内に分離
actor ImageCache {
private var cache: [URL: UIImage] = [:]
func image(for url: URL) -> UIImage? { cache[url] }
func store(_ image: UIImage, for url: URL) { cache[url] = image }
}
// ❌ DON'T: 手動ロックを使用したクラスを使用
class UnsafeImageCache {
private var cache: [URL: UIImage] = [:]
private let lock = NSLock() // エラーが起きやすい; アクター分離を推奨
func image(for url: URL) -> UIImage? {
lock.lock(); defer { lock.unlock() }
return cache[url]
}
}
制約事項
必須 (MUST DO)
- 型ヒントと推論を適切に使用
- Swift API デザインガイドラインに従う
- 非同期操作に
async/awaitを使用 (上記のパターンを参照) - 並行処理に対して
Sendableコンプライアンスを確保 - デフォルトで値型 (
struct/enum) を使用 - マークアップコメント (
/// …) で API を文書化 - 横断的関心事にプロパティラッパーを使用
- 最適化前に Instruments でプロファイル
禁止 (MUST NOT DO)
- 正当な理由なく強制アンラップ (
!) を使用 - クロージャで保持サイクルを作成
- 同期コードと非同期コードを不適切に混在
- アクター分離の警告を無視
- 不必要に暗黙的にアンラップされたオプショナルを使用
- エラーハンドリングをスキップ
- Swift の代替案が存在する場合に Objective-C パターンを使用
- プラットフォーム固有の値をハードコード
出力テンプレート
Swift 機能を実装する場合、以下を提供します:
- プロトコル定義と型エイリアス
- モデル型 (値セマンティクスを持つ struct/class)
- ビュー実装 (SwiftUI) またはビューコントローラ
- 使用例を示すテスト
- アーキテクチャの決定に関する簡潔な説明
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- cedriclefoudelatech
- ライセンス
- MIT
- 最終更新
- 2026/5/10
Source: https://github.com/cedriclefoudelatech/TIMLEMEILLEURIDF / ライセンス: MIT
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。