iOSアプリにおいて、Core Dataは永続的で大きなオブジェクトグラフが取り扱えるモデルを提供する。
多くの有名アプリで使われているけど、複雑だしそのまま使おうとすると開発効率が悪い。
Core Dataを置き換えようとするライブラリが多くあるが、さらに多くのライブラリはCore Dataをよりよくしようとするものだ。
それらのライブラリは糖衣構文(シンタックスシュガー)からフルスタックのフレームワークまで幅広い。
本記事では、CoreDataを取り扱うオープンソースのライブラリを紹介する。
あなたのCore Data要件にマッチするものを見つけて下さい。
ライブラリ一覧
ラッパー
アダプター
シンクロナイザ
ユーティリティ
mogenerator |
Jonathan ‘Wolf’ Rentzsch |
http://ghbtns.com/github-btn.html?user=rentzsch&repo=mogenerator&type=watch&count=true |
ラッパー
ラッパーライブラリはいくつかの糖衣構文や便利メソッド群を提供するもの。
Core Dataの冗長で複雑なAPIを簡単にしてくれる。
例えば、新しいManaged ObjectをManaged Object Contextに挿入するには、NSManagedObject
でもNSManagedObjectContext
のクラスメソッドではなく、NSEntityDescription
のものを呼び出す必要がある。
それは、NSEntityDescription +insertNewObjectForEntityForName:inManagedObjectContext:
だ。
わかりにくい!
Core Dataのこのような分かりにくいAPIをラフにラップするオープンソースのライブラリが沢山存在している。
AppDelegate
の外でMainコンテキストとPrivateコンテキストを管理できるものや、クエリの生成を簡単にできるものなどなど。
SSDataKit
Core Dataのアプリケーションを書くのには、多くのボイラープレート(初めに必要なコード)が必要だ。
これはだるい。
SSDataKitはこれを楽にする。
Active Recordにインスパイアされたもの
ある方法論を学んだら、それを別の技術にも適用しようというアイデアは何も驚くものではない。
Active Recordに詳しいRubyプログラマーがiOSアプリの開発に流入した事によって、それは起こった。
Magical Record
MagicalRecord
はRuby on RailsのActive Recordの取得方法にインスパイアされたもの。
このコードのゴールは、Core Data関連のコードをクリーンアップし、シンプルで、一行で取得できる、かつ最適化のためにNSFetchRequest
を変更できる余地を残す事。
Objective-Record
ライトウェイトにActiveRecord的にCore Dataのオブジェクトを取り扱えるもの。
シンタックスはRuby on Railsに酷似している。
AppDelegateのコードはなし。
Kiwi
で完全にテストされたライブラリだ。
LINQにインスパイアされたもの
面白いことに、.Netから来た開発者も、同じように慣れ親しんだパラダイムをiOS開発でも行おうとする。
それは、LINQのパラダイムだ。
LINQはSQLライクだが、言語に統合されたものだ。
NSPredicate
やNSSortDescriptor
のようなキーバリューコーディングは、以下のようにいい感じの構文になる:
from c in SomeCollection
where c.SomeProperty < 10
select new {c.SomeProperty, c.OtherProperty};
ios-queryable
ios-queryable supports LINQ-style query composition and deferred execution, and implements a subset of IEnumerable’s methods, including where, take, skip, orderBy, first/firstOrDefault, single/singleOrDefault, count, any, and all.
ReactiveCocoaにインスパイアされたもの
ReactiveCocoa は、Objective-CでFunctional Reactive Programmingのパラダイムを可能にするライブラリ。
それをCore Dataにも使ったものが存在する。
ReactiveCoreData
ReactiveCoreData (RCD)は、ReactiveCocoaの世界にCore Dataを持ち込もうとするもの。
アダプタ
ほとんどのiOSアプリはウェブサービスと通信する。
Core Dataを使うアプリにとって、RESTまたはRPCスタイルのウェブサービスからレコードを取得・更新・削除する事は共通だ。
ローカルのキャッシュとサーバ側との一貫性を保持するのは、トリッキーだ。
オブジェクトを常に最新の状態に保ち、重複を削除して、APIのエンドポイントとエンティティをマップし、衝突を調整し、ネットワーク到達性を管理する…これらは頑健なクラサバ型アプリの作成においてデベロッパが直面するいくつかの問題だ。
幸運な事に、これらの心配を軽減するライブラリが多く存在する。
RestKit
RestKitは、RESTfulなウェブサービスとクライアントを連携させるためのiOSとMac OS Xで動作するモダンなObjective-Cフレームワークだ。
Core Dataとシームレスに統合するオブジェクトマッピングエンジンを提供し、AFNetworking
上に構築されたプリミティブなHTTP通信機能群を提供する。
エレガントで入念にデザインされたAPIによって、RESTfulのモデリングは魔法のように簡単になる。
AFIncrementalStore
AFIncrementalStoreはNSIncrementalStore
のサブクラスで、AFNetworking
を使ってプロパティとリレーションシップが必要な時に自動で取得してくれる。
MMRecord
MMRecordはブロックベースでシームレスにウェブサービスと統合できるiOSとMac OS Xで動作するライブラリ。
Core Dataモデルの構成を利用して、APIのレスポンスから自動的にオブジェクトグラフを作成する。
どのネットワークライブラリでも動作するようにできていて、シンプルな導入方法を提供する。
SLRESTfulCoreData
SLRESTfulCoreDataはAFNetworking
とSLCoreDataStack
上に構築されたもので、JSON REST APIとCore Dataモデルを数分で統合できる。
Overcoat
OvercoatはAFNetworking
の拡張で、デベロッパに簡単にMantleモデルオブジェクトが使えるようにする。
Mantle
MantleはCocoaとCocoa Touchアプリケーションで簡単にモデルレイヤーを記述できるようにする。
シンクロナイザ
アダプターはRESTなどの一般的な用途のインターフェースを通じて情報を同期するのに対して、シンクロナイザはもっと直接的なプロトコルを用いて、よりよい統合性とパフォーマンスを提供する。
TICoreDataSync
MacとiPhone、iPhone同士、iPhoneとiPadなど、デバイス間でCore Dataを自動で同期する。
UbiquityStoreManager
UbiquityStoreManagerはCore DataでiCloud統合を実装するコントローラ。
FireData
FireDataはシームレスにCore DataとFirebaseを統合する。
ユーティリティ
Mogeneratorを紹介しないで、Core Data系ライブラリを紹介しているとは言えないだろう。
MogeneratorはiPhone以前の時代から存在し続けている、Core Dataを使ったアプリケーションの開発において欠く事ができないツールだ。
Core Dataはここ数年で大きく変わったのに、Apple提供のツールは機能性に乏しいままだ。
でも幸運なことに、Wolf Rentzsch氏がカバーしてくれた。
Mogenerator
Mogeneratorはコマンドラインツールで、.xcdatamodel
ファイルを渡すとエンティティごとに2つのクラスを生成する。
1つめのクラスは_MyEntity
で、マシン向けのもので継続的に上書きされ、データモデル設計と同じ状態に保たれる。
2つめのクラスはMyEntity
で、_MyEntity
のサブクラス。こっちはカスタムなロジックを記述するためのもので、生成以降は上書きされない。
いかがでしたでしょうか。
万能薬は存在しませんが、用途ごとに合ったものを使う事で劇的に開発効率は向上するでしょう。