Realmとは?
iOS/Androidアプリを作成する時に、サーバーにデータを置かず、アプリでデータを保存しておきたい仕様が出てくる事があります。
そういったアプリ内でデータを保存・編集する際にDBを簡単に構築する事ができるライブラリ。
主に以下の特徴があります。
- SQLiteなど他のDBライブラリより早い
- マルチプラットフォーム
- Swift
- Kotlin
- Objective-C
- Java
- JavaScript
- .Net
- スレッドセーフ
iOS、Android両プラットフォーム対応しているので、チーム間でDB仕様を合わせやすくなり、
特にiOSでDBライブラリとして採用される事が多い定番ライブラリです。
この記事では基本的な使用方法を解説していきます。


前提
当記事を執筆中の環境は以下の様になっています。
- macOS Catalina 10.15.6
- Xcode 11.6
- RealmSwift 5.3.3
インストール方法
Realmをインストールするにはライブラリをダウンロードして直接インポートする方法の他に以下があります。
- 最新のRealmをインストールするためにコマンドラインから
pod repo update
を実行して、CocoaPodsのSpecリポジトリを更新してください。 - Podfileに
use_frameworks!
と追加します。そしてアプリケーションとテストのターゲットに対してpod 'RealmSwift'
と追加してください。 - コマンドラインで
pod install
を実行してください。 - CocoaPodsによって作られた
.xcworkspace
ファイルを開いてください。
- Cartfileに
github "realm/realm-cocoa"
を追加してください。 - コマンドラインで
carthage update
を実行してください。 RealmSwift.framework
とRealm.framework
をCarthage/Build/
ディレクトリ内の各プラットフォームのディレクトリから適切なものを選択し、Xcodeの“General”タブにある“Linked Frameworks and Libraries”にドラッグしてください。- アプリケーションのターゲットの“Build Phases”の“+”ボタンをクリックし、以下のような“New Run Script Phase”を追加します。
/usr/local/bin/carthage copy-frameworks
このとき、“Input Files”にはフレームワークのパスを指定します。例:$(SRCROOT)/Carthage/Build/iOS/Realm.framework
$(SRCROOT)/Carthage/Build/iOS/RealmSwift.framework
オリジナルはこちら
モデルを作成
プロジェクトにRealmSwiftライブラリを追加できたら、Realmに保存するモデルオブジェクトの生成を行います。
ObjectはNSObjectのサブクラスになるので、classで定義します。
プロパティでnilを許可する値にはOptionalで定義します。
Realmインスタンス生成
Realmインスタンスのコンストラクタはexceptionを投げてくるので、メソッド前にtryを書く必要があります。
公式などでは try! で定義していますが、この呼び方だとRealmインスタンス生成に失敗した場合クラッシュしてしまうので、あまりオススメはしません。
Realmにデータを保存する
Realm.write
のクロージャの中でRealmインスタンスに書き込み処理を行えるので、Realm.add
でHomeContentを追加できます。
Realmからデータを取得する
Realm.objects
で引数に指定したclassの配列を取得できます。
Realmに登録した情報を更新する
更新したいオブジェクトをRealm.objects
から抜き出して、Realm.write
クロージャの中で抜き出したオブジェクトのプロパティを変更することで、Realm内データも更新されます。
Realmに登録した情報を削除する
削除したいデータをRealm.objects
から抜き出して、Realm.write
クロージャの中でそのオブジェクトをRealm.delete
の引数に渡してあげると削除できます。

Realm使用感まとめ
モデルオブジェクトの受け渡しで操作を行えるので、コードセーフにデータを扱う事ができるので、アプリにデータを保存する必要があるアプリを作成する場合は使用する事を検討するのはありだと思います。
Realmを使用した個人開発アプリをリリースしました。
