忍者ブログ

佐崎司と愉快な仲間達

ゲーム、アニメ、CG、iOS開発など思いついたことを記事にしています。 管理人が3人いますので、記事にまとまりはないと思います。 iPhoneアプリのレビュー依頼も受け付けています。

CoreDataのマイグレーションを使用しない方法

わか

iOSにはCoreDataというデータベースを扱う機能がありますが、これを導入するにあたって個人的にしたことを記載します。

・概要
CoreDataを使用すると大量のデータを効率良く取得できます。
100件程度のデータ数であればNSDictionaryやNSArrayなどで処理した方が早いですが、
1000件を超えたあたりからCoreDataを使用した方が早くなります。
CoreDataを使用するにあたってMagicalRecordというラッパーがGitHubで公開されており、
簡単に使用することができます。

・問題だと感じたこと
CoreDataはスキーマ(データベース構造)が変更されると以前に保存されていた全てのデータを取得できなくなります。これはデータモデルを追加したり変更したりすることで発生します。
マイグレーションという処理を行うことで変更前のデータベースと現在のデータベースを整合して取得できるようにする機能もあるようですが、使用するのは結構難しい印象を受けました。(整合処理は複雑なので不具合も発生しやすそうです)
CoreDataを使用したアプリをリリース後、CoreDataの内容を追加したバージョンをリリースすることが今後あると思います。追加の際に毎回マイグレーションを使用するのは大変だなと感じました。

・個人的にしたこと
マイグレーションを使用するのは避けるため、予め未使用のデータモデルをいくつか追加しました。既に使用しているデータモデルに関しても未使用のエンティティを追加しておき今後、新たに追加する必要がないようにしました。
予め追加しておけばスキーマは変更されませんので、マイグレーションを行う必要もありません。未使用のデータモデルやエンディティが存在することで不都合が生じることはないと思います。

ただ、一度追加したエンティティ名を後で変更することはできないので、ソースの可読性は低くなります(変更するとスキーマ変更になります)。また必要なデータモデルを予め作成していなかった場合、結局マイグレーションしなければならない状態も考えられます。どうしてもマイグレーションをしたくない人か、データベースの変更があまり必要ない場合のみ有効かもしれません。

データベースは考慮することが多くて大変ですね・・・。

拍手[0回]

PR