Swiftの扱いの中でマイグレーションの方法をまとめていきます。errors元々運用していたRealmのテーブル定義を途中でプロパティを追加したり、プライマリーキーを後から追加したいことがあると思います。後から追加}するとアプリ実行させると以下のようなエラーを吐いてアプリが停止してしまいます。errors:これは既に保存されているテーブル情報と新規で操作しようとしているテーブル情報が一致しないために起きてしまいます。Swiftでは「マイグレーション」と呼ばれる機能が用意されています。ちなみに既存のデータベースデータを削除してしまえばエラーは発生しなくなりますが、ユーザーが溜めたデータをバージョンアップ(テーブル定義の変更)のたびにリセットされたらたまったもんじゃないですもんね。SDKマイグレーションとは日本語で「移行」の意味をもつ英単語です。Realmではデータの整合性を保つためにあらかじめ変更点を定義して設定に組み込んでおくことで整合性を保ってくれる機能のことを指します。マイグレーションのポイントSchemaVersionConfiguration上記のポイントは後述するのでまずはコードを見てみます。エラーを発生させないためにはRealm構造体をインスタンス化する前に下記の#1と#2のコードを実行させることです。relam.objects(User.self)}SchemaVersionRealmではmigrationの回数(version)を自分で管理する必要があります。データ変更した際は0になっているので値に1を指定します。2に変更する必要があります。変更しないと同様のエラーが発生してしまいます。2)データ型はUInt64型となっているのでマイナス値(-4)と小数点(1.4)などは指定できません。ConfigurationインクリメントしていくschemaVersionはRealm構造体のConfiguration構造体の引数に渡して使用します。{}何やら色々引数に指定できる項目がありますが、重要なのはschemaVersionとmigrationBlockです。schemaVersionマイグレーションのバージョン番号をインクリメントしながら渡します。migrationBlock引数migrationBlockには古いデータから新しいデータへと移行するために必要な処理を記述します。プロパティを追加または削除やプライマリーキーを付与したい場合は必要ありませんが、プロパティ名を変更したり値同士を結合したりする場合は明示的にここに変更を記述する必要があります。VoidMigrationBlock型はタイプエイリアスなのでコードにすると以下のようになります。oldSchemaVersionにはインクリメント前のバージョン数が格納されるのでここで中の処理を実行させるための分岐処理を行います。UI】typealias(タイプエイリアス)の使い方とメリットマイグレーションのパターンここからは以下のテーブルクラス定義で既に運用していると仮定してマイグレーションを実装してみます。}プロパティを追加する場合はschemaVersionをインクリメントするだけでOKです。}プロパティを削除する場合もschemaVersionをインクリメントするだけでOKです。""}プロパティ名を変更したい場合はschemaVersionをインクリメントして、migrationBlockの中で処理を記述していきます。renamePropertyメソッドを呼び出しonTypeにはクラス.className()を、fromには旧プロパティ名をtoには新しいプロパティ名を渡します。「"id:userName"」形式で構築}プロパティの値を連結させた新しいプロパティを追加したい場合はschemaVersionをインクリメントして、migrationBlockの中で処理を記述していきます。enumerateObjectsメソッドを呼び出すと引数から古いバージョンのオブジェクトと新しいバージョンのオブジェクトに参照できるようになります。}}プライマリーキーを付与する場合はschemaVersionをインクリメントするだけでOKです。print(userTable)}しかしもし既にプライマリーキーに設定したプロパティに重複値が格納されていた場合以下のようなエラーを吐いてアプリが停止してしまいます。移行後に重複した値を持っています。1}この場合は既に格納済みの重複値を取り除くしか方法はないのでデータを丸々削除するか、重複したレコードを除去する必要があります。おすすめ記事:【SwiftUI】Realmでプライマリーキーの設定方法!UUIDを指定Realmを操作するModelを使用している場合MVVMアーキテクチャなどに準じたアプリ設計を行なっている場合はRealmのデータベース操作をModelなどにまとめることが多いと思います。おすすめ記事:【Swift】MVVMアーキテクチャとは?ViewModelの役割その場合は以下のようにクラスのプロパティにRealmインスタンスを保持させ、CRUD処理をメソッドとして用意すると思います。}}上記のようなクラスを定義している場合にマイグレーションするにはプロパティへのRealmインスタンス格納を初期値ではなくイニシャライザを介することで実行することができるようになります。}}まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。ご覧いただきありがとうございました。13対応まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。ご覧いただきありがとうございました。友達や家族の誕生日を登録しておくと当日に通知が届きお知らせしてくれるiOSアプリです。貸し借り管理アプリお金の貸し借りを管理するためのアプリです。貸借の色が分かれているので識別しやすく、使いやすさを求めてできるだけシンプルなUIにしています。カシホン人に貸すことが多く、誰に貸したか忘れがちな本の貸し借りを記録できるアプリです。