axiom-ios-data について
データベース、移行、クラウド同期、ファイル、シリアライズ、安全な保存方法に関する情報を案内する iOS 開発者向けルーターです。作業内容に応じて専門スキルや監査エージェントへ振り分けます。
主な機能
- 01保存技術別のスキル案内
- 02データベースとスキーマ移行を網羅
- 03クラウド同期とファイル保存を案内
- 04Codable と JSON の作業先を提示
- 05ストレージ監査の選択肢を掲載
活用シーン
- 01SwiftData、Core Data、SQLiteData の情報を探す
- 02データベースのスキーマ変更や移行に対応
- 03CloudKit や iCloud 同期の問題を調査
- 04認証情報、ファイル配置、データモデルを点検
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ charleswiltgen/ axiom --skill axiom-ios-dataインストール後、Claude Code で/axiom-ios-dataを入力して読み込まれたか確認します。
詳細
iOS データと永続化のルーター
データの永続化、データベース、axiom-storage、CloudKit、またはシリアライズに関する作業では、必ずこのスキルを使用してください。
使用する場面
次の作業を行う場合は、このルーターを使用してください。
- データベース(SwiftData、Core Data、GRDB、SQLiteData)
- スキーマのマイグレーション
- CloudKit の同期
- ファイルストレージ(iCloud Drive、ローカルストレージ)
- データのシリアライズ(Codable、JSON)
- ストレージ戦略の決定
- Keychain/セキュアな認証情報の保存
- 暗号化、署名、鍵管理(CryptoKit)
ルーティングロジック
SwiftData
SwiftData を使用する場合 → /skill axiom-swiftdata
スキーマのマイグレーション → /skill axiom-swiftdata-migration
マイグレーションの問題 → /skill axiom-swiftdata-migration-diag
Realm からの移行 → /skill axiom-realm-migration-ref
SwiftData と SQLiteData の比較 → /skill axiom-sqlitedata-migration
その他のデータベース
GRDB クエリ → /skill axiom-grdb
SQLiteData → /skill axiom-sqlitedata
SQLiteData の高度な使い方 → /skill axiom-sqlitedata-ref
Core Data のパターン → /skill axiom-core-data
Core Data の問題 → /skill axiom-core-data-diag
マイグレーション
データベースのマイグレーションの安全性 → /skill axiom-database-migration(重要:データ損失を防止します)
シリアライズ
Codable の問題 → /skill axiom-codable
クラウドストレージ
クラウド同期のパターン → /skill axiom-cloud-sync
CloudKit → /skill axiom-cloudkit-ref
iCloud Drive → /skill axiom-icloud-drive-ref
クラウド同期のエラー → /skill axiom-cloud-sync-diag
Keychain と暗号化
Keychain/セキュアな認証情報の保存 → /skill axiom-keychain
Keychain のエラー → /skill axiom-keychain-diag
Keychain API リファレンス → /skill axiom-keychain-ref
暗号化/署名/鍵管理 → /skill axiom-cryptokit
CryptoKit API リファレンス → /skill axiom-cryptokit-ref
ファイルストレージ
ストレージ戦略 → /skill axiom-storage
ストレージの問題 → /skill axiom-storage-diag
ストレージ管理 → /skill axiom-storage-management-ref
ファイル保護 → /skill axiom-file-protection-ref
tvOS ストレージ
tvOS のデータ永続化 → /skill axiom-tvos(重要:tvOS には永続的なローカルストレージがありません)
tvOS と CloudKit → /skill axiom-sqlitedata(推奨:永続ストアとして SyncEngine を使用)
自動スキャン
Core Data の監査 → core-data-auditor エージェントを起動するか、/axiom:audit core-data を実行します(マイグレーションのリスク、スレッド制約、N+1 クエリ、本番データの損失)
Codable の監査 → codable-auditor エージェントを起動するか、/axiom:audit codable を実行します(エラーを握りつぶす try?、JSONSerialization、日付の処理)
iCloud の監査 → icloud-auditor エージェントを起動するか、/axiom:audit icloud を実行します(エンタイトルメントの確認、ファイルの調整、CloudKit のアンチパターン)
ストレージの監査 → storage-auditor エージェントを起動するか、/axiom:audit storage を実行します(ファイル保存場所の誤り、バックアップ除外の設定漏れ、データ損失のリスク)
データベーススキーマの監査 → database-schema-auditor エージェントを起動するか、/axiom:audit database-schema を実行します(安全でない ALTER TABLE、DROP 操作、べき等性の欠如、外部キーの誤用)
SwiftData の監査 → swiftdata-auditor エージェントを起動するか、/axiom:audit swiftdata を実行します(struct モデル、VersionedSchema の設定漏れ、リレーションシップのデフォルト値、バックグラウンドコンテキストの誤用、N+1 パターン)
判断ツリー
- SwiftData? → swiftdata, swiftdata-migration
- Core Data? → core-data, core-data-diag
- GRDB? → grdb
- SQLiteData? → sqlitedata, sqlitedata-ref
- スキーマ移行が必要? → database-migration(必ず — データ損失を防止します)
- Realm の移行? → realm-migration-ref
- SwiftData と SQLiteData の比較? → sqlitedata-migration
- クラウド同期のアーキテクチャ? → cloud-sync
- CloudKit? → cloudkit-ref
- iCloud Drive? → icloud-drive-ref
- クラウド同期のエラー? → cloud-sync-diag
- Codable/JSON のシリアライズ? → codable
- ファイルストレージ戦略? → storage, storage-diag, storage-management-ref
- ファイル保護? → file-protection-ref
- Keychain/トークン、パスワード、シークレットの安全な保存? → keychain, keychain-diag, keychain-ref
- SecItem のエラー(errSecDuplicateItem、errSecItemNotFound、errSecInteractionNotAllowed)? → keychain-diag
- 暗号化、署名、Secure Enclave、CryptoKit? → cryptokit, cryptokit-ref
- 量子耐性暗号、HPKE、ML-KEM? → cryptokit
- Core Data の安全性スキャンを実施しますか? → core-data-auditor(エージェント)
- Codable のアンチパターンスキャンを実施しますか? → codable-auditor(エージェント)
- iCloud 同期の監査を実施しますか? → icloud-auditor(エージェント)
- ストレージの場所の監査を実施しますか? → storage-auditor(エージェント)
- データベースのスキーマ/移行の安全性スキャンを実施しますか? → database-schema-auditor(エージェント)
- SwiftData コードの監査を実施しますか? → swiftdata-auditor(エージェント)
- tvOS のデータ永続化? → axiom-tvos(重大:永続的なローカルストレージはありません)+ axiom-sqlitedata(CloudKit SyncEngine)
不合理な自己正当化
| 考え | 実際のところ |
|---|---|
| 「列を追加するだけだから、移行は不要」 | 移行せずにスキーマを変更すると、ユーザーのアプリがクラッシュします。database-migration はデータ損失を防ぎます。 |
| 「移行は手動で対応する」 | 手動の移行ではエッジケースを見落とします。database-migration はロールバックとテストに対応しています。 |
| 「単純なクエリだから、このスキルは必要ない」 | クエリのパターンを使えば、N+1 問題やスレッドセーフの問題を防げます。このスキルにはコピーして使える解決策があります。 |
| 「CloudKit の同期は簡単だ」 | CloudKit には 15 種類以上の障害モードがあります。cloud-sync-diag で体系的に診断できます。 |
| 「Codable は十分に理解している」 | Codable には、エラーを握りつぶす try? など、気づかないままデータ損失を招く落とし穴があります。codable スキルは本番環境でのバグを防ぎます。 |
| 「tvOS でローカルストレージを使う」 | tvOS には永続的なローカルストレージがありません。システムはキャッシュをいつでも削除します。axiom-tvos では、iCloud を優先するパターンについて説明しています。 |
| 「このトークンには UserDefaults で十分」 | UserDefaults は暗号化されず、iCloud にバックアップされ、MDM プロファイルからも見える状態になります。監査を 1 回実施すれば検出できます。keychain はトークンを安全に保存します。 |
| 「CommonCrypto で自分で暗号化する」 | CryptoKit は、CommonCrypto のバッファ管理にまつわる厄介な問題を、1 行の API に置き換えました。cryptokit は誤用を防ぎます。 |
重要なパターン:移行
データベースの列を追加/変更するときは、必ず /skill axiom-database-migration を呼び出してください。
これにより、次の問題を防げます。
- 「FOREIGN KEY constraint failed」エラー
- 「no such column」によるクラッシュ
- 安全でない移行によるデータ損失
呼び出し例
ユーザー:「SwiftData モデルにカラムを追加する必要があります」
→ 呼び出し:/skill axiom-database-migration(重要:データ損失を防ぎます)
ユーザー:「複雑なフィルターを使って SwiftData にクエリするにはどうすればよいですか?」
→ 呼び出し:/skill axiom-swiftdata
ユーザー:「CloudKit の同期が機能しません」
→ 呼び出し:/skill axiom-cloud-sync-diag
ユーザー:「SwiftData と SQLiteData のどちらを使うべきですか?」
→ 呼び出し:/skill axiom-sqlitedata-migration
ユーザー:「Core Data のコードに安全性の問題がないか確認してください」
→ 呼び出し:core-data-auditor エージェント
ユーザー:「リリース前に Codable のアンチパターンをスキャンしてください」
→ 呼び出し:codable-auditor エージェント
ユーザー:「iCloud 同期の実装を監査してください」
→ 呼び出し:icloud-auditor エージェント
ユーザー:「ファイルが適切な場所に保存されているか確認してください」
→ 呼び出し:storage-auditor エージェント
ユーザー:「データベースのマイグレーションの安全性を監査してください」
→ 呼び出し:database-schema-auditor エージェント
ユーザー:「SwiftData モデルに問題がないか確認してください」
→ 呼び出し:swiftdata-auditor エージェント
ユーザー:「tvOS でデータを永続化するにはどうすればよいですか?」
→ 呼び出し:/skill axiom-tvos + /skill axiom-sqlitedata
ユーザー:「tvOS アプリで起動のたびにデータが失われます」
→ 呼び出し:/skill axiom-tvos
ユーザー:「認証トークンを安全に保存するにはどうすればよいですか?」
→ 呼び出し:/skill axiom-keychain
ユーザー:「errSecDuplicateItem が発生しますが、確認したところアイテムは存在しません」
→ 呼び出し:/skill axiom-keychain-diag
ユーザー:「Swift で AES を使ってデータを暗号化するにはどうすればよいですか?」
→ 呼び出し:/skill axiom-cryptokit
ユーザー:「Secure Enclave でデータに署名する必要があります」
→ 呼び出し:/skill axiom-cryptokit
ユーザー:「ML-KEM とは何ですか?使うべきですか?」
→ 呼び出し:/skill axiom-cryptokit