Swift4でRealm Databaseを使う

Blog Single

みなさん、こんにちは。

最近腹筋ローラーを買った渋谷です。

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
Posted by ShibuyaYuuki
今はPHPで開発を行なっているエンジニア。 就職してから体重が15キロ増えました!!

Other Posts: