Core Dataライブラリと便利ツールの紹介

iOSアプリにおいて、Core Dataは永続的で大きなオブジェクトグラフが取り扱えるモデルを提供する。
多くの有名アプリで使われているけど、複雑だしそのまま使おうとすると開発効率が悪い。

Core Dataを置き換えようとするライブラリが多くあるが、さらに多くのライブラリはCore Dataをよりよくしようとするものだ。
それらのライブラリは糖衣構文(シンタックスシュガー)からフルスタックのフレームワークまで幅広い。

本記事では、CoreDataを取り扱うオープンソースのライブラリを紹介する。
あなたのCore Data要件にマッチするものを見つけて下さい。

ライブラリ一覧

ラッパー


Magical Record
Saul
Mora
http://ghbtns.com/github-btn.html?user=magicalpanda&repo=MagicalRecord&type=watch&count=true
Objective-Record Marin
Usalj
http://ghbtns.com/github-btn.html?user=mneorr&repo=Objective-Record&type=watch&count=true
SSDataKit Sam
Soffes
http://ghbtns.com/github-btn.html?user=soffes&repo=SSDataKit&type=watch&count=true
ios-queryable Marty
Dill
http://ghbtns.com/github-btn.html?user=martydill&repo=ios-queryable&type=watch&count=true

ReactiveCoreData
Jacob
Gorban
http://ghbtns.com/github-btn.html?user=apparentsoft&repo=ReactiveCoreData&type=watch&count=true

アダプター

RestKit Blake
Watters
http://ghbtns.com/github-btn.html?user=RestKit&repo=RestKit&type=watch&count=true

AFIncrementalStore
Mattt
Thompson
http://ghbtns.com/github-btn.html?user=AFNetworking&repo=AFIncrementalStore&type=watch&count=true
MMRecord Conrad
Stoll
http://ghbtns.com/github-btn.html?user=mutualmobile&repo=MMRecord&type=watch&count=true

SLRESTfulCoreData
Oliver
Letterer
http://ghbtns.com/github-btn.html?user=OliverLetterer&repo=SLRESTfulCoreData&type=watch&count=true
Overcoat Guillermo
Gonzalez
http://ghbtns.com/github-btn.html?user=gonzalezreal&repo=Overcoat&type=watch&count=true
Mantle GitHub http://ghbtns.com/github-btn.html?user=github&repo=Mantle&type=watch&count=true

シンクロナイザ

TICoreDataSync Tim
Isted
, Michael Fey,
Kevin
Hoctor
, Christian Beer,
Tony
Arnold
, and Danny Greg
http://ghbtns.com/github-btn.html?user=nothirst&repo=TICoreDataSync&type=watch&count=true

UbiquityStoreManager
Maarten
Billemont
http://ghbtns.com/github-btn.html?user=lhunath&repo=UbiquityStoreManager&type=watch&count=true
FireData Jonathan
Younger
http://ghbtns.com/github-btn.html?user=overcommitted&repo=FireData&type=watch&count=true

ユーティリティ

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ライクだが、言語に統合されたものだ。
NSPredicateNSSortDescriptorのようなキーバリューコーディングは、以下のようにいい感じの構文になる:

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はAFNetworkingSLCoreDataStack上に構築されたもので、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のサブクラス。こっちはカスタムなロジックを記述するためのもので、生成以降は上書きされない。

いかがでしたでしょうか。
万能薬は存在しませんが、用途ごとに合ったものを使う事で劇的に開発効率は向上するでしょう。

(翻訳元: Core Data Libraries & Utilities – NSHipster)

Twitter Bootstrapで良いアイコンが無い?じゃあFontAwesome使おう!

FontAwesome

Twitter Bootstrapのglyphicon便利ですよね!手軽に色んなアイコンが使えて。
でもなんか足りない!こう、もっとこういうのが欲しい!!って時にオススメなのがFontAwesomeです。

FontAwesome-icons

紹介しきれないぐらいに沢山のアイコンが揃っています!!
twitterやfacebookなどの有名サービスのアイコンも用意されているので、これさえあれば滅多に困らないと思います。

BowerでJavaScriptのライブラリをラクラク管理

bower-logo

最近はどの言語でもモジュールのパッケージ化の考え方が進んでいますね!
NodejsのnpmやRubyのGemはとても一貫性が高くて好きです。
そして、その潮流はクライアントサイドのウェブ開発分野にも及んでいます。
TwitterがBowerというJavaScript/CSSのライブラリをパッケージ管理できるツールを公開しています。
これを使えば、ライブラリ間の依存関係をあまり意識せずに、手間をかけずに使う事ができますね!

Ruby on Railsでも簡単に使えるようなgem bower-railsが提供されています。
至れり尽くせりですね!

Railsで使う場合の使い方をざっとご紹介します。
インストールはnpmのコマンド一発。

#!bash
$ npm install -g bower

以下の行をGemfileに追記しましょう。

#!ruby
gem 'bower-rails', '~> 0.6.1'

依存関係はBowerfileという名前のファイルに以下のように記述します。

#!ruby
assets_path "assets/javascripts"

# Puts files under ./vendor/assets/javascripts
group :vendor do
  asset 'jquery'    
  asset 'jquery-ui' 
  asset 'jquery-ui-touch-punch' 
  asset 'jquery-ujs' 
  asset 'jquery-placeholder' 
  asset 'jquery.tagsinput' 
  asset 'modernizr' 
  asset 'bootstrap-select' 
  asset 'bootstrap-switch' 
  asset 'bootstrap3-typeahead' 
  asset 'BigVideo.js' 
end

使いたいライブラリがBowerにあるか調べるには、以下のコマンドを実行します。

#!bash
$ bower search <keyword>

gemとかpodと一緒ですね!
準備ができたらインストールしましょう。

#!bash
$ rake bower:install

これで、vendor/assets/javascripts/bower_components のディレクトリ下にインストールされます。
また、Bowerを単体で使う時に必要なファイルがvendor/assets/javascripts/bower.jsonに生成されているのが確認できます。

使ってみた感想としては、Rails用のgemがあるならそっちを使った方がすんなり動く印象です。
js単体のライブラリなどの使用に適しているのではと思いました。

MicrosoftがWindows 9を来年4月にリリースするとの噂

情報元: Microsoft reportedly planning Windows 9 release in April 2015

windowsbluestock_large_verge_medium_landscape

WindowsウォッチャーのPaul Thurrottによると、Windows 9を2015年の4月あたりにリリースする予定である事を報じました。
コードネームは「Threshold」だそうです!
Metroというデザイン言語も「Metro 2.0」を目指して改良されるのだとか。

どんなWindowsになるのか楽しみですね!

時間と場所を超えてピアノセッションするMirrorFugueが凄い

mirrorfugue

MITメディアラボのXiao Xiaoという研究グループが作ったピアノのインスタレーション「MirrorFugue」。

過去に、別の場所で行われた演奏が、MirrorFugue上で再生されるんですが、その方法が斬新!
ピアノの前面と鍵盤にプロジェクションマッピングされて、演奏者の顔と指の動き、更には鍵盤も再現されます。
その再生中のピアノの演奏に別の人が加わる事で、時間と場所を超えてコラボレーションする、というコンセプトの作品。

MirrorFugue: Conversations with my Reflection from Xiao Xiao on Vimeo.

坂本教授も面白そうに演奏しています。笑

Ryuichi Sakamoto improvising to Satie on MirrorFugue from Xiao Xiao on Vimeo.

情報元: MirrorFugue: Music collaboration across space and time

Google ChromeでDNSキャッシュをクリアする方法

ドメインを持っている人は、DNSレコードの設定がなかなか反映されなくてやきもきした事が一度はあるはず。
nslookupコマンドではしっかり反映されているのになんで??と思う事もしばしば。

実は、Google Chromeはホスト・リゾルバのキャッシュ機構があります。
このキャッシュをリセットする方法をご紹介します!
下記URLにアクセスしてください:

chrome://net-internals/#dns

Google Chrome Host Resolver Cache

ずらずらっと、キャッシュされているホスト情報が表示されるかと思います。
このページの、”Clear host cache”というボタンをクリックするだけ!
キャッシュされていたホスト情報が一掃されましたね!