はじめに謝っておきます。タイトルに悪意はありません。ごめんなさい。
私自身SQLiteを直にいじる機会が多いですし・・・。SQL直に叩くの結構好きです。
今回は貴重なCoreData本が出たのでご紹介。
CoreDataは歴史が長いわりには専門に扱った書籍は思いの外少なく、日本語で書かれている書籍は数冊程度だと思います。
そんなCoreData書籍冬の時代の中で、ほんの少しだけなのですが査読のお手伝いをさせていただいた、『Swift+Core DataによるiOSアプリプログラミング』という日本ではおそらく初めての、Swiftを使ってCoreDataを解説
する書籍が、2016年02月27日に出版されました。
Swift+Core DataによるiOSアプリプログラミング(AA)
発売された書籍を早速読んでみたので紹介します。
でもCoreDataって使う意味あるの?
永続的なデータを管理する場合、NSUserDefaultでいいっていう場合もあるでしょうが、まずDBを使いますよね?
DBを扱う場合、たいていは次の3つから選ぶかと思います。
- SQLiteをそのままいじる (FMDB含む)
- Realm
- CoreData
SQLiteをそのままという人はSQLをそのまま扱うので、SQLが好きな人。SQL構文を使わずデータをオブジェクトで扱いたい人は、Realm、CoreDataといったところでしょう。
最近ではRealmの勢いがすごく、CoreDataからRealmに変えたというデベロッパーの声も聞きます。
ではCoreDataはもう不要なのかというとそうではなく、むしろAppleが用意しているフレームワークだからこそのメリットもあります。
これからアプリを作成する上でDB操作をどのフレームワークを使うかで悩んだ際には、本書を読んでCoreDataの特性を理解した上で改めて考えるとよいでしょう。
私の印象ですが、CoreDataは複雑で取っつきにくい感じを持っていたのですが、それについては著者である西方さんも否定していないようで、本文中にこのように書かれています。
「確かに複雑で扱いにくい点があることは否定できませんが、それでも、Core Dataを使うことで開発効率は格段に向上します。」
P.004 (1-2 Core Data の魅力)
具体例としてあげられている項目としては以下のものが書かれています。
- UI の更新と連動したオブジェクトの管理
- 変更の管理
- 検証とエラーハンドリング
- モデルエディタの使用
- パフォーマンスへの配慮
- 並列処理
読み進めていくと、他にもCoreDataでなければ難しいであろう点についてわかってきます。
コードはすべてSwift
文中のコードは書籍タイトルのように、Swiftで書かれているのが1つ特徴としてあげられます。
Objective-Cの書籍はありますが、Swiftで書きたい場合に脳内で変換する必要があります。Swiftから入った開発者はObjective-Cのコードを見た時点で本を閉じてしまうかもしれませんが、Swiftで説明されている本書であれば安心です。
発売されたばかりということもあり、コードもそのまま使えるので便利です。
iCloud共有
11章まではCoreDataの説明や、踏み込んだ効率化、応用などになっていて、ここまで読むと一通りCoreDataを使えるようになるのですが、12章ではさらにCoreDataでの強みであるiCloudの共有について1章使っています。
iCloudは常につながっているわけでもないですし、アカウントが変わってしまう場合もあります。さらにデータの衝突する可能性もあったりと、面倒ですが処理しなければならない(考慮しなければならない)事項がありますが、基本的にこれらをどのように処理をすればよいのか書かれているのはもちろんですが、
重複データ数が多くなることが予想されたり、バックグラウンドでの処理が望ましいケースなどでは、フェッチ時にバッチサイズ(fetchBatchSize)を設定して、バッチサイズごとにコンテキストを保存するなどの工夫が必要です。
P.384 (12-3 アカウントとデータの管理)
このようにヒントも書かれていて、CoreDataの強みをすぐに生かすことができると感じました。
まとめ
CoreDataを使わず、SQLiteやORMを使っている人や、CoreDataを知らない人、自分のようにCoreDataに挫折(?)した人は、まず読んでみることをおすすめします。
意外とあっさりと”ああこうやればいいのか”という気づきがあると思います。
DBを扱うアプリを作成するのであれば、CoreDataを知る上でまさに買いであるといえるでしょう。
Swift+Core DataによるiOSアプリプログラミング(AA)
Swiftについては「Swift 2 標準ガイドブック」をどうぞ(宣伝)