ぼっちiOS開発者がParse(Parse.com)使った結果wwwwwwwww tech.kayac.com Advent Calendar 2013

このエントリーはtech.kayac.com Advent Calendar 2013の7日目のエントリーです。

いきなり釣りっぽいタイトルで申し訳ありません。

LobiチームでiOSエンジニアをしております@_somtdです。

今回急遽、@soh335さんのバーターとしてAdvent Calendar 2013にて寄稿させていただいております。

大変光栄な機会をいただきありがとうございます!

普段はカヤック社内でも屈指の大人数チームで開発をやっているのですが週末はぼっちでiPhoneアプリなどを開発しております。 今回は、ぼっちiOS開発者の強い味方!Parseについて書こうと思います。

Parseって何?

ここで改めて説明をするよりも、ものすごく簡潔にまとまっているスライドがありましたのでシェアさせていただきます。

一言でいうなれば

Parse は BaaS ( Backend as a Service)モバイルアプリ開発のサーバサイド部分を肩代わりしてくれる

につきると思います。

Parseは2013年の前半にfacebookに買収されたというビッグニュースがあったことから記憶に残っている方も多いかと思います。

今後もサービスは継続されるとのことですが、この買収をきっかけにしてParse.comをはじめとしたモバイル開発者向けBaasが広く知られるようになったとも言えるのではないでしょうか。

Parseを無料のまま使い続けることができるか

モバイル開発者にとってサーバを保有することなくPush通知をはじめとする環境を持つことができることはParseを利用する大きなメリットでしょう。 しかし当然のことながら、無料で利用できる範囲が限られており、

2013年12月の時点では無料アカウントで使うことができるAPIリクエストは1ヶ月あたり100万回、プッシュ通知も100万回となっています。 APIで1ヶ月100万回リクエストまで無料と聞くと、なんとなく収まりそうな気がしないでもないですが199($/月)の影に怯えて暮らすのも精神衛生上良くありません。

そこで今回は、Parseで取得する情報を効率的に端末にローカルキャッシュしておくことでAPIリクエストの回数を抑えたいと思います。

想定されるアプリ

とはいえ、全てのアプリにとってローカルキャッシュをすることが効率的ともいえないので、今回は以下のようなアプリを想定してローカルキャッシュを実装する手順を紹介したいと思います。

コンテンツを外部から更新したい

例えばイベント情報などの静的なコンテンツを定期的に更新するようなアプリです。

アプリ上に表示するデータはCoreDataを経由する

キャッシュにCoreDataを使います。(表示するためのデータを直接ParseのAPIから取得しないというとです)

ローカルキャッシュのしくみ

基本的には以下の記事の内容通りに進めています。自分のアプリに応じて適宜、書き換えていただければと思います。

How To Synchronize Core Data with a Web Service ? Part 1

How To Synchronize Core Data with a Web Service ? Part 2

非常に長いチュートリアルになっておりますので、要点をあげておきます。詳細については手前味噌ですが記事をリンクしておりますので参照してください。

<手順1>Parse.com上に自分のプロジェクトを作成して、いくつかのデータを追加する。

Parse.com上に自分のプロジェクトを作成して、いくつかのデータを追加する。ーParseでローカルキャッシュ(1)

Parse.com上での準備作業について説明しています。

<手順2>Xcode上でプロジェクトを作成し、"ParseSDK"と"AFNetworking"を導入する。

Xcode上でプロジェクトを作成し、"ParseSDK"と"AFNetworking"を導入する。ーParseでローカルキャッシュ(2)

ParseSDKの導入とAFNetworkingを使ったAPI Clientの作成について説明しています。

<手順3>同期用のクラス"SyncEngine"とCoreData周りの処理を追加する。

同期用のクラス"SyncEngine"とCoreData周りの処理を追加する ーParseでローカルキャッシュ(3)

SyncEngineの役割についてまとめています。

<手順4>アプリ起動時に同期の処理を行う。

アプリ起動時に同期の処理を行う。ーParseでローカルキャッシュ(4)

SyncEngineとCoreDataControllerを組み込み終え、モデルの作成を終えれば同期の処理を試すことができます。

ぼっちiOS開発者がParseを使ってみた結果

これまでサーバが必要そうなアプリのアイデアが浮かんだときも自分で実装することを考えたり、サーバ技術者にお願いしようかを考えたりしているうちにつくるモチベーションが継続しなくなり、頓挫してしまうようなことがよくありました。

しかしParseと出会ってからは「いっちょParseで動かしてみるか〜」という勢いで作りきってしまうことができるようになったので、自分にとって大きな変化をもたらしてくれたサービスだと思っています。

Baasを使う上で、どうしてもコストのことをネックと考えてしまいがちですが、今回ご紹介したローカルキャッシュする方法などでAPIのリクエストを節約することができれば多少は気にならなくなるかもしれないですね。

あとは、Parseが気に入ったらこういったものも出てきているので自分で作って管理してしまうというのもアリなのかもしれません!

さて明日は、弊社きってのイノセントボーイあるいはJKerの

がありがたいお話をしてくれるようです!期待!