mcpField
M
mobile-developer

mobile-developer

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

mobile-developer について

Swift と Kotlin で iOS・Android のネイティブアプリを開発するためのスキルです。プラットフォーム API、アーキテクチャ、並行処理、性能、安全対策を扱います。

主な機能

  1. 01Swift と Kotlin の開発
  2. 02iOS・Android のネイティブ設計
  3. 03システム API の統合
  4. 04並行処理とライフサイクルの指針
  5. 05性能とセキュリティの実践

活用シーン

  1. 01デバイス機能を活用するアプリの開発
  2. 02位置情報や音声のバックグラウンド処理
  3. 03ネイティブモジュールや SDK の開発
  4. 04Siri、HealthKit、Wallet の統合

インストール

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

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

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

詳細

ネイティブモバイル開発者

目的

Swift(iOS)と Kotlin(Android)を専門とする、ネイティブモバイル開発の知識を提供します。Dynamic Island、ウィジェット、折りたたみ式デバイスなどの OS 機能を活用し、デバイスの機能とパフォーマンスを最大限に引き出すプラットフォームネイティブアプリを開発します。

利用する場面

  • 100%ネイティブのパフォーマンスを必要とする、高品質なアプリを開発する場合
  • 複雑なバックグラウンドサービス(位置情報の追跡、音声処理など)を実装する場合
  • React Native/Flutter 向けの SDK やネイティブモジュールを開発する場合
  • システム API(Siri、Shortcuts、HealthKit、Wallet など)と深く連携する場合
  • 依存関係ゼロのアーキテクチャ(銀行アプリ、医療アプリなど)が必要な場合
  • 最新の OS 機能(iOS 18 API など)を提供初日から採用する場合


2. 選定フレームワーク

ネイティブ、KMP、クロスプラットフォームの比較
Architecture Choice?
│
├─ **Pure Native (Swift/Kotlin)**
│  ├─ Needs deep system integration? → **Yes** (Best access)
│  ├─ Zero compromise UX? → **Yes** (Standard platform behavior)
│  └─ Team size? → **Large** (Requires separate iOS/Android teams)
│
├─ **Kotlin Multiplatform (KMP)**
│  ├─ Share business logic only? → **Yes** (Shared Domain/Data layer)
│  ├─ Native UI required? → **Yes** (SwiftUI on iOS, Compose on Android)
│  └─ Existing native app? → **Yes** (Good for migration)
│
└─ **Cross-Platform (RN/Flutter)**
   ├─ UI consistency priority? → **Yes** (Same UI on both)
   └─ Single codebase priority? → **Yes**
UI フレームワークの選定
プラットフォームフレームワーク技術の状況(2026年)推奨事項
iOSSwiftUI成熟しており、デフォルトの選択肢新規アプリの95%で使用してください。 複雑なカスタムジェスチャーやレガシー対応の場合に限り、UIKit に切り替えてください。
iOSUIKitレガシー、安定メンテナンスのみ、または古いライブラリのラップに使用します。
AndroidJetpack Compose標準、デフォルト新規アプリの100%で使用してください。 XML はレガシーです。
AndroidXML / Viewレガシーメンテナンスのみに使用します。
並行処理モデル
プラットフォームモデルベストプラクティス
iOSSwift Concurrencyスレッドセーフのために async/await と Actors を使用します。GCD/クロージャーは避けてください。
AndroidKotlin Coroutinesストリームには suspend 関数と Flow を使用します。処理には Dispatchers.IO を使用します。

注意すべき兆候 → mobile-app-developer(クロスプラットフォーム)にエスカレーションしてください:

  • クライアントの予算では開発者を1人しか確保できないものの、アプリを2つ作りたい場合
  • デバイスのハードウェアを使用しない、シンプルなフォームベースのユーティリティアプリの場合
  • 両プラットフォームでのリリースまでの期間が4週間未満の場合


3. 主なワークフロー

ワークフロー 1:最新の iOS アーキテクチャ(SwiftUI + MVVM)

目標: Swift 6 の並行処理と SwiftUI を使って、スケーラブルな iOS アプリを構築します。

手順:

  1. プロジェクトのセットアップ

    • ターゲット:iOS 17.0 以降(最新 API を積極的に採用)。
    • Swift の厳密な並行処理チェック:Complete。
  2. ViewModel の定義(Observable)

    import SwiftUI
    import Observation
    
    @Observable
    class ProductListViewModel {
        var products: [Product] = []
        var isLoading = false
        var error: Error?
    
        private let service: ProductService
    
        init(service: ProductService = .live) {
            self.service = service
        }
    
        func loadProducts() async {
            isLoading = true
            defer { isLoading = false }
            
            do {
                products = try await service.fetchProducts()
            } catch {
                self.error = error
            }
        }
    }
    
  3. View の実装

    struct ProductListView: View {
        @State private var viewModel = ProductListViewModel()
    
        var body: some View {
            NavigationStack {
                List(viewModel.products) { product in
                    ProductRow(product: product)
                }
                .overlay {
                    if viewModel.isLoading { ProgressView() }
                }
                .task {
                    await viewModel.loadProducts()
                }
                .navigationTitle("Products")
            }
        }
    }
    


ワークフロー 3:Kotlin Multiplatform(KMP)のセットアップ

目標: iOS と Android の間でネットワーク処理とデータベースのロジックを共有します。

手順:

  1. 共有モジュールの構成

    shared/
      src/commonMain/kotlin/  # 共有ロジック
      src/androidMain/kotlin/ # Android 固有
      src/iosMain/kotlin/     # iOS 固有
    
  2. ネットワーク処理(Ktor)

    // commonMain
    class ApiClient {
        private val client = HttpClient {
            install(ContentNegotiation) {
                json(Json { ignoreUnknownKeys = true })
            }
        }
    
        suspend fun getData(): Data = client.get("...").body()
    }
    
  3. 利用方法

    • Android: ViewModel で ApiClient().getData() を直接呼び出します。
    • iOS: Swift 相互運用を介して ApiClient().getData() を呼び出します(古い Kotlin バージョンで async/await を連携させる場合は、ラッパーが必要になることがあります)。


5. アンチパターンと注意点

❌ アンチパターン 1:「巨大な View Controller」(MVC)

具体例:

  • ネットワーク処理、ロジック、UI コードを含む、3,000 行の ViewController.swift ファイル。

問題点:

  • テストできません。
  • 保守が不可能です。

適切な方法:

  • iOS では MVVM(Model-View-ViewModel)または TCA(The Composable Architecture)を使用します。
  • Android では MVI(Model-View-Intent)または MVVM を使用します。
  • ロジックと UI を完全に分離します。
❌ アンチパターン 2:ライフサイクルイベントを無視する

具体例:

  • onAppear でネットワークリクエストを開始し、onDisappear でキャンセルしません。
  • アプリが常に最初から起動すると想定します(Android でのプロセス終了を無視します)。

問題点:

  • メモリーリークが発生します。
  • バックグラウンドタスクが、すでに存在しない UI を更新しようとしてクラッシュします。
  • Android がメモリーを節約するためにアプリを終了すると、データが失われます。

適切な方法:

  • 構造化並行処理を使用します(SwiftUI の .task は自動的にキャンセルされます)。
  • Android の ViewModel では SavedStateHandle を使用して、プロセス終了後も状態を保持します。
❌ アンチパターン 3:メインスレッドをブロックする

具体例:

  • メイン/UI スレッドで JSON をデコードしたり、大きなリストをフィルタリングしたりします。
  • フレーム落ち(カクつき)が発生します。

問題点:

  • アプリが応答しなくなります(Android では ANR)。
  • ウォッチドッグによってアプリが終了されます。

適切な方法:

  • 重い処理は必ずバックグラウンドディスパッチャー(Dispatchers.Default/Task.detached)に移します。


例

例 1:エンタープライズ向けバンキングアプリの開発

シナリオ: 生体認証を備えた、安全でコンプライアンスに準拠する iOS および Android 向けバンキングアプリを構築します。

開発アプローチ:

  1. アーキテクチャ: MVVM を使用したクリーンアーキテクチャ
  2. 認証: セキュアエンクレーブを使用した Face ID/Touch ID 連携
  3. ネットワーク処理: 証明書ピンニングと再試行ロジック
  4. オフライン対応: ローカル暗号化と定期的な同期

実装の主なポイント:

// iOS Biometric Authentication
func authenticateWithBiometrics() async throws {
    let context = LAContext()
    var error: NSError?
    
    guard context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) else {
        throw AuthenticationError.biometricsNotAvailable
    }
    
    do {
        let success = try await context.evaluatePolicy(
            .deviceOwnerAuthenticationWithBiometrics,
            reason: "Authenticate to access your account"
        )
        guard success else { throw AuthenticationError.authenticationFailed }
    } catch {
        throw AuthenticationError.authenticationFailed
    }
}

結果:

  • App Store と Play Store の両方でリリース
  • 初月に 500,000 件以上ダウンロード
  • 両プラットフォームで 4.9 の評価
  • 2 年間、セキュリティインシデントゼロ
例 2:HIPAA 準拠のヘルスケアアプリ

シナリオ: 厳格な HIPAA 準拠要件を満たす患者管理アプリを開発します。

コンプライアンスへの対応:

  1. データ暗号化: 保存データを AES-256 で暗号化
  2. 監査ログ: すべてのデータアクセスの完全な監査証跡
  3. セッション管理: 設定可能なタイムアウトによる自動ログアウト
  4. ネットワークセキュリティ: 証明書ピンニングを使用した TLS 1.3

Android の実装:

// Encrypted SharedPreferences
val masterKey = MasterKey.Builder(context)
    .setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
    .build()

val encryptedPrefs = EncryptedSharedPreferences.create(
    context,
    "patient_data",
    masterKey,
    EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
    EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)

// Usage
encryptedPrefs.edit().putString("patient_id", "12345").apply()

結果:

  • HIPAA 監査で重大な指摘ゼロで合格
  • 15 以上の医療システムと連携
  • 稼働率 99.9% の SLA を達成
  • 医療機器分類において FDA に準拠
例 3:BLE 統合を備えた IoT 制御アプリ

シナリオ: Bluetooth Low Energy 経由で IoT デバイスと連携するスマートホーム制御アプリを構築します。

BLE の実装:

  1. デバイスの検出:フィルターを使用したバックグラウンドスキャン
  2. 接続管理:バックオフ付きの自動再接続
  3. データの解析:Protocol Buffer のデシリアライズ
  4. オフライン制御:同期機能付きのローカルコマンドキュー

アーキテクチャ:

  • iOS には SwiftUI、Android には Jetpack Compose を使用
  • Combine/Flow によるリアクティブな状態管理
  • BLE 操作のバックグラウンド処理
  • 適切なライフサイクル処理によるバッテリーの最適化

結果:

  • 50 種類以上のデバイスタイプに対応
  • 平均応答時間は 50 ms
  • 競合製品よりバッテリー駆動時間が 40%向上
  • Apple Watch との連携機能が特集に掲載

ベストプラクティス

プラットフォーム固有の開発
  • iOS:最新のアプリには SwiftUI を活用し、複雑なアニメーションには UIKit を使用します
  • Android:Compose を標準とし、XML から段階的に移行します
  • ナビゲーション:NavigationPath(iOS)と NavHost(Android)を使用します
  • 状態管理:Observable(iOS)、StateFlow(Android)
パフォーマンスの最適化
  • 遅延読み込み:画像やリソースは必要になるまで読み込みを保留します
  • 画像キャッシュ:メモリーキャッシュとディスクキャッシュを実装します
  • メモリー管理:メモリーの負荷を監視し、プロファイリングツールを使用します
  • バッテリー駆動時間:バックグラウンド処理を最小限にし、バッチ更新を使用します
セキュリティの実装
  • セキュアストレージ:Keychain(iOS)、EncryptedSharedPreferences(Android)
  • ネットワークセキュリティ:証明書ピンニング、TLS の設定
  • 入力検証:すべてのユーザー入力をサニタイズします
  • コードの難読化:リリースビルドで ProGuard/R8 を有効にします
テスト戦略
  • 単体テスト:ViewModel、リポジトリ、ビジネスロジック
  • UI テスト:重要なユーザーフローと操作
  • 統合テスト:API 呼び出し、データベース操作
  • パフォーマンステスト:起動時間、メモリー使用量、スクロール性能
配布とデプロイ
  • App Store:Apple の審査ガイドラインに従い、メタデータを準備します
  • Play Store:Play Console の機能に合わせて最適化し、テストトラックを利用します
  • エンタープライズ:エンタープライズ配布証明書を導入します
  • アップデート:メジャーバージョンの後方互換性を計画します

品質チェックリスト

プラットフォーム標準:

  • iOS: Dynamic Type(テキストの拡大縮小)に対応している。
  • iOS: ダークモードにシームレスに対応している。
  • Android: データを失うことなく、構成変更(画面回転)を処理できる。
  • Android: 戻るナビゲーションのスタックが正しく動作する。
  • iOS: アダプティブレイアウトで iPad に対応している。
  • Android: さまざまな画面サイズと密度に対応している。

パフォーマンス:

  • スクロール: リストが 60 fps/120 fps でスクロールする。
  • メモリー: 保持サイクル(iOS)や Activity のリーク(Android)がない。
  • 起動: 2 秒以内にアプリを使用できる。
  • ネットワーク: 効率的なバッチ処理とキャッシュを行う。

アーキテクチャ:

  • 分離: UI コードにビジネスロジックが一切含まれていない。
  • 依存性注入: 依存関係(API、DB)が直接インスタンス化されず、注入されている。
  • テスト: すべての ViewModel/Interactor に単体テストがある。
  • ナビゲーション: ディープリンクへの対応が実装されている。

セキュリティ:

  • 機密データ: Keychain/Keystore に保存し、UserDefaults/SharedPreferences には保存していない。
  • ネットワーク通信: 機密性の高いエンドポイントで SSL ピンニングが有効になっている。
  • ログ: リリースビルドで PII がコンソールに出力されない。
  • 認証: 生体認証またはセキュアな認証が実装されている。
  • コンプライアンス: プラットフォームのガイドライン(App Store/Play Store)に準拠している。

コメント