axiom-data について
axiom-data は、データ永続化とストレージの作業を、データベース、移行、クラウド同期、シリアライズ、ファイルの資料へ案内するスキルです。Apple プラットフォームのアプリのデータ層を扱う開発者向けです。
主な機能
- 01データベースのテーマ別資料へ案内
- 02スキーマ移行の安全性を解説
- 03CloudKit とクラウド同期を案内
- 04Codable と JSON のガイダンス
- 05ストレージ監査と診断を掲載
活用シーン
- 01データ永続化方式を選定
- 02データベーススキーマ移行を計画
- 03CloudKit 同期エラーを診断
- 04ファイルの保存場所を監査
MCP 対応
README では、MCP 経由で `axiom_get_agent` からエージェント手順を取得する方法が説明されています。MCP サーバーであるとは記載されていません。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ charleswiltgen/ axiom --skill axiom-dataインストール後、Claude Code で/axiom-dataを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
skills/cloud-sync-diag.mdcloud-sync.mdcloudkit-ref.mdcodable-auditor.mdcodable.mdcore-data-auditor.mdcore-data-diag.mdcore-data.mddatabase-migration.mddatabase-schema-auditor.mdgrdb-app-groups.mdgrdb-performance-auditor.mdgrdb-performance.mdgrdb.mdicloud-auditor.mdicloud-drive-ref.mdrealm-migration-ref.mdsql-json-ref.mdsqlite-fts-ref.mdsqlitedata-migration.mdsqlitedata-ref.mdsqlitedata.mdstorage-auditor.mdstorage-diag.mdstorage-management-ref.mdstorage.mdswift-sharing.mdswiftdata-auditor.mdswiftdata-migration-diag.mdswiftdata-migration.md詳細
データと永続化
データの永続化、データベース、ストレージ、CloudKit、シリアル化に関する作業では、必ずこのスキルを使用してください。
Axiom エージェントを起動できませんか? このルーターからエージェントに案内された場合は、その手順をインラインで実行してください。MCP 経由では、
axiom_get_agentがエージェントの内容を返します。それ以外の場合は、以下のファイルを読み取ってください。ファイル検索と読み取りだけで十分です。ここで利用できるもの:
skills/codable-auditor.md、skills/core-data-auditor.md、skills/database-schema-auditor.md、skills/grdb-performance-auditor.md、skills/icloud-auditor.md、skills/storage-auditor.md、skills/swiftdata-auditor.md。それ以外のエージェントも、MCP 経由では
axiom_get_agentが内容を返します。そのエージェントの xclog、xcsym、xcprof の手順を、axiom_xclog_*、axiom_xcsym_*、axiom_xcprof_*ツールで実行してください。それ以外の場合は、Axiom のスキルからskills/<agent>.mdを検索してください。見つからない場合は、Axiom のツールをPATH上で利用できる状態にして、このスイートのスキルを使いながら自分で作業してください。
使用する場面
以下の作業では、このスキルを使用してください。
- データベース(SwiftData、Core Data、GRDB、SQLiteData)
- スキーマの移行
- CloudKit 同期
- ファイルストレージ(iCloud Drive、ローカルストレージ)
- データのシリアル化(Codable、JSON)
- ストレージ戦略の決定
- Keychain/セキュリティで保護された認証情報の保存
- 暗号化、署名、鍵管理(CryptoKit)
クイックリファレンス
| 症状/タスク | リファレンス |
|---|---|
SwiftData の @Model、@Query、ModelContext、セクション分けされたクエリ/ResultsObserver/@Attribute(.codable)/動的な複合述語(OS27) | skills/swiftdata.md を参照してください |
| SwiftData のスキーマ移行、VersionedSchema | skills/swiftdata-migration.md を参照してください |
| SwiftData の移行時のクラッシュ、データ損失 | skills/swiftdata-migration-diag.md を参照してください |
| Realm から SwiftData への移行 | skills/realm-migration-ref.md を参照してください |
| SwiftData と SQLiteData の選択 | skills/sqlitedata-migration.md を参照してください |
| GRDB のクエリ、upsert、ValueObservation、DatabaseMigrator、暗号化 | skills/grdb.md を参照してください |
| GRDB のパフォーマンス、インデックス、EXPLAIN QUERY PLAN、カーソル、監視が発火しない問題 | skills/grdb-performance.md を参照してください |
| GRDB または SQLiteData の全文検索(FTS5) | skills/sqlite-fts-ref.md を参照してください |
| SQLite 列内の JSON の保存またはクエリ(JSON1、JSONB) | skills/sql-json-ref.md を参照してください |
| アプリとウィジェット/拡張機能での GRDB の共有(App Group) | skills/grdb-app-groups.md を参照してください |
| SQLiteData の @Table、CRUD、SyncEngine | skills/sqlitedata.md を参照してください |
| SQLiteData の高度なパターン、CTE、ビュー | skills/sqlitedata-ref.md を参照してください |
@Shared/@SharedReader、appStorage または fileStorage による永続化、カスタム SharedKey、@FetchAll の isLoading/loadError | skills/swift-sharing.md を参照してください |
| Core Data のスタック、リレーションシップ、並行処理 | skills/core-data.md を参照してください |
| Core Data の移行時のクラッシュ、スレッドエラー | skills/core-data-diag.md を参照してください |
| あらゆるスキーマ移行の安全性 | skills/database-migration.md を参照してください |
| Codable、JSON のエンコード/デコード | skills/codable.md を参照してください |
| クラウド同期のアーキテクチャ、オフラインファースト | skills/cloud-sync.md を参照してください |
| CloudKit、CKSyncEngine、CKRecord | skills/cloudkit-ref.md を参照してください |
| iCloud Drive、ユビキタスコンテナ | skills/icloud-drive-ref.md を参照してください |
| クラウド同期のエラー、競合解決 | skills/cloud-sync-diag.md を参照してください |
| ストレージ戦略、データの保存場所 | skills/storage.md を参照してください |
| ストレージの問題、ファイルが消えた場合 | skills/storage-diag.md を参照してください |
| ストレージ管理、ディスク容量の逼迫 | skills/storage-management-ref.md を参照してください |
| Keychain/セキュアな認証情報の保存 | axiom-security(skills/keychain.md)を参照してください |
| Keychain のエラー(errSecDuplicateItem) | axiom-security(skills/keychain-diag.md)を参照してください |
| Keychain API リファレンス | axiom-security(skills/keychain-ref.md)を参照してください |
| 暗号化/署名/鍵管理 | axiom-security(skills/cryptokit.md)を参照してください |
| CryptoKit API リファレンス | axiom-security(skills/cryptokit-ref.md)を参照してください |
| ファイル保護、NSFileProtection | axiom-security(skills/file-protection-ref.md)を参照してください |
| tvOS のデータ永続化(ローカルストレージの永続性は保証されません) | axiom-swift(skills/tvos.md)を参照してください |
| tvOS と CloudKit SyncEngine | skills/sqlitedata.md を参照してください |
自動スキャン
Core Data 監査 → core-data-auditor エージェントを起動するか、/axiom:audit core-data を実行します(安全性違反、アーキテクチャ上のギャップ — 移行オプション、スレッドの制約、N+1 クエリ、マージポリシー、コンテキストの分離)
Codable 監査 → codable-auditor エージェントを起動するか、/axiom:audit codable を実行します(安全性違反、セマンティクス上のギャップ — エラーを握りつぶす try?、JSONSerialization、日付の処理、フィールドの暗黙の欠落、ラッパーに隠れたフォールバック、ファイル間の戦略の不整合、enum の将来のケースによるクラッシュ)
iCloud 監査 → icloud-auditor エージェントを起動するか、/axiom:audit icloud を実行します(エンタイトルメントの確認、ファイル調整、CKError マトリクスのカバレッジ不足、アカウント変更の監視漏れ、CKSubscriptions ではなくポーリングを使用、SwiftData + CloudKit の非対応機能、拡張機能間で調整されていない I/O などの複合的なリスク)
ストレージ監査 → storage-auditor エージェントを起動するか、/axiom:audit storage を実行します(ファイルの保存場所の誤り、バックアップ除外の不足、Keychain ではなくディスク上にある機密データ、App Group コンテナの不足、キャッシュの際限ない増大、孤立ファイル、tmp/ 内のユーザーデータと重要なコンテンツなどの複合的なリスク)
データベーススキーマ監査 → database-schema-auditor エージェントを起動するか、/axiom:audit database-schema を実行します(安全でない ALTER TABLE、DROP 操作、冪等性の不足、宣言されているが適用されていない FK 制約、不完全なアップグレードパス、FK 参照テーブルに対する INSERT OR REPLACE などの複合的なリスク)
GRDB パフォーマンス監査 → grdb-performance-auditor エージェントを起動するか、/axiom:audit grdb-performance を実行します(生の SQL 文字列への補間、生の SQL における FK インデックスの不足、生の GRDB を使うアプリでの PRAGMA optimize の不足、App Group データベースにおけるジャーナルモードの不一致、共有データベースでの observesSuspensionNotifications の不足、生の SQL におけるプレフィックスが重複するインデックス、レガシーな Record サブクラス、アップサートとしての INSERT OR REPLACE の誤用、WITHOUT ROWID テーブルに対する監視、WITHOUT ROWID のアップサートのバグ)
SwiftData 監査 → swiftdata-auditor エージェントを起動するか、/axiom:audit swiftdata を実行します(struct モデル、スキーマ登録の不足、デフォルト値のない配列リレーションシップ、バックグラウンドコンテキストの誤用、N+1 パターン、古くなった述語、CloudKit への準拠不足、struct モデルと配列リレーションシップなどの複合的なリスク)
意思決定ツリー
- SwiftData? →
skills/swiftdata.md、skills/swiftdata-migration.md - Core Data? →
skills/core-data.md、skills/core-data-diag.md - GRDB? →
skills/grdb.md3a. GRDB のパフォーマンス、遅いクエリ、パフォーマンスを考慮したスキーマ設計? →skills/grdb-performance.md3b. FTS5(全文検索、どのレイヤーでも)? →skills/sqlite-fts-ref.md3c. アプリと拡張機能/ウィジェット/Live Activity でデータベースを共有? →skills/grdb-app-groups.md - SQLiteData? →
skills/sqlitedata.md、skills/sqlitedata-ref.md4a.@Shared/@SharedReader、または@FetchAllの背後にある読み込み/エラー状態? →skills/swift-sharing.md - スキーマのマイグレーションはありますか? →
skills/database-migration.md(必ず参照してください — データ損失を防ぎます) - Realm のマイグレーション? →
skills/realm-migration-ref.md - SwiftData と SQLiteData の比較? →
skills/sqlitedata-migration.md - クラウド同期のアーキテクチャ? →
skills/cloud-sync.md - CloudKit? →
skills/cloudkit-ref.md - iCloud Drive? →
skills/icloud-drive-ref.md - クラウド同期のエラー? →
skills/cloud-sync-diag.md - Codable/JSON のシリアライズ? →
skills/codable.md - ファイルストレージの方針? →
skills/storage.md、skills/storage-diag.md、skills/storage-management-ref.md - ファイル保護? → axiom-security を参照(skills/file-protection-ref.md)
- Keychain/トークン、パスワード、シークレットの安全な保存? → axiom-security を参照(skills/keychain.md)、axiom-security を参照(skills/keychain-diag.md)、axiom-security を参照(skills/keychain-ref.md)
- SecItem のエラー(errSecDuplicateItem、errSecItemNotFound、errSecInteractionNotAllowed)? → axiom-security を参照(skills/keychain-diag.md)
- 暗号化、署名、Secure Enclave、CryptoKit? → axiom-security を参照(skills/cryptokit.md)、axiom-security を参照(skills/cryptokit-ref.md)
- 量子安全暗号、HPKE、ML-KEM? → axiom-security を参照(skills/cryptokit.md)
- Core Data の安全性スキャンを実施しますか? → core-data-auditor(エージェント)
- Codable のアンチパターンをスキャンしますか? → codable-auditor(エージェント)
- iCloud 同期を監査しますか? → icloud-auditor(エージェント)
- ストレージの場所を監査しますか? → storage-auditor(エージェント)
- データベースのスキーマ/マイグレーションの安全性をスキャンしますか? → database-schema-auditor(エージェント) 23a. GRDB のパフォーマンス/アプリグループをスキャンしますか? → grdb-performance-auditor(エージェント)
- SwiftData のコードを監査しますか? → swiftdata-auditor(エージェント)
- tvOS のデータ永続化? → axiom-swift を参照(skills/tvos.md)(重要:すべてのローカルディレクトリは起動のたびに消去される可能性があるため、iCloud が信頼できる唯一の情報源です)+
skills/sqlitedata.md(CloudKit SyncEngine) - SwiftData の @MainActor/バックグラウンドコンテキストのスレッド処理? →
/skill axiom-concurrency - Foundation Models による構造化データの生成? →
/skill axiom-ai
同期パターン
- 汎用的な変更追跡パターンとしての HealthKit のアンカー/オブザーバークエリ → axiom-health を参照(skills/sync-and-background.md)
不合理な正当化
| 考え | 実態 |
|---|---|
| 「カラムを追加するだけだから、マイグレーションは不要です」 | マイグレーションを伴わないスキーマ変更は、ユーザーのアプリをクラッシュさせます。database-migration はデータ損失を防ぎます。 |
| 「マイグレーションは手動で対応します」 | 手動のマイグレーションでは、エッジケースを見落とします。database-migration には、安全な追加パターンと、テスト可能な両方のマイグレーション経路があります。 |
| 「単純なクエリだから、このスキルは必要ありません」 | クエリのパターンは、N+1 問題やスレッド安全性の問題を防ぎます。このスキルにはコピーして使える解決策があります。 |
| 「CloudKit の同期は簡単です」 | CloudKit には 15 以上の障害モードがあります。cloud-sync-diag はそれらを体系的に診断します。 |
| 「Codable には十分詳しいです」 | Codable には、エラーを握りつぶす try? など、気づきにくいデータ損失の落とし穴があります。codable スキルは本番環境でのバグを防ぎます。 |
| 「@Shared は手順が増えた @AppStorage にすぎません」 | 変更は $shared.withLock を通じて行います。通常のセッターは非推奨で、Sharing 2.8 未満を Swift 6.3 で使う場合、SwiftUI のバインディングを共有状態につなぐ箇所はコンパイルエラーになります。swift-sharing に移行方法があります。 |
| 「tvOS ではローカルストレージを使います」 | tvOS では、起動後も保持されるローカルディレクトリは保証されません。システムによって削除され、まず Caches が対象になります。iCloud を優先するパターンについては、axiom-swift(skills/tvos.md)を参照してください。 |
| 「このトークンなら UserDefaults で問題ありません」 | UserDefaults は暗号化されず、iCloud にバックアップされ、MDM プロファイルからも見えます。監査すればすぐに検出できます。keychain はトークンを安全に保存します。 |
| 「CommonCrypto で自分で暗号化します」 | CryptoKit は、CommonCrypto のバッファー管理にまつわる煩雑さを、1 行の API に置き換えました。cryptokit は誤用を防ぎます。 |
重要なパターン:マイグレーション
データベースのカラムを追加または変更する場合は、必ず skills/database-migration.md を読んでください。
次の問題を防げます:
- 「FOREIGN KEY constraint failed」エラー
- 「no such column」によるクラッシュ
- 安全でないマイグレーションによるデータ損失
呼び出し例
ユーザー:「SwiftData モデルに列を追加したいです」
→ 読み込み:skills/database-migration.md(重要 — データ損失を防ぎます)
ユーザー:「複雑なフィルターを使って SwiftData をクエリするにはどうすればよいですか?」
→ 読み込み:skills/swiftdata.md
ユーザー:「CloudKit 同期が動作しません」
→ 読み込み:skills/cloud-sync-diag.md
ユーザー:「SwiftData と SQLiteData のどちらを使うべきですか?」
→ 読み込み:skills/sqlitedata-migration.md
ユーザー:「設定を UserDefaults に保存して、どこからでも監視するにはどうすればよいですか?」
→ 読み込み:skills/swift-sharing.md
ユーザー:「@FetchAll が空なのはなぜですか — 読み込み中ですか、それとも失敗しましたか?」
→ 読み込み:skills/swift-sharing.md
ユーザー:「Core Data のコードに安全性の問題がないか確認してください」
→ core-data-auditor エージェントを起動
ユーザー:「リリース前に Codable のアンチパターンをスキャンしてください」
→ codable-auditor エージェントを起動
ユーザー:「iCloud 同期の実装を監査してください」
→ icloud-auditor エージェントを起動
ユーザー:「ファイルが適切な場所に保存されているか確認してください」
→ storage-auditor エージェントを起動
ユーザー:「データベースのマイグレーションを監査して、安全性を確認してください」
→ database-schema-auditor エージェントを起動
ユーザー:「GRDB のクエリを高速化するにはどうすればよいですか?」
→ 読み込み:skills/grdb-performance.md
ユーザー:「GRDB を使うアプリに検索を追加してください」/「SQLiteData アプリに検索を追加してください」
→ 読み込み:skills/sqlite-fts-ref.md
ユーザー:「ウィジェットでアプリと同じデータベースを読み取る必要があります」
→ 読み込み:skills/grdb-app-groups.md
ユーザー:「ウィジェットにデータベースの古いデータが表示されます」
→ 読み込み:skills/grdb-app-groups.md
ユーザー:「GRDB のコードを監査して、パフォーマンスの問題を確認してください」
→ grdb-performance-auditor エージェントを起動
ユーザー:「SwiftData のモデルに問題がないか確認してください」
→ swiftdata-auditor エージェントを起動
ユーザー:「tvOS でデータを永続化するにはどうすればよいですか?」
→ 呼び出し:axiom-swift を参照(skills/tvos.md)+読み込み:skills/sqlitedata.md
ユーザー:「tvOS アプリで起動するたびにデータが失われます」 → 呼び出し:axiom-swift を参照(skills/tvos.md)
ユーザー:「認証トークンを安全に保存するにはどうすればよいですか?」 → 呼び出し:axiom-security を参照(skills/keychain.md)
ユーザー:「errSecDuplicateItem が発生しますが、確認しても項目が存在しません」 → 呼び出し:axiom-security を参照(skills/keychain-diag.md)
ユーザー:「Swift で AES を使ってデータを暗号化するにはどうすればよいですか?」 → 呼び出し:axiom-security を参照(skills/cryptokit.md)
ユーザー:「Secure Enclave でデータに署名する必要があります」 → 呼び出し:axiom-security を参照(skills/cryptokit.md)
ユーザー:「ML-KEM とは何ですか?使うべきですか?」 → 呼び出し:axiom-security を参照(skills/cryptokit.md)