swiftdata-pro について
swiftdata-proは、SwiftDataコードを書く・レビューする開発者向けのスキルです。プロジェクトやOSバージョンに応じて確認し、実際の問題だけを報告します。
主な機能
- 01SwiftDataコードのレビュー
- 02述語の安全性確認
- 03CloudKit固有ルールの適用
- 04iOS 18以降のインデックス確認
- 05iOS 26以降の継承確認
活用シーン
- 01SwiftDataモデル変更のレビュー
- 02述語の実行時リスク確認
- 03CloudKitモデル制約の評価
- 04OSバージョン別の指針適用
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ twostraws/ swiftdata-agent-skill --skill swiftdata-proインストール後、Claude Code で/swiftdata-proを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlassets/swiftdata-pro-icon.svgreferences/class-inheritance.mdcloudkit.mdcore-rules.mdindexing.mdpredicates.md詳細
SwiftData のコードを作成・レビューし、正確性、最新の API の使用、プロジェクトの規約への準拠を確認します。実際の問題だけを報告してください。細かい点を過度に指摘したり、問題をでっち上げたりしないでください。
レビューの手順:
references/core-rules.mdを使って、SwiftData の基本的な問題を確認します。references/predicates.mdを使って、述語が安全でサポートされていることを確認します。- プロジェクトで CloudKit を使用している場合は、
references/cloudkit.mdを使って、CloudKit 固有の制約を確認します。 - プロジェクトのターゲットが iOS 18 以降の場合は、
references/indexing.mdを使って、インデックス設定の機会を確認します。 - プロジェクトのターゲットが iOS 26 以降の場合は、
references/class-inheritance.mdを使って、クラスの継承パターンを確認します。
作業の一部だけを行う場合は、関連するリファレンスファイルのみを読み込んでください。
基本的な指示
- 最新の Swift 並行処理を使用し、Swift 6.2 以降を対象にしてください。
- ユーザーは全般的に SwiftData を使うことを強く希望しています。SwiftData では解決できない機能でない限り、Core Data の機能を提案しないでください。
- 事前に確認せず、サードパーティ製のフレームワークを追加しないでください。
- アプリの機能に応じたフォルダー構成を定め、一貫性のあるプロジェクト構成にしてください。
出力形式
ユーザーがレビューを依頼した場合は、問題をファイルごとに整理してください。各問題について:
- ファイル名と該当する行を示します。
- 違反しているルールの名前を示します。
- 修正前後のコードを簡潔に示します。
問題のないファイルは省略してください。最後に、優先度の高い変更から順にまとめを記載してください。
ユーザーがコードの作成または改善を依頼した場合は、上記と同じルールに従い、問題の指摘を返す代わりにコードを直接変更してください。
出力例:
Destination.swift
8 行目:リレーションシップに削除ルールを明示的に設定してください。
// Before
var sights: [Sight]
// After
@Relationship(deleteRule: .cascade, inverse: \Sight.destination) var sights: [Sight]
22 行目:述語で isEmpty == false を使わないでください。実行時にクラッシュします。代わりに ! を使ってください。
// Before
#Predicate<Destination> { $0.sights.isEmpty == false }
// After
#Predicate<Destination> { !$0.sights.isEmpty }
DestinationListView.swift
5 行目:@Query は SwiftUI ビュー内でのみ使用してください。
// Before
class DestinationStore {
@Query var destinations: [Destination]
}
// After
class DestinationStore {
var modelContext: ModelContext
func fetchDestinations() throws -> [Destination] {
try modelContext.fetch(FetchDescriptor<Destination>())
}
}
まとめ
- データ損失(高): Destination.swift の 8 行目で削除ルールが指定されていないため、Destination を削除すると sights が孤立します。
- クラッシュ(高): 22 行目の
isEmpty == falseは実行時にクラッシュします。代わりに!isEmptyを使ってください。 - 誤動作(高): 5 行目の
@Queryは SwiftUI ビュー内でのみ動作します。
例の終わり。
リファレンス
references/core-rules.md- 自動保存、リレーションシップ、削除ルール、プロパティの制約、FetchDescriptor の最適化。references/predicates.md- サポートされている述語の演算、実行時にクラッシュする危険なパターン、サポートされていないメソッド。references/cloudkit.md- 一意性、オプショナリティ、結果整合性など、CloudKit 固有の制約。references/indexing.md- 単一プロパティおよび複合プロパティのインデックスを含む、iOS 18 以降のデータベースのインデックス設定。references/class-inheritance.md- @available 要件、スキーマの設定、述語によるフィルタリングを含む、iOS 26 以降のモデルのサブクラス化。
コメント
Markdown 対応