mcpField
S
swift-expert

swift-expert

github.com/404kidwiz開発132 回インストール
リポジトリ

swift-expert について

AppleプラットフォームのネイティブアプリやSwiftのサーバーアプリを開発・保守するためのスキルです。SwiftUI、並行処理、パフォーマンス、システムフレームワーク連携、テストを扱い、Objective-CやUIKitからの移行も支援します。

主な機能

  1. 01SwiftUIアプリ開発
  2. 02Swiftの並行処理パターン
  3. 03パフォーマンス分析と最適化
  4. 04Appleフレームワーク連携
  5. 05XCTestとXCUITestによるテスト

活用シーン

  1. 01iOSまたはmacOSネイティブアプリの開発
  2. 02UIKitやObjective-Cコードの移行
  3. 03コールバックからasync/awaitへの変換
  4. 04アプリ起動やスクロール性能の分析

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/404kidwiz/claude-supercode-skills --skill swift-expert

インストール後、Claude Code で/swift-expertを入力して読み込まれたか確認します。

詳細

Swift エキスパート

目的

Swift 6、SwiftUI、最新の並行処理パターンを使用したネイティブ iOS/macOS/visionOS アプリケーションを専門とする、Apple エコシステム開発の専門知識を提供します。Apple プラットフォーム全体でシステムと深く連携する、高性能なネイティブアプリケーションを構築します。

使用する場面

  • SwiftUI と SwiftData を使用してネイティブ iOS/macOS アプリを構築する
  • レガシーな Objective-C/UIKit コードを最新の Swift に移行する
  • Actor と構造化 Task を使用した高度な並行処理を実装する
  • パフォーマンスを最適化する(Instruments、メモリグラフ、起動時間)
  • システムフレームワーク(HealthKit、HomeKit、WidgetKit)を統合する
  • visionOS(空間コンピューティング)向けに開発する
  • Swift のサーバーサイドアプリケーションを作成する(Vapor、Hummingbird)

例

例 1:最新の SwiftUI アーキテクチャ

シナリオ: レガシーな UIKit アプリを最新の SwiftUI で書き直します。

実装:

  1. Combine を使用した MVVM アーキテクチャを採用しました
  2. 一貫性を保つため、再利用可能な ViewComponents を作成しました
  3. 適切な状態管理を実装しました
  4. 包括的なアクセシビリティサポートを追加しました
  5. プレビュー主導の開発ワークフローを構築しました

結果:

  • UIKit 版よりコード量を 50% 削減
  • テスト容易性が向上(ViewModels を簡単にテスト可能)
  • アクセシビリティが改善(VoiceOver をサポート)
  • Xcode Previews によって開発を高速化
例 2:Swift 並行処理への移行

シナリオ: コールバックベースのコードを async/await に変換します。

実装:

  1. すべての完了ハンドラーパターンを特定しました
  2. 必要に応じて @MainActor を使用した async ラッパーを作成しました
  3. 並列処理に構造化並行処理を実装しました
  4. throw/catch による適切なエラー処理を追加しました
  5. 共有状態の保護に actor を使用しました

結果:

  • ボイラープレートコードを 70% 削減
  • コールバック地獄と競合状態を解消
  • コードの可読性と保守性が向上
  • 構造化されたタスクによりメモリ管理が改善
例 3:パフォーマンスの最適化

シナリオ: 起動時間の遅さとスクロールのカクつきを改善します。

実装:

  1. Instruments を使ってアプリの起動をプロファイリングしました
  2. 負荷の高いイニシャライザーを特定し、実行を遅らせました
  3. リソースに遅延読み込みを実装しました
  4. 適切なキャッシュを使用して画像を最適化しました
  5. ビュー階層の複雑さを軽減しました

結果:

  • 起動時間を 4 秒から 1.2 秒に短縮
  • スクロールが安定して 60fps に
  • メモリ使用量を 40% 削減
  • App Store の評価が向上

ベストプラクティス

SwiftUI 開発
  • MVVM アーキテクチャ:関心事を明確に分離する
  • 状態管理:適切な @StateObject/@ObservedObject を使用する
  • パフォーマンス:遅延読み込みと適切な Equatable を活用する
  • アクセシビリティ:最初から組み込む
Swift の並行処理
  • 構造化並行処理:Task と TaskGroup を使用する
  • Actor:actor で共有状態を保護する
  • MainActor:UI の更新を適切に処理する
  • エラー処理:包括的な throw/catch パターンを使用する
パフォーマンス
  • Instruments:定期的にプロファイリングし、推測に頼らない
  • 遅延読み込み:コストの高い処理を後回しにする
  • メモリ管理:強参照サイクルに注意する
  • 画像の最適化:適切な形式、キャッシュ、サイズを使用する
プラットフォーム連携
  • システムフレームワーク:適切な Apple フレームワークを使用する
  • プライバシー:App Store のプライバシー要件に従う
  • 拡張機能:ウィジェットやショートカットなどをサポートする
  • VisionOS:空間コンピューティングのパターンを考慮する

次の場合は呼び出さないでください:

  • React Native/Flutter でクロスプラットフォームアプリを構築する場合 → mobile-app-developer を使用
  • 単純なシェルスクリプトを書く場合(Swift スクリプトが特に必要な場合を除く) → bash または python-pro を使用
  • ゲームアセットを設計する場合 → game-developer を使用(ただし、Metal/SceneKit は対象範囲内です)


主な機能

Swift 開発
  • SwiftUI を使用したネイティブ iOS/macOS アプリケーションの構築
  • 高度な Swift 機能(Actor、async/await、ジェネリクス)の実装
  • SwiftData と Combine による状態管理
  • Instruments を使用したパフォーマンスの最適化
Apple プラットフォームとの統合
  • システムフレームワーク(HealthKit、HomeKit、WidgetKit)の統合
  • visionOS および空間コンピューティング向けの開発
  • アプリの配布管理(App Store、TestFlight)
  • プライバシーとセキュリティのベストプラクティスの実装
並行処理とパフォーマンス
  • Swift 6 の並行処理パターンの実装
  • メモリ管理とリテインサイクルの防止
  • プロファイリングツールを使用したパフォーマンス問題のデバッグ
  • アプリの起動時間とバッテリー消費の最適化
テストと品質
  • XCTest を使用した単体テストの作成
  • XCUITest を使用した UI テストの実装
  • テストカバレッジと品質指標の管理
  • Apple プラットフォーム向け CI/CD の設定


ワークフロー 2:Swift 6 の並行処理(アクター)

目標: ロックを使わずに、スレッドセーフなキャッシュを管理します。

手順:

  1. アクターを定義する

    actor ImageCache {
        private var cache: [URL: UIImage] = [:]
    
        func image(for url: URL) -> UIImage? {
            return cache[url]
        }
    
        func store(_ image: UIImage, for url: URL) {
            cache[url] = image
        }
    
        func clear() {
            cache.removeAll()
        }
    }
    
  2. 使用方法(非同期コンテキスト)

    class ImageLoader {
        private let cache = ImageCache()
    
        func load(url: URL) async throws -> UIImage {
            if let cached = await cache.image(for: url) {
                return cached
            }
    
            let (data, _) = try await URLSession.shared.data(from: url)
            guard let image = UIImage(data: data) else {
                throw URLError(.badServerResponse)
            }
    
            await cache.store(image, for: url)
            return image
        }
    }
    


4. パターンとテンプレート

パターン 1:依存性注入(環境)

ユースケース: SwiftUI の階層にサービスを注入します。

// 1. Define Key
private struct AuthKey: EnvironmentKey {
    static let defaultValue: AuthService = AuthService.mock
}

// 2. Extend EnvironmentValues
extension EnvironmentValues {
    var authService: AuthService {
        get { self[AuthKey.self] }
        set { self[AuthKey.self] = newValue }
    }
}

// 3. Use
struct LoginView: View {
    @Environment(\.authService) var auth
    
    func login() {
        Task { await auth.login() }
    }
}
パターン 2:コーディネーター(ナビゲーション)

ユースケース: ナビゲーションロジックを View から切り離します。

@Observable
class Coordinator {
    var path = NavigationPath()

    func push(_ destination: Destination) {
        path.append(destination)
    }

    func pop() {
        path.removeLast()
    }
    
    func popToRoot() {
        path.removeLast(path.count)
    }
}

enum Destination: Hashable {
    case detail(Int)
    case settings
}
パターン 3:Result Builder(DSL)

ユースケース: API リクエストを設定するためのカスタム DSL を作成します。

@resultBuilder
struct RequestBuilder {
    static func buildBlock(_ components: URLQueryItem...) -> [URLQueryItem] {
        return components
    }
}

func makeRequest(@RequestBuilder _ builder: () -> [URLQueryItem]) {
    let items = builder()
    // ... construct URL
}

// Usage
makeRequest {
    URLQueryItem(name: "limit", value: "10")
    URLQueryItem(name: "sort", value: "desc")
}


6. 統合パターン

backend-developer:
  • 引き継ぎ:バックエンドが gRPC/REST 仕様を提供 → Swift Expert が Codable 構造体を生成します。
  • 連携:ページネーション(カーソル)とエラーエンベロープに対応します。
  • ツール:swift-openapi-generator。
ui-designer:
  • 引き継ぎ:デザイナーが Figma を提供 → Swift Expert が HStack/VStack を使って再現します。
  • 連携:デザインシステム(Color、Typography の拡張)を定義します。
  • ツール:Xcode Previews。
mobile-app-developer:
  • 引き継ぎ:React Native チームがネイティブモジュール(例:Apple Pay)を必要とする → Swift Expert が Swift-JS ブリッジを作成します。
  • 連携:ネイティブの UIView を React Native に公開します。

コメント