dasukoの技術ブログ

現役エンジニアのブログです。

【Swift】Realmを使ってみた

Realmとは

Realmとはモバイル向けのデータベース管理システムライブラリです。

オープンソースで実装も確認することができます。

github.com

iOSはこちら

github.com

 

ちなみにRealmがサポートしている言語はSwiftだけではなく、以下のような言語をサポートしています。

Realmの特徴

データベースアクセスが高速

Realmの特徴はなんと言ってもデータベースアクセスが高速であることです。

SQLiteよりも高速であると言っているので、かなり速いですね。

こちらの記事でもSQLiteとのパフォーマンスの比較をしていますが、

InsertでもSelectでもReadでもUpdateでもRealmの方が速いという結果になっています。

tech.iheart.com

実装がシンプル

Realmはかなり直感的に理解できる非常にシンプルなライブラリです。

また、オープンソースなので実装をいつでも確認できるというのも大きいですね。

後述しますが、モデルクラスも簡単に定義できます。

インストール

インストール方法としては、以下の選択肢があります。

インストールの選択肢が多いのも魅力の一つかもしれないですね。

  • Dynamic Framework
  • Swift PM
  • CocoaPods
  • Carthage

CocoaPodsでインストール

今回はCocoaPodsでインストールしました。

CocoaPodsでインストールする場合はPodfileに以下を追加して、pod installします。

pod 'RealmSwift'

実装

Realmの初期化

Realmを初期化する場合は以下のようにします。

let realm = try! Realm()

引数にConfigurationを渡して、インメモリで使用するようにすることも可能です。

モデルの定義

モデルを定義する場合はObjectを継承したクラスを実装します。

Realmでサポートしている型はBoolIntInt8int16Int32Int64DoubleFloatStringDateDataです。

上記の型を使用する場合は、@objc dynamicをつける必要があります。

class Model: Object {
    @objc dynamic var name: String? = nil

オブジェクトの取得

Realmのデータベースからオブジェクトを取得する場合は以下のように書くことができます。

let realm = try! Realm()
let model = realm.objects(Model.self).first

filterを使うこともできます。

let realm = try! Realm()
let model = realm.objects(Model.self).filter("id == \(id)").first

オブジェクトの追加

Realmのデータベースにオブジェクトを追加する場合は、writeブロックを使用します。

let realm = try! Realm()
let model = Model()

try! realm.write {
    realm.add(model)
}

オブジェクトの更新

Realmのデータベース内のオブジェクトを更新する場合は、データベースからオブジェクトを取得し、

writeブロック内でオブジェクトの値を変更します。

let realm = try! Realm()
let model = realm.objects(Model.self).filter("id == \(id)").first

try! realm.write {
    model.name = "Model"
}

まとめ

Realmは高速なデータベースである上に、非常にシンプルに実装することができ、

わからない点があってもオープンソースであったり、ドキュメントが公開されていたり、利用している人が多いこともあって すぐに調べて解決することができます。

データベースを更新するときにはMigrationが必要になるので、その点だけ注意です。

(詳しくは以下参照)

docs.mongodb.com

参考

github.com

docs.mongodb.com