はじめに
こんにちは、iOSアプリ開発Gの深山です。
CoreDataについての記事がかなり少なかったり、Swiftのバージョンが古かったり、内容が難しかったり…とあったので、初学者向けに簡単にまとめてみました。
CoreDataってなに?
CoreDataは、モデルオブジェクトを永続化するためのフレームワークです。 ※永続化: 一時的なデータを保存して再利用できるようにすること
Xcode上で簡単にデータベースのようにデータ構造を設定できたり、アプリ上で扱うデータのCRUD処理を簡単に書いたりすることができます。
CoreDataは、オブジェクトとリレーショナルデータベース(以降 RDB)の橋渡し役を担い、メモリ上のデータを、SQLiteというRDBのレコード構造に変換して保存します。 また逆に、特定の条件に該当するRDBのレコードをオブジェクトに変換してメモリに展開してくれます。

オブジェクト技術とリレーショナル技術の 2つの技術の違いを吸収し、両者のいいとこ取りをしたデータ管理技術と認識しておくと良いかと思います。
CoreDataのように、オブジェクトとレコードの変換を行うフレームワークのことを、O/Rマッピングフレームワークといいます。 ※O/R: Object/Relational
オブジェクト技術とリレーショナル技術の説明と違いについてはこの記事では割愛します。 こちらの記事がとても参考になったので紹介します。
CoreDataの主なクラス
CoreDataで使う主なクラスを紹介します。
- NSPersistentContainer CoreDataStackと呼ばれる、CoreDataで使うクラスをラッピングし、使えるようにしたクラス。アプリの起動時に生成される。
NSManagedObjectContext データの検索や、生成、更新、削除などの変更操作やその追跡をするクラス。
NSManagedObject データベースの1レコードに対応するモデルクラス。
NSManagedObjectModel モデルの型やプロパティ、関係を管理するクラス。
NSPersistentStoreCoordinator NSPersistentStoreを管理するクラス。モデル内で定義されているエンティティのインスタンス実体化を行う。
NSPersistentStore SQLite(データベース)の情報を管理するクラス。
各クラスの関係を図にすると以下のようになります。

NSPersistentContainerに使いやすくラッピングされているため、基本的には、NSPersistentContainerをインスタンス化し、付随するfetchを叩くことでデータが取得するなどができます。
深山侑花