【サンプルコードあり】SwiftUI×CoreDataでメモアプリを作ってみた#1 導入編

SwiftUI

はじめに

今回はSwiftUIとCoreDateを利用して、メモアプリを作成してみました!誰かの役に立てばと思います!今回はCoreDataについての基本的な部分の確認を行い、メモアプリの全体像を確認していきます。

CoreDataの基本

まず、CoreDataとは何かを説明します。本記事を見てくださっている方の多くは「CoreDataとは???」となっている方も多いと思います。

CoreDataとは

CoreDataとは、オブジェクトを永続化するためのフレームワーク(O/R(Object / Relational)マッピングフレームワーク)のことです。

難しいですね、もう少し簡単に説明すると、

アプリケーションにデータをオフラインで永続的に保存できる機能です。SQLiteというリレーショナルデータベース(RDB)を活用し、データを永続的に保存します。

アプリケーションは、基本的にデータを永続的に保持しておくことができません。そこでCoreDataを利用してデータの保持を行います。また、O/Rマッピングフレームワークとは、コード側のオブジェクト(Object)とRDB側のレコード(Relational)を、相互に変換することによって簡単に保存や取り出しが行えるようにするフレームワークです。これにより、利用者側が複雑なコードを書く手間を省いてくれます。

次に、CoreDataの基本概念について確認していきます。

CoreDataの基本概念

ここからCoreDataの基本概念について説明していきます。初めは少し複雑に感じるかもしれませんが、実際にコードを動かすようになれば理解できると思うので、ここではざっと読んでこんなのあるな〜くらいで大丈夫です。

CoreDataには、大きく分けて以下の5つの要素で構成されています。

1.Container(NSPersistentContainer)

1つめは、Containerです。CoreDataではNSPersistentContainerです。こちらは、CoreDataのデータを管理・操作するためのクラスを管理するクラスです。すべてのクラスの大元みたいなイメージでよいと思います。

2.Model(NSManagedObjectModel)

2つめは、Modelです。CoreDataではNSManagedObjectModelクラスとなります。CoreDataで扱うためのデータ構造(Entity)を定義するものです。こちらはソースコードで記載するのではなく、Xcodeの.xcdatamodelsで定義します。

3.Entity(NSEntityDesription)

3つめはEntityです。CoreDataでは、NSEntityDesriptionとなります。データの種類(テーブル)を定義するものです。どんな属性(idやnameなど)があるか決めるものです。NSEntityDesriptionはNSManagedObjectModelに含まれています。

4.Context(NSManagedObjectContext)

4つめは、Contextです。CoreDataではNSManagedObjectContextです。このクラスは、データの追加・更新・削除などの処理を行なっているクラスです。このクラスを利用してデータを操作します。

5.Store(NSPersistentStore)

最後にStoreです。CoreDataではNSPersistentStoreです。このクラスはデータの保存数場所です。
NSPersistentContainer が自動的にセットアップしてくれます。

基本的には1~4を押さえてけば大丈夫です。上記の関係を図に表すと以下のようになります。緑の部分が今回上記で説明したものです。そのほかに今回出てきていないものがありますがそちらは実際のソースで出ていたときに説明します。

SwiftUI×CoreDataのメモアプリ

ここからは、SwiftとCoreDataを利用したメモアプリの概要について説明していきます。動きを見てもらった方がよいと思うので、以下が実際に作成したメモアプリになります。

画面は、トップ画面とメモの編集画面の2つ。機能としてはメモの追加と編集ができるものとなっています。データはCoreDataを利用して保存をしています。

以上次回から、実際のアプリの作成に取り掛かります!引き続きよろしくお願いいたします!

続き

この記事の続きは以下です。

【サンプルコードあり】SwiftUI×CoreDataでメモアプリを作ってみた#2 実装編

プロフィール

SIer勤めのエンジニア
アプリケーションエンジニアとして、WebやiOSなどのアプリ開発をメインにしてます

tomaをフォローする
SwiftUI