先日Facebookのf8とかいうイベントがあった。僕は去年のf8はそこまで注目してなかったのだけど、Parseがf8に買収されたので今回は楽しみにしてました。
そしたら期待のParseからこりゃいいねという発表が2つあった。
ひとつはParseの料金体系が変わり、安くなったこと。もうひとつはオフライン時のデータベースを扱うParse Local Datastore。
特にLocal Datastoreはオフラインで使えるデータベースを実装しつつ、他のデバイスとの同期も実現したいモバイル開発者にとって死ぬほど期待の機能。ワクテカが止まらない。
なぜかAndroidのみ使えて、iOSは近日公開らしい。待ちきれん!
Parseの新しい料金体系
今までは月に一定の回数のアクセス以上は有料になりますよっていうシステムだったけど、今度は一秒間に30requestsまでだったらいくら使っても無料になった。
一秒間に40requestは月100$といった感じで、スケールしていったら高くなる。これはいいかも。ただ、気になるのはオートスケールしてくれるかってところだ。
ドキュメントを読むと、無料プランで制限を超えるリクエストが一秒間にあったらエラーが出ると。
じゃあ、普段は無料で余裕で使えてて、突然なんかの拍子でバズって、いきなりアクセス殺到してエラー連発だったら困る。こういう時に自動的にスケールして頂きたい。
でも、リミットはつけておきたいので、100$のプランにしておけば制限をその月に一回でも超えなければ自動的に無料になって、超える時があればその月は100$払うっていうシステムなんだろうか?
ここが気になる!Parseの新しいシステムでPriceの設定を見たりドキュメントを読んだかぎり、ハッキリとわからない。
100$のプランにするボタンがあるのだけど、このボタン押したら一気にその月に100$の請求来るのか怖くて試せない。
ということで、質問しておいた。
The 30 requests/second price plan can be scaled automatically?
※アップデート
残念ながらオートスケールしないみたい。100$のプランにすると、30req/sを超えてなくても請求くる。つねにエラーをチェックしてくれという悲しい返信がきた。
iPhoneアプリ同期機能の面倒さ
iPhoneアプリにデータベース機能をつける時はCoredata使うのが一般的なんだけど、アプリを他のデバイスでも同期できるようにする時に、Coredataをサーバ側のデータベースとシンクロさせるのが凄い手間。
データベースはサーバ側のみとすると楽だけど、それだと毎回読み込みが発生するので遅いし、オフライン時に使いかってが悪い。
アップル製品だけで同期すればいいという方針だとiCloudがあって、長らくぶっ壊れてて使えないと評判だったiCloud + CoredataもiOS7でいくらかましになったらしい。
でも、それでも構造上の問題でまだまだ鬼門だと海外の有名な開発者のブログとかで書いてました。僕は面倒なので、有名な人がまだまだ面倒だと言ってたら自分でチャレンジする気も起きずに悶々と過ごしてた。
理想はiOS側ではオフラインでもさくさくデータベースに保存できて、バックグラウンドでネットに繋がってたら自動で同期して、iPhoneとiPadがシンクロするといった形。
この問題で期待をしてるのが、ParseのLocal Datastore。
ParseのLocal Datastore
ParseのSDKって凄くよくできてて、データベースの実装とか本当に分かりやすく直感的なコードで書けるんですよ。
iOSのCoredataとかで書いたらすごく面倒なコードを長々と書かないといけないけど、ParseのSDKだと分かりやすくて短いコードでちゃちゃっと。
でも、Parseはもともとクロスプラットフォームで同期するためにサーバにデータをその都度送信する前提で作られてる。
一応、ParseのSDKにはキャッシュで保存する、saveEventuallyみたいなメソッドもあるんだけど、このキャッシュ機能は貧弱なもんなので、Coredata使った時みたいにはオフラインで保存して検索とか使うのは無理だった。
だから、iOSでオフラインでもサクサク保存したり、検索したり、フェッチしたりするには結局CoreData使わないといけないねっていう結論になって、iPhone/iPadで自動同期機能つけたい僕もCoredata使ってた。
で、Parseの掲示板見ても、サクサクオフラインで動くようにCoredataを使いつつ、同期機能のためにParseとCoredataを繋げる実装をみんな四苦八苦しながら頑張るという苦しみを訴えている人がたくさんいた。
Parseチームは、「今、この問題に取り組んでます。」とか一年前に書いてた。そして、一年ほどたって、Local Datastoreがやっと発表されたので期待せずにはいられない。
Coredataいらないぐらい強力だったら最高
まだiOSには対応してないから試せないのが悲しい。出たら速攻で試したい。
Local DatastoreのAndroidのサンプルコード見た限りだと、普通にParseの保存、検索などの機能がオフラインでも動きますよといったように見える。
それだと、将来同期機能を予定しているアプリに、最初からParseSDKでデータベース作ってCoredataを代替できるようになるかもしれない。
CoredataとiCloudとか、CoredataとDropboxAPIとか、CoredataとParseを上手くつなげてシンクロ機能を上手く動かすというめんどいことが一気に解決しそうなので、これは期待するなというのが無理というものです。
LocalDataStoreのコメント欄には興奮した開発者たちが、「おお、これが出たらもうCoredataとParse繋げるために今苦労してる実装いらなくなるから、いつ出るか教えてくれ!」とかみんなも期待度マックスのようです。
その気持ちは本当にわかる。僕もTaxnoteやZenyでiPhoneとiPadの自動同期機能をつけたいんだけど、実装に入るのはこれが出るまでちょっと待とうかと悩み中。
この動画の14分55秒あたりからParse創業者の発表がある。Parseの料金体系、Local Datastoreの実際のコード、AppLinkとかのデモなどがざっと全部見れるので、オススメ。特にAppLinkのデモは一見の価値あり。
※Facebook Updates Parse With Lower Prices, Improved Analytics, Offline Capabilities
*家計簿と読み上げのアプリ作ってます。自己紹介と過去ログはこちら。