【Swift】CoreDataの概念を知る

iOS, Swift

はじめに

こんにちは、iOSアプリ開発Gの深山です。

CoreDataについての記事がかなり少なかったり、Swiftのバージョンが古かったり、内容が難しかったり…とあったので、初学者向けに簡単にまとめてみました。

CoreDataってなに?

CoreDataは、モデルオブジェクトを永続化するためのフレームワークです。
※永続化: 一時的なデータを保存して再利用できるようにすること

Xcode上で簡単にデータベースのようにデータ構造を設定できたり、アプリ上で扱うデータのCRUD処理を簡単に書いたりすることができます。

CoreDataは、オブジェクトとリレーショナルデータベース(以降 RDB)の橋渡し役を担い、メモリ上のデータを、SQLiteというRDBのレコード構造に変換して保存します。
また逆に、特定の条件に該当するRDBのレコードをオブジェクトに変換してメモリに展開してくれます。

image-20220928094556479.png

オブジェクト技術とリレーショナル技術の2つの技術の違いを吸収し、両者のいいとこ取りをしたデータ管理技術と認識しておくと良いかと思います。

CoreDataのように、オブジェクトとレコードの変換を行うフレームワークのことを、O/Rマッピングフレームワークといいます。
※O/R: Object/Relational

オブジェクト技術とリレーショナル技術の説明と違いについてはこの記事では割愛します。
こちらの記事がとても参考になったので紹介します。

CoreDataの主なクラス

CoreDataで使う主なクラスを紹介します。

  • NSPersistentContainer
    CoreDataStackと呼ばれる、CoreDataで使うクラスをラッピングし、使えるようにしたクラス。アプリの起動時に生成される。

  • NSManagedObjectContext
    データの検索や、生成、更新、削除などの変更操作やその追跡をするクラス。

  • NSManagedObject
    データベースの1レコードに対応するモデルクラス。

  • NSManagedObjectModel
    モデルの型やプロパティ、関係を管理するクラス。

  • NSPersistentStoreCoordinator
    NSPersistentStoreを管理するクラス。モデル内で定義されているエンティティのインスタンス実体化を行う。

  • NSPersistentStore
    SQLite(データベース)の情報を管理するクラス。

各クラスの関係を図にすると以下のようになります。

image-20220928094614206.png

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

まとめ

冒頭にも記載したように、古いバージョンの記事が多かったので、今回改めて調査してまとめました。
iOS10より導入された NSPersistentContainerによって、CoreDataまわりの実装がスマートになったようです。

今回は概念を知ることにフォーカスしましたので、今後は実装方法もまとめてみようと思います。

最後まで読んでいただき、ありがとうございました。

参考文献

iOS, Swift