【Flutter/Dart】Realm DBの導入と実装方法!

この記事からわかること
- Flutter/Dartのshared_preferencesの実装方法
- ローカルにデータを保存するには?
index
[open]
\ アプリをリリースしました /
環境
- Android Studio:Koala
- Xcode:16.0
- Flutter:3.29.2
- Dart:3.7.2
- Realm:20.0.1
- Mac M1:Sonoma 14.6.1
Flutterアプリで端末(ローカル)にデータを永続的に保存する方法
FlutterでiOS/Androidアプリを開発する際に端末(ローカル)にデータを永続的に保存する方法はいくつか用意されています。
- shared_preferences
- sqflite
- Realm
- flutter_secure_storage
- テキストファイル
それぞれに一長一短がありますが今回はRealm DB
を使用する方法をまとめていきます。
Realm DB
Realm(レルム)はiOSやAndroidなどのモバイル向けに開発されたクラスプラットフォームデータベースです。
Realmの特徴はデバイス内にデータベースを作成して使用することです。デバイス自体にデータを保存するためオフライン環境での使用も可能になっており、アプリを停止した場合にもデータが保持されているので再度起動した場合には保存されたデータを使用することが可能になっています。
対応している言語
- Swift
- Objective-C
- Java
- Kotlin
- C#
- JavaScript
Realmではデータベース操作(CRUD処理)をSQL文を使用することなくクラス(オブジェクト)を操作するようにデータベースを操作することができるのが大きな特徴です。この基本的な特徴は共通なので詳細は以下の「Realm Swift」の記事も参考にしてみてください。
Realm Flutterの導入方法
Realm FlutterはiOS、Android、Windows、MacOS、Linuxのプラットフォームをサポートしているため、異なるプラットフォームでの動作が保証されています。導入にはFlutter3.10.2
以降が必要なので注意してください。
FlutterでRealmを利用できるようにするために以下のコマンドを実行してパッケージを導入します。
これでパッケージの導入が完了し、import
文を追加すれば使用できるようになります。
データベーステーブルモデルクラス定義
Realmデータベースを扱う上でまずはデータベーステーブルとなるモデルクラスの定義が必要になります。@RealmModel()
アノテーションを付与したモデルクラスを作成しておきます。さらにパーツファイルの宣言が必要になります。このパーツファイルは後述するコマンドを実行することで自動生成されるファイルになっており、ここではpart 'ファイル名.realm.dart';
のように先に記述しておきます。
モデルの定義が記述できたらdart run realm generate
コマンドを実行してファイル名.realm.dart
ファイルを自動生成しておきます。生成されるのは対象のファイルと同階層です。
自動生成されるファイルは以下のような中身になっています。公式ドキュメントにはこのファイルもコミットに含めることが推奨されています。
Realmインスタンスの初期化
Realmを使用するためにはRealm
インスタンスを生成する必要があります。このRealm
インスタンスを使用してDBからの取得や追加などの操作を行います。初期化する際にはConfiguration
インスタンスを渡します。local
メソッドの引数に、対象のモデルクラスにschema
プロパティが自動で定義されているのでスキーマを指定します。配列になっているので複数モデルクラスがある場合はリスト形式で渡します。
データの保存
データを保存したい場合はrealm.write
メソッドの中でadd
メソッドを使用します。引数に保存対象のオブジェクを指定します。
データの取得
データを取得したい場合はrealm.all<データ型>
メソッドを使用します。Realmに保存されている対象のデータ型を全件取得することができます。
データの更新
データを更新したい場合はrealm.find<データ型>
などでオブジェクトを取得した後にオブジェクトのプロパティをそのまま更新すればOKです。ただしwrite
メソッドの中で実行する必要があるので注意してください。
データの削除
データを削除したい場合はrealm.find<データ型>
などでオブジェクトを取得した後にdelete
メソッドを使用します。こちらもwrite
メソッドの中で実行する必要があるので注意してください。
管理クラスに切り出してみる
ローカル保存・取得の機能を管理用クラスとして切り出してみました。_instance
からシングルトンインスタンスを参照できるようになっています。全コードは「GitHub」に公開しているので参考にしてください。
UI部分は以下のように実装してみました。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。