26
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Realm でマイグレーションするときのバージョン問題の対応

はじめに

Android の Realm のマイグレーションのサンプルコードを見ると、

The API for migration is currently using internal lower level classes that will be replaced by a new API very soon! Until then you will have to explore and use below example as inspiration.

なんて記述があり、まだまだマイグレーションの API が荒削りなのが現状です。

で、実際にマイグレーションを考えた時に、バージョンの問題にぶつかったのでその時のメモです。
同じ問題に悩んでいる方、これから導入を考えている方などの参考になれば幸いです。

マイグレーション手順

詳細な手順については、サンプルコードを見ていただければわかると思うので割愛します。

下記コードはサンプルコードの抜粋です。マイグレーションは Realm のバージョンを見て、必要な処理を段階的に実行し、最新化するという流れです。

Migration.java
public class Migration implements RealmMigration {
    @Override
    public long execute(Realm realm, long version) {

        // Migrate from version 0 to version 1
        if (version == 0) {
            // マイグレーション処理
            version++;
        }

        // Migrate from version 1 to version 2
        if (version == 1) {
            // マイグレーション処理
            version++;
        }

        return version;
    }
}

問題点

スキーマが進化しつづけようと、インストール時などの初回セットアップ時にはバージョンが 0 となります。そのため、適切なバージョンにアップデートしてあげないといけないのですが、その方法が用意されていません。

対応方法

初回起動時、Realm のファイルの存在チェックをして、ファイル生成後に以下のマイグレーションコードを実行してあげれば OK です!

Realm.migrateRealmAtPath(file.getAbsolutePath(), new RealmMigration() {
    @Override
    public long execute(Realm realm, long version) {
        return 2; // 現在のスキーマのバージョンをセットする
    }
});

中の人の回答なので、これがいい方法なのかなと思います。
https://github.com/realm/realm-java/issues/886

マイグレーションの API は、現在 v2 を開発中のようなので、動向が気になる方は、以下をチェックするといいと思います。
https://github.com/realm/realm-java/pull/880

おわりに

公式 Twitter のメッセージ、GitHub の Issue のどちらもかなりレスポンスが早く、とても好感を持つようになりました。

まだまだ情報が少ない現在ですので、実際に導入されている方がいましたら情報交換させていただけると嬉しいです!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
26
Help us understand the problem. What are the problem?