【RealmSwift】マイグレーション処理をする

これをせずに、モデル変更 → エラーかます → ググる を繰り返してるので、覚えるためにもまとめます。w

マイグレーションとは

モデル定義が変わったときに、既存データを新規データの仕様に移行することです。
公式ドキュメントの例を少し拝借すると、例えば、以下のようなユーザー情報を保持するモデルクラスがあるとします。

次のアップデートで「名前を1つに統一する」仕様になったとします。
そうすると、

こんな感じになります。
この fullName は、firstName + lastName となり、既存データ(Ver1.0.0)を新規データ(Ver1.0.1)の仕様に移行する必要があるので、マイグレーションが必要になります!

ちなみに、この「マイグレーション」という用語自体は Apple や Realm 特有のものではなく、一般的なデータベース用語です。
データベースとか特に詳しくなかったので、最初は特有のものと思ってました( ゚д゚ )

実装

先ほどのユーザーを例に実装していきます。
マイグレーションは結構簡単で、AppDelegate に以下のようなコードを挿入したら完了です。

【2020年7月20日】最新コードを掲載。

基本的にやってることは変わりませんが、すっきりした印象です。
以前のコードも残しておきます!

データ構造を変えるたびに、schemaVersion をインクリメントしていけば大丈夫です。

注意する点

このマイグレーション処理で気をつけたいのが、アプリのアップデートを飛ばすユーザーもいるということです。
Ver1.0.0 をインストールしているユーザーが、Ver1.0.1 を飛ばして Ver1.0.2 にアップデートするかもしれません。
なので、マイグレーション処理はネストせず、比較も「 < 」で行うことです。

ここ失敗するとユーザーが離れる事態になりかねないので、慎重に作業していきましょう (·ω·`*)

違うよ!とかこういう方法あるよ!ってのがあれば教えてください。
では( ¯·ω·¯ )

コメント