2013年5月15日水曜日

「モバイルアプリのバックエンド(Web API)に特化したサービスのまとめ」のその後(2013年版)

1年ほど前にモバイルアプリのバックエンド(Web API)に特化したサービスのまとめというBaaSサービスについて非常に丁寧にまとめた記事が公開されていたのをつい最近知ったのですが、公開から1年が経ちBaaSサービス周りも統合再編が起きているようなので誠に勝手ながら2013年版を引き継いて書いてみようかと思います。

まずBaaSについて基本的なところはlaisoさんの元記事が素晴らしく良くまとめてくださっていますのでそちらを参照してください。

2013/05/16追記: こちらのSlideshareにも2013年現在のBaaSサービスを取り巻く状況が非常に丁寧にまとめられていますので、オススメです。

2013年のトレンド

まずは元記事で上がっていたBaaSサービスの名前を片っ端からGoogleトレンドに突っ込んでみて人気度を評価してみました。その他、2013年になって登場してきたサービスがないか調べてみました。

その結果、はっきりと人気がある勢と人気がない勢が分かれました。

人気がある勢

StackMob
https://www.stackmob.com
実際に使ってみたわけではないのですが、多機能さが目につきます。元記事で言われていたサンプルが動作しないなども直っているようです。しかしながらクラウド側コードをJava/Scalaという結構ガッツリ系言語で書く必要があったりして、お手軽さがParse.comなどと比べて今ひとつ、売りの機能面では最近赤丸急上昇のKinveyに遅れを取っている印象があります。
機能一覧はこちらから。

Parse.com
http://www.parse.com
最近Facebookに買収された、BaaS分野では一番の知名度を誇ると思われるサービスです。以前に実際に使ってみた時の感想など書いてみましたが、ドキュメントとクライアントSDKが極めて充実しており、導入が非常に簡単なのが良いところだと思います。まず困ったら比較基準元としてとりあえず使っておけるサービスとしてオススメできます。
反面、お手軽なぶん機能面では外のサービスに及ばない箇所が見受けられます。特に既存データとの接続が直接的にはサポートされていなかったりするため、エンタープライズ系のサービスには向かないと思います。
機能一覧はこちらこちらが参考になるかと思います。

Kinvey
http://www.kinvey.com
最近トレンドサーチで赤丸急上昇なサービスです。路線としてはStackMobのような多機能でエンタープライズ系も狙えるような路線になっていますが、見た感じクラウド側コードもJSで比較的お手軽に書けるのがいいですね。iOSのSDKだけを見れば、Core Dataのサポートがあったり、NSNotificationで状態通知を飛ばしていたりするなど何かと多機能で嬉しいです。課金がAPI呼び出し数ではなくアクティブユーザー数単位だったりするのもユニークなところです。
機能一覧はこちらこちら、またはこちら

Appcelerator Cloud (元Cloudfish)
http://www.appcelerator.com/cloud/
CloudfishがTitaniumの開発元であるAppceleratorに買収・統合されました。Titaniumを使っている人は事実上全員がターゲット層になりますし、根強い人気が今後も期待できそうです。

人気がない勢

CloudMine
https://cloudmine.me/
ちょっとドキュメントを見てみただけでダメそう感が伝わってくるのがなんとも。

Buddy
http://buddy.com/
どうもクラウド側コードを走らせる機能が無さそうです。イマイチ。ゲームAPIなどが最初から用意されているのですが、内容を見ても(少なくとも日本では)余り使える内容に見えません。

QuickBlox
http://quickblox.com/
LocationやVideo Chat、Content RankingなどのB2Cアプリ向けのサービスが標準提供されており、そういう用途だと良いかもしれません。

yorAPI
http://www.yorapi.com/
サイト自体が潰れてます。

新しく登場した勢

BaasBox
http://www.baasbox.com/
完全にオープンソースなのが売りみたいです。ScalaのPlay!フレームワーク上に実装されており、自分でJVMの動作するサーバを用意すれば環境を構築することができます。弱点は機能がまだほぼ皆無でクライアントSDKもまったくないことです。要するにまだ全然使えません。一応クライアントSDKはリリース予定があるみたいです。

appiaries
http://www.appiaries.com/jp/index.html
ついに登場した日本のBaaSサービスです。が、残念ながら現地点では機能が大きく人気のある勢に対して劣っており、クライアントSDKもクラウド側コードもどうやらまだ存在しないようです。現段階ではオススメしづらいですが、今後どうなるか次第ですね。

Kii
2013/05/16追加
http://www.kii.com/
もう一つの日本のBaaSサービスです。appiariesよりも完成度が高くParseにサービス内容と料金体系が似ています。iOS/Android向けのクライアントSDKもきちんと用意されていますが、クラウド側コードはまだ準備中になっており使用出来ませんでした。特徴的な点としてアドネットワークとの連携が標準で用意されていたり、ファイルストレージにゴミ箱機能や共有機能があったりします。実際には試せていないのですが、サーバが日本にあるため応答性が良いかもしれません。
機能一覧はこちらこちらこちらのスライドも非常によくまとめられていてわかりやすいです。

Windows Azure Mobile Services
2013/05/16追加
https://www.windowsazure.com/en-us/develop/mobile/
Microsoftが提供しているWindows AzureクラウドのMobile向けサービスです。クライアントSDKもWindows/Android/iOSに対応済み、クラウド側コードをJSで記述可能、さらにはcronに相当するクラウド側コードの定期実行も可能と、こういったところはさすがのMicrosoftという印象を受けます。ただしクライアントSDKはWindows向けのもの以外開発途中でドキュメントも貧弱、サービス内容もそれほど充実していません。Windows Azure自体との連携もあると思われますが、詳細がよくわかりませんでした。

2013年5月2日木曜日

Parse.com の Cloud Code ハマりどころ

Parse.comのCloud Codeを触っていてハマった点や気づきにくい仕様を列挙させて頂きます。

■Parse.Cloud.useMasterKeyを呼び出すことで特権ユーザー権限になれる

Cloud Code上でACLによるアクセス制限を無視して現在のrequest.userとは関係なしにデータを操作したいということが多々あるかと思います。そのような場合は以下のようにリクエスト処理の先頭でParse.Cloud.useMasterKeyメソッドを呼び出してください。

useMasterKeyの効果は呼び出された瞬間からリクエストが終了するまで有効です。

■Parse.Cloud.beforeSaveやParse.Cloud.afterSaveはData Browserから直接Rowを追加した場合にも呼び出される

これは意外とハマりどころです。例えばData BrowserからUserを追加した時などにUserに対してつけておいたParse.Cloud.beforeSaveが発動するなどしてよく発生します。Data Browserから直接Rowを追加した場合、request.userはnullになりますので注意してください。また追加元がData Browserなのか普通のクライアントなのかを判定する手段が用意されていないため、処理を分岐させたくなるととたんに話が面倒なことになります。

Parse.com使ってみた

いまさらですがBaaS (Backend as a Service) が来てるらしいですので、とりあえずParse.comに手を出してみました。

■良かった所

  • クライアント側の実装が楽で安定しています。デバッグログも充実しており、Parseが原因でクラッシュするということもなく、特に悩まされるところはありませんでした。
  • 料金がとにかく安いです。個人で使うぶんには全く問題ないかなと思います。

■イマイチだった所

  • サーバーがUSなせいもあってそれほどレスポンスはよくありません。
  • セキュリティモデルをまじめに構築しようとするとかなり面倒くさいです。
  • Cloud Codeに山ほどハマりどころがあります。詳しくは別記事で。
  • バッチ(定期実行)に相当するものがありません。自宅のPCをから毎晩のタスクを定期実行するとかそういう悲しい方法で回避するしかありません。
  • Dev版と製品版で同じバックエンドを使うことになるので、公開したアプリの継続開発が面倒そうです。これは違う名前で開発版アプリを作ることで回避することができます。
  • 料金。エンタープライズで使うときの料金体系が不明瞭で、「連絡してね」の一言で済まされているため不安が残ります。
  • データの可搬性。一応Exportオプションは用意されていますが形式が独自形式のJSONなので自前で手元のDBなどへのImportツールを作る必要があり結構面倒だと思います。手軽にExcelやCSVでExportするオプションがほしいです。

■まとめ

プロトタイピングや小規模なアプリには良いと思います。ただしデータ可搬性をまじめに考えるのであればRESTful APIを使う必要があり、そうなってくるとせっかくよくできているクライアント側実装のほとんどが無駄になるため微妙に感じられます。Cloud Codeはハマリどころが多いのがまず問題ですが、わかってしまえば問題ないと思います。