mcpField
S
swift-data

swift-data

github.com/pproencaデータ・データベース220265 回インストール11 週間前に更新
リポジトリ

swift-data について

swift-data は、clinic のモジュール型 MVVM-C アーキテクチャでデータ層を構築する開発者向けの SwiftData ガイドです。モデル、永続化、同期、エラー処理を扱い、SwiftData の実装を Data 層に集約します。

主な機能

  1. 01Domain 層と Data 層の分離
  2. 02SwiftData エンティティとドメインモデルの対応
  3. 03リポジトリ経由の永続化指針
  4. 04オフライン優先の同期と競合処理
  5. 05スキーマ移行とプレビューの実践

活用シーン

  1. 01SwiftData モデルとリポジトリの設計
  2. 02キュー書き込みとバックグラウンド同期の構築
  3. 03ストア障害やスキーマ移行への対応
  4. 04分離されたインメモリプレビューの作成

インストール

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

$npx skills add https://github.com/pproenca/dot-skills --skill swift-data

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

metadata.json
assets/templates/
_template.md
references/
_sections.md
crud-cancel-delete.md
crud-delete-indexset.md
crud-dismiss-save.md
crud-edit-button.md
crud-insert-context.md
crud-save-error-handling.md
crud-sheet-creation.md
crud-undo-cancel.md
model-class-for-persistence.md
model-computed-properties.md
model-custom-types.md
model-defaults.md
model-domain-mapping.md
model-external-storage.md
model-identifiable.md
model-initializer.md
model-transient.md
persist-app-group.md
persist-autosave.md
persist-container-error-recovery.md
persist-container-setup.md
persist-context-environment.md
persist-enumerate-batch.md
persist-identifier-transfer.md
persist-in-memory-config.md
persist-model-actor.md
persist-model-macro.md

詳細

SwiftData のベストプラクティス — モジュール型 MVVM-C データレイヤー

クリニックのモジュール型 MVVM-C スタックに沿った、SwiftData の包括的なデータモデリング、永続化、同期アーキテクチャ、エラー処理のガイドです。

アーキテクチャとの整合性

このスキルでは、swift-ui-architect が定めるものと同じモジュール型アーキテクチャを適用します。

┌───────────────────────────────────────────────────────────────┐
│ Feature modules: View + ViewModel, no SwiftData imports       │
├───────────────────────────────────────────────────────────────┤
│ Domain: models + repository/coordinator/error protocols        │
├───────────────────────────────────────────────────────────────┤
│ Data: @Model entities, SwiftData stores, repository impls,     │
│ remote clients, retry executor, sync queue, conflict handling  │
└───────────────────────────────────────────────────────────────┘

重要な原則: SwiftData の型(@Model、ModelContext、@Query、FetchDescriptor)は、Data 専用の実装コードに配置します。Feature の View/ViewModel は、Domain の型とプロトコル依存関係を使用します。

クリニックのアーキテクチャ契約(iOS 26 / Swift 6.2)

このスキルのすべてのガイダンスは、クリニックのモジュール型 MVVM-C アーキテクチャを前提としています。

  • Feature モジュールがインポートするのは Domain と DesignSystem のみです(Data や兄弟 Feature はインポートしません)
  • App ターゲットは集約点であり、DependencyContainer、具象コーディネーター、Route Shell の配線を所有します
  • Domain は純粋な Swift を保ち、モデルに加えて、リポジトリ、*Coordinating、ErrorRouting、AppError の契約を定義します
  • Data は SwiftData/ネットワーク/同期/再試行/バックグラウンド I/O を所有し、Domain のプロトコルを実装します
  • 読み取り/書き込みフローでは、デフォルトで stale-while-revalidate 読み取りと楽観的なキュー方式の書き込みを使用します
  • ViewModel はリポジトリプロトコルを直接呼び出します(デフォルトのユースケース/インタラクターレイヤーは設けません)

適用する場面

以下の場合に、このガイドラインを参照してください。

  • @Model エンティティクラスを定義し、Domain の構造体にマッピングする
  • Data レイヤーで ModelContainer と ModelContext を設定する
  • SwiftData を基盤とするリポジトリプロトコルを実装する
  • stale-while-revalidate リポジトリ読み取り(AsyncStream)を記述する
  • 楽観的な書き込みと、キュー方式の同期操作を実装する
  • エンティティ間のリレーションシップ(一対多、逆方向)を設定する
  • API から取得し、同期コーディネーター経由で SwiftData に永続化する
  • 保存失敗、ストアの破損、マイグレーションエラーを処理する
  • AppError の特性を、一元化されたエラー UI インフラストラクチャにルーティングする
  • サンプルデータを使ったプレビュー用インフラストラクチャを構築する
  • アプリのアップデートに向けてスキーマのマイグレーションを計画する

ワークフロー

SwiftData を使用する機能を設計またはリファクタリングする場合は、次のワークフローを使用してください。

  1. Domain の設計:検証ルールや計算ルールを備えた Domain の構造体(Trip、Friend)を定義します(model-domain-mapping、state-business-logic-placement を参照)
  2. エンティティの設計:マッピングメソッドを備えた @Model エンティティクラスを定義します(model-*、model-domain-mapping を参照)
  3. リポジトリプロトコル:Domain レイヤーで定義し、Data レイヤーで SwiftData を使って実装します(persist-repository-wrapper を参照)
  4. コンテナの配線:エラーリカバリーを設定し、アプリの境界で ModelContainer を一度だけ構成します(persist-container-setup、persist-container-error-recovery を参照)
  5. 依存性注入:リポジトリプロトコルを @Environment 経由で注入します(state-dependency-injection を参照)
  6. ViewModel:リポジトリプロトコルに処理を直接委譲する @Observable ViewModel を作成します(state-query-vs-viewmodel を参照)
  7. CRUD フロー:すべての挿入/削除/更新を ViewModel -> Repository 経由にします(crud-* を参照)
  8. 同期アーキテクチャ:書き込みをキューに入れ、再試行ポリシーを備えた同期コーディネーター経由で実行します(sync-* を参照)
  9. リレーションシップ:多対リレーションシップを配列としてモデル化し、削除ルールを定義します(rel-* を参照)
  10. プレビュー:高速に反復できるよう、メモリ内コンテナとサンプルデータを作成します(preview-* を参照)
  11. スキーマの進化:バージョン付きスキーマでマイグレーションを計画します(schema-* を参照)

トラブルシューティング

  • データが永続化されない -> persist-model-macro、persist-container-setup、persist-autosave、schema-configuration
  • バックグラウンドでのインポート後にリストが更新されない -> query-background-refresh、persist-model-actor
  • リストが更新されない(同じコンテキスト内) -> query-property-wrapper、state-wrapper-views
  • API 同期で重複が発生する -> schema-unique-attributes、sync-conflict-resolution
  • モデル変更後の起動時にアプリがクラッシュする -> schema-migration-recovery、persist-container-error-recovery
  • 保存の失敗によってデータが通知なく失われる -> crud-save-error-handling
  • ネットワークからのデータが古い -> sync-offline-first、sync-fetch-persist
  • ウィジェット/拡張機能からデータを参照できない -> persist-app-group、schema-configuration
  • データビューのアーキテクチャパターンを選択する -> state-query-vs-viewmodel、persist-repository-wrapper

優先度別ルールカテゴリ

優先度カテゴリ影響度プレフィックス
1データモデリングCRITICALmodel-
2永続化のセットアップCRITICALpersist-
3クエリとフィルタリングHIGHquery-
4CRUD 操作HIGHcrud-
5同期とネットワークHIGHsync-
6リレーションシップMEDIUM-HIGHrel-
7SwiftUI の状態フローMEDIUM-HIGHstate-
8スキーマとマイグレーションMEDIUM-HIGHschema-
9サンプルデータとプレビューMEDIUMpreview-

クイックリファレンス

1. データモデリング(CRITICAL)
2. 永続化のセットアップ(CRITICAL)
3. クエリとフィルタリング(高)
4. CRUD 操作(高)
  • crud-insert-context - リポジトリの実装を通じてモデルを挿入する
  • crud-delete-indexset - onDelete から渡される IndexSet を使って、リポジトリ経由で削除する
  • crud-sheet-creation - ViewModel を通じて、対象を絞ったデータ作成にシートを使用する
  • crud-cancel-delete - 保存時にのみ永続化して、孤立レコードを防ぐ
  • crud-undo-cancel - 元に戻す機能を有効にして、編集のキャンセルに使用する
  • crud-edit-button - リスト管理用に EditButton を提供する
  • crud-dismiss-save - ViewModel の保存完了後にモーダルを閉じる
  • crud-save-error-handling - ユーザーにフィードバックを提示して、リポジトリの保存失敗に対処する
5. 同期とネットワーク(高)
  • sync-fetch-persist - 注入された同期サービスを使って API データを取得し、永続化する
  • sync-offline-first - リポジトリからの読み取りとバックグラウンド同期を使って、オフラインファーストのアーキテクチャを設計する
  • sync-conflict-resolution - 双方向同期の競合解決を実装する
6. リレーションシップ(中〜高)
  • rel-optional-single - オプショナルなリレーションシップにはオプショナル型を使用する
  • rel-array-many - 1 対多のリレーションシップには配列を使用する
  • rel-inverse-auto - SwiftData による逆リレーションシップの自動管理を利用する
  • rel-delete-rules - 所有するリレーションシップにカスケード削除ルールを設定する
  • rel-explicit-sort - リレーションシップの配列を明示的にソートする
7. SwiftUI の状態フロー(中〜高)
8. スキーマとマイグレーション(中〜高)
9. サンプルデータとプレビュー(中)

使用方法

詳しい説明とコード例については、各リファレンスファイルをお読みください。

リファレンスファイル

ファイル説明
references/_sections.mdカテゴリーの定義と順序
assets/templates/_template.md新しいルール用のテンプレート
metadata.jsonバージョンとリファレンス情報

コメント