Swift4でRealm Databaseを使う

みなさん、こんにちは。
最近腹筋ローラーを買った渋谷です。
Swiftで開発をしている中でRealm
というデータベースを触る機会があったので、簡単にRealm Databaseの紹介をしていきます。今回はRealmSwiftのインストールとcreateするまでを説明します。
Realm DatabaseはSwift以外にもJavaやJavaScriptなど、様々な言語に対応していますが、本記事ではSwift(version 4.2)で実装していきます。
Realm Databaseとは
Realm Database は、SQLite や Core Data の代替となるテクノロジーです。ゼロコピーを実現した設計により、Realm Database は他の OR マッパーや SQLite よりも高速に動作します。使い方はとても簡単で、ほんの数分で理解できます。
出展 : realm Database
とても簡単に説明すると、早くて簡単に扱えるデータベースだという事です。
実装
早速実装していきます。
CocoaPodsのインストール
本記事でのRealmのインストールにはライブラリ管理ツールのCocoaPodsを使うので、まずはCocoaPodsをインストールしましょう。
$ sudo gem update --system
$ sudo gem install cocoapods
$ pod setup
$ pod --version
以上でCocoaPodsのインストールは完了です。
RealmSwiftのインストール
ようやくRealmSwiftのインストールです。
インストールしたいプロジェクト(今回はSampleRealm)直下で下記コマンドを実行し、Podfile
を作成します。
$ pod init
Podfileを開き、下記のように修正します。
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
target 'SampleRealm' do
# Comment the next line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!
# Pods for SampleRealm
# 下記1行を追加
pod 'RealmSwift'
end
その後、下記コマンドを実行することでRealmSwiftをインストールすることができます。
$ pod install
SampleRealm.xcodeproj
がSampleRealm直下に作成されていれば、インストール成功です。
Createする
アプリを開いて画面が表示されたらcreateされるというものを作ってみます。
現在SampleRealm.xcodeprojを開いている場合は閉じて、SampleRealm.xcworkspace
を開きます。
Modelファイルの作成
SampleUser.swift
を作成し、下記画像の場所に配置します。
SampleUserでは名前、性別、年齢のカラムを持つとします。下記コードをSampleUser.swiftに貼り付けてください。
import Foundation
import RealmSwift
class SampleUser: Object {
@objc dynamic var name: String = ""
@objc dynamic var gender: String = ""
@objc dynamic var age: Int = 0
}
Object
クラスを継承している理由は、RealmでModelオブジェクトを定義する時のクラスだからです。
create処理を書く
ViewController.swiftを開き、viewDidLoad()
の中に下記コードを書きます。
import UIKit
import RealmSwift
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// Realmファイルパス
print(Realm.Configuration.defaultConfiguration.fileURL)
// Shibuyaさんの情報
let data = SampleUser()
data.name = "Shibuya"
data.gender = "Man"
data.age = 24
// create
do {
let Realm = try Realm()
try Realm.write {
Realm.add(data)
}
} catch {
print("Error writing Realm \(error)")
}
}
}
ここまできたらビルドし、アプリを起動すればRealmにデータが保存されます。
データの確認
データが本当に保存されたのかどうか確認したいですよね?
確認する為に Realm Browser を使います(AppStoreからインストールできます)。
保存されたデータを確認する為にはRealmFile
を確認する必要があるのですが、RealmFileのpathがSimulatorと実機で違うので、注意してください。
Simulatorにビルドした場合
create処理を書く
セクションで書いたprint(Realm.Configuration.defaultConfiguration.fileURL)
で出力されているpathをコピーする- その際、
/Users
から始まるようにコピーすること - コマンドラインの
open
コマンドを使ってコピーしたpathを開く - 下記画像のように保存されたデータが確認出来るかと思います。
実機にビルドした場合
RealmFailは実機に保存されるので、Simulatorでビルドした場合とpathの取得方法が異なります。
- Xcodeメニューの
Window>Devices and Simulators
を選択する - 実機に、インストールされているアプリが一覧で表示されるので、SampleRealmを選択して左下の歯車ボタンから
Download Container…
を選択する - 保存ダイアログが表示されるので、そのまま保存する
- 保存したファイルを右クリックして
パッケージの内容を表示
を選択する - AppData/Documentsの下にdefault.realmがあるので、そのまま開けば確認できます
まとめ
Realm Databaseはドキュメントも充実しており、触れ込み通りとても分かりやすいデータベースでした。
Primary KeyもModelファイルに記載すれば設定することができます。しかしautoincrimentを自分で実装するしかない為、RDBっぽく使いたい場合は面倒かもしれないです。
おまけ
Primary Keyを設定したい場合はSampleUser.swiftファイルに下記コードを追加するだけで出来ます。
// プライマリーキーの設定
override static func primaryKey() -> String? {
return "id"
}
しかしここで問題があり、一度ビルドした後にModelファイルを変更するとマイグレーションとスキーマファイルのバージョン設定が必要になってしまいます。そこで、ViewController.swiftのSampleUserを呼び出す前に下記コードを書き加えましょう。
※schemaVersionは既存ファイルよりも大きい値ならなんでも良いです。
let config = Realm.Configuration(schemaVersion: 1)
Realm.Configuration.defaultConfiguration = config