CoreDataの基本

SwiftにおけるCore Data(コアデータ)は、Appleが提供するオブジェクトグラフ管理および永続化フレームワークです。ユーザーデータやアプリケーションの状態をローカルに保存し、次回起動時にも復元可能にするための仕組みです。以下にCore Dataの基本について詳しく説明します。


1. Core Dataの役割

Core Dataは以下の機能を提供します:

  • オブジェクトの永続化(SQLiteなどに保存)

  • **オブジェクト間の関係(リレーション)**の管理

  • データの検索(フェッチ)

  • データのバリデーション

  • メモリ効率の良いデータ管理


2. Core Dataの主な構成要素

① NSManagedObject

  • Core Dataのエンティティに対応するクラス

  • 通常は自動生成され、アプリの中で使用するデータオブジェクトになる。

swift
class Person: NSManagedObject { @NSManaged var name: String @NSManaged var age: Int16 }

② NSManagedObjectContext(MOC)

  • オブジェクトの作成、取得、編集、削除を行う。

  • 一種の「作業エリア」で、最終的に.save()で保存処理を行う。

③ NSPersistentContainer

  • Core Dataスタック全体(モデル、コンテキスト、ストア)を簡単に管理する便利なラッパークラス

  • iOS 10以降で導入され、設定が大幅に簡略化された。

④ NSFetchRequest

  • データの検索を行うためのリクエスト。

  • 条件指定、ソート、制限なども可能。


3. 基本的な使い方(例)

ステップ①: モデルの作成

  • Xcodeで .xcdatamodeld ファイルを作成し、エンティティと属性(例: name: String, age: Int16)を定義。

ステップ②: Persistent Containerのセットアップ

swift
let container = NSPersistentContainer(name: "MyModel") container.loadPersistentStores { description, error in if let error = error { fatalError("Core Data store failed: \(error)") } }

ステップ③: データの追加

swift
let context = container.viewContext let person = Person(context: context) person.name = "Taro" person.age = 25 do { try context.save() } catch { print("Save failed: \(error)") }

ステップ④: データの取得

swift
let request: NSFetchRequest<Person> = Person.fetchRequest() do { let people = try context.fetch(request) for person in people { print(person.name) } } catch { print("Fetch failed: \(error)") }

4. Core Dataの永続ストアの種類

Core Dataは以下のストレージをサポートしています:

  • SQLite(デフォルト):高速・容量効率が良い

  • Binary:バイナリ形式。あまり一般的ではない

  • In-Memory:メモリ上のみ。テスト用途に便利


5. Core Dataを使う際の注意点

  • マルチスレッド処理ではNSManagedObjectContextのスレッドセーフ性に注意

  • データモデルの変更にはマイグレーションが必要

  • 大量データを扱う場合はバッチ処理フェッチ制限を検討する


まとめ

Core Dataは、Swiftアプリにおけるデータの保存と管理を効率的に行うための強力なフレームワークです。特に複雑なデータ構造やリレーションを持つアプリに向いており、ユーザーの操作に応じて柔軟にデータを保存・更新・検索できます。

生成日:2025/05/04