読者です 読者をやめる 読者になる 読者になる

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

最近乱立している「モバイルアプリのバックエンド(Web API)に特化したサービス」に興味があったので、いろいろ試してみた。

「モバイルアプリのバックエンド(Web API)に特化したサービス」と書いたけど、まだまだそんなに一般的ではないのでBaaS(Backend as a Service)とかCloud Hosting とかいろんな呼ばれ方をしている && サービスによって提供する領域も違う。まあとくに定義はしないので気になったらその都度公式のヘルプでも読んでみて。本稿では呼びやすいのでBaaS と表記します。

BaaS とは?

最初に後程も紹介するdonayama さんのCocoafish の紹介エントリの一節がわかりやすいと思ったので引用します

おそらくどのようなサービスであっても「ユーザ管理」をすると思いますが、ひとことにユーザ管理といっても、(場合によっては招待状による招待→)サインイン→ユーザ作成→ログイン処理/ユーザ情報メンテ/パスワードリマインダ…といった機能を実装する必要があります。
画面UIももちろんですが、その辺のバックエンドとなるサーバ側のAPIとデータベースの処理や維持管理も必要になってきますよね。
こういったバックエンドで行う「いつものこと」や「最近ならやらないとね」といった機能をサービスとして提供しちゃおうというのがSaaSの一種にあたるBackend as a Service(BaaS)と呼ばれるWebサービスで、Cocoafishもそのひとつにあたります

Cocoafishを使ってみた(仮) - JP::HSJ::Junknews::HatenaSide

モバイルアプリ向けBaaSが必要な背景

アフター・アイフォンというか、以前はPCウェブブラウザ向けのサイトが一番優先度が高かったので、Webまわりのサイトやシステムを構成する流れとしてはこんな感じが主流だった。

  1. ブラウザに対応
  2. モバイルブラウザに対応
  3. Web API を提供
  4. Web API を使った内部、外部システム拡張

が、最近はクライアントサイドの連携を考えて最初からWeb API を作ってしまうケースも結構多い。iPhone のみのサポートでスタートしたInstagram とかが有名な例。その場合は以下のような流れがありがち。

  1. Web API を作成(一般公開するかどうかは問わない)
  2. モバイルアプリを提供
  3. PCブラウザ,モバイルブラウザ(アプリを提供していないプラットフォーム向け)をサポート
  4. Web API を使った内部、外部システム拡張。デスクトップアプリなど

この背景には

  • モバイル人口の急増
  • 様々なプラットフォームがウェブ技術をサポート(HTML+JavascriptWindowsアプリつくれたり)

などの要因がありそう。あとBackbone.js やKnockout.js などのウェブアプリケーション向けのクライアントサイドベースのMVC/MVVMフレームワークの注目などもこの流れの中にあると思わる(Cross-Origin Resource Sharing の仕組みが一般的になればBaaSの恩恵はある)。

なので、Web API をいかにはやく構成するかで製品の基盤になり、その後の展開(別のプラットフォーム向けとか)がしやすくなる。
しかし一人でアプリの実装とWeb APIの構成などをやるのはなかなか大変だし、アプリとWeb API向けに別の技術を学習しないといけなかったりでたいへん。企業が制作しているアプリとかだと、開発者がサーバ側とアプリ側で複数いることも結構ある。

で、これから先この「サーバ側」にあたる仕事がかぶりがちな部分を提供することでアプリ制作の本来の領域に集中できるとかなんとか。

バックエンドが必要なケース

  • 端末A で作成されたデータを端末Bや多数のウェブブラウザなど他の環境から閲覧したい
  • 同一のユーザーがiOS版以外のバージョンでも同じデータを扱える(Android... Desktop...)

具体的な使いどころとしては例えば

  • 2ちゃんねるビューワーアプリ
    • お気に入りデータや設定データなどを同期(p2.2ch.net のような)
  • フィードリーダーの登録フィード情報
    • バックエンドサービスにGoogle Reader を利用するなど
  • ユーティリティアプリのデータの保存先
    • メール送信やDropbox保存などで実現しているが、個人用途だけではなく広くシェアし使いまわしたい
  • CGM 型のコンテンツ(ユーザー間のコミュニケーションなど)
    • アプリはビュワーに徹する。

などがある。

バックエンドがする仕事

  • ユーザーの認証
  • クライアントサイドで持たない方がいいものを使う処理(他ユーザーのパスワードとか)
  • バッチ処理、コンテンツのクローリングなど
  • データの保存(永続化)
  • コンテンツの配信

保存されたデータを都度取得することにより、ユーザーには「データの同期」という機能が提供できる。

データの永続化についてはiOS(Cocoa)にはCore Data というSQLiteなどをバックエンドにした複雑な処理もこなせる本格的なデータベースシステムがあるんですが、iOS に限っていえばサンドボックスの外に出れなかったり使い方が難しかったりでそこまで受け入れられていませんが、バックエンドと組合せて抽象化することでさらなる可能性が出てきそうです(例えば参照関係が複雑な同期処理など)。

Apple Push Notification Service の事情について

いわゆるリモートからのプッシュ通知=Apple Push Notification Service についてはサーバとapple のサーバ間をSSL 経由で接続しないといけないので。利用できるポートなどが制限されていると実現できない。のでGoogle App Engine や共有レンタルサーバでバックエンドを構成するとと必然的にApple Push Notification Service 経由のプッシュ通知はできなくなる。このへんを踏まえた上でHTTP ベースのAPI だけで開発者サーバ→サービス業者サーバ→Apple サーバ→デバイス という流れでプッシュ通知を実現するサービスがある。

APIアーキテクチャ

全体的に特定のHTTPリクエストでやりとりすることでJSON/XML形式のデータ取得や保存をする、というREST APIスタイルのサービス(たいていAPI key のような文字列が発行され、それをリクエストにのせる)と、
iOS向けのSDKを用意して内部的なREST API は隠匿されていて、開発者はObjective-C ベースのHTTP クライアントでAPI を呼び出しdelegate メソッドなどで処理することを期待する、という形式がある感じ。
あと、REST APIObjective-C ベースのAPI どちらもオープンにしているところもある。

前者の方が好きなHTTP Client を選べたり、細かいところまで調整できたりしそうだから好みだけど、SDKベースのが使う方は簡単かな?

StackMob

http://stackmob.com/

データストレージ、Push通知、ユーザー管理、位置情報、twitter/Facebook連携など。無料プランもあり。
HTML5/iOS/Android に対応。既存プロジェクト向けと新規プロジェクト向けのSDKがダウンロードできる。
StackMobは今回リストアップした中で一番多機能に見える。多機能というか手広い印象。PCブラウザ向け、JavaRuby クライアントも用意してある。
あと変った機能として、サーバサイドにアップロードしたJavaScala で書かれたコード片がREST APIから呼び出せる。これによって「APIの結果をほげほげしてアプリに表示」という処理を→「ほげほげした結果を返す」というようなことができそう。パフォーマンス上の利点や、サーバーサイドへ柔軟性を持たせる為の仕組みかな?

SDK 提供形式は漢のソースコード丸ごと。が、UDIDに依存(サーバへ送信)している(どうするの、、)。サンプルコードはなぜかXcode 設定がARCオンになっているのにコードが対応していないのでARC を手動で無効にしないとビルドエラー出てた(ツンデレ設定か)。あとMainStoryboard_iPhone が存在しないのに依存するようになっていて結局サンプルサプリは動作確認できず。

ちなみに、ベータ版をうたっていないサービスはここだけだった。

Parse

https://www.parse.com/

パプリックベータ期間中のサービス。
データストレージ、Push通知、ユーザー管理、位置情報、twitter/Facebook連携など。無料プランもあり。
Framework 形式のSDK が提供されており、アプリに組み込んでそこからObjective-C ベースの簡単なAPIでデータなどを操作する。ユーザー登録して試してみたところすんなり利用できた。アプリごとにClass -> Object というデータ構造で保存でき、RDM でいうテーブルとカラムのような構造。Object のプロパティに別のClass のObject を設定したり疑似クエリ APIクラスで問い合わせなどできる。名前からのイメージ的にForce.com か。

あとJSON APIで就職希望を受け付けている

CloudMine

https://cloudmine.me/

パプリックベータ期間中のサービス。
ユーザー管理、データストアなど基本的なサービス。REST API ベースで利用する。ベータ期間中は無料らしい。
CloudMine もStackMob のようにサーバサイドのコードが実行できて、こちらはサーバーサイドのJavaScript を実行する仕組みが存在する。

Buddy

http://buddy.com/

パプリックベータ期間中のサービス。
ユーザー管理などの基本的なサービス。無料プランもあり。
Buddy はシステムを.NET で構成しているらしく、iOS 以外にも Windows Phone7 方面のサポートも期待できそう
REST 以外にSOAP Interface も用意されていたり、ちょっと癖がある。SDKの提供などはとくにない。

QuickBlox

http://quickblox.com/

パプリックベータ期間中のサービス。
コンテンツデータをAmazon S3 を利用したストレージに格納できるサービスや、ユーザー管理、位置情報、チャット、メッセージングなどのモジュールがある。無料プランもあり。
SDK がFramework ファイル形式で配布されている(5 Minute Guide - QuickBlox Wiki にサンプルアプリ動作までのチュートリアルがある)。
ユーザーはQuickBlox の独自アカウントを作成するかFacebook アカウントを接続して使用する。

サービス自体は使えるが、管理画面とかはまだ工事中でできてない部分とかあった。

Cocoafish

http://cocoafish.com/

プライベートベータ中のサービス。
サインアップに招待コードが必要。なのでまだ試せていない。*1
先日Titanium Mobile で有名なAppcelerator社に買収されたことで話題になっていたサービス。
ユーザーやフレンド管理からチェックイン、汎用データストアまで、これでもかというぐらいモジュールが充実、細分化されており開発者が必要なものを都度ピックアップしやすくなっている感じの戦略っぽい。

donayama さんのレポートがわかりやすい。

Kinvey

http://www.kinvey.com/

プライベートベータ中のサービス。
登録しておくと準備でき次第通知してくれる。積極的にBaaSという言葉を使っている印象。
まだログインできてないので詳細がわからないが、資料など見ると汎用的なストレージAPIっぽい。通信の暗号化やスケーラビリティなどもうたっていた。
あと、なんかランディングページがダサい(今日日の日・北米的なセンスではない)。

yorAPI

http://www.yorapi.com/

プライベートベータ中のサービス。
タブレットやエンタープラズ用途を推している。まだ開店準備中という感じ。

セルフビルド/ソフトウェア

自分でサーバを用意し、セットアップすることでスモールスタートできるような製品。主にデータストレージ機能の提供に注目した。

jsonengine

http://code.google.com/p/jsonengine/

Google App Engine を利用するApache v2ライセンスのJava製ソフトウェア。
REST APIJSON形式のデータをやりとりする。汎用データストアみたいな感じなので使いやすい。Google App Engine 上に構成するのでスケーラビリティなど、Google App Engine 自体の利点をそのまま生かせる。管理画面とか。

CouchDB/CouchCocoa

http://couchdb.apache.org/
https://github.com/couchbaselabs/CouchCocoa/

CouchDBApache Software Foundation によるスキーマフリーなドキュメント指向なデータベース。CouchCocoaがCocoa向けのクライアントライブラリ。
CouchDBは本体にブラウザ向けインターフェースなどが組みこまれていたり、HTTP/RESTful JSON API ベースで動作するよう作られているので今回のようなケースには合いそう。

その他

Urban Airship

http://urbanairship.com/

Push 通知や課金周りの処理を代行してくれる。無料プランもあり、現在は月に100万回の通知を送れる。

Pusher

http://pusher.com/

WebSocket による リアルタイムメッセージングサービス*2
Objective-C のクライアントライブラリもある。

ゲームアプリ向け

その他、ゲーム向けのプラットフォームSDKなどにもバックエンドをホスティングしてくれるサービスがある。
今回は詳しくは触れないが、Mobage ngCore SDK などはサーバ/クライアントアーキテクチャの考え方から一歩踏みこんだ意欲的なシステムに見え、おもしろそうではある。

Mobage ngCore SDK
https://developer.mobage.com/ja#mobage-gametech
(http://slidesha.re/xnP445 )

Pankia
http://pankia.com/

情報提供

その他に○○とかいいんじゃない?
このアプリはこれを使っているらしいよ、など知っていたら教えてください

国内事情

モバイルアプリのバックエンドやBaaS について流行ってきてはいるものの、国内では同等サービスをリリースしている事例を知りません。起業家はローカライズするチャンスともいえますが、そもそも国外も含めてこれからどの程度受け入れられるかというのはまだわかりません。サービスの方向性(何を、どの程度提供するかなど)もまだまだ二転三転しそうではあります。

まずは、上記先行した人々のサービスを実際に利用してみて確かめてみるのもよいのではないでしょうか。

まとまらないまとめ

全体的にまとめるには早過ぎた印象。
が、今すぐ使うならSDK付き +セットアップ簡単+とりあえずひととうり動作確認できたParse.com か QuickBlox 次点でStackMob がおすすめかな。Titanium Mobile パワーで将来的にはCocoafish も幅を効かせてきそう。

Database.com

Salesforce が提供している Database.com というのも教えてもらった。ざっと見たところREST API ベースでChatter ソーシャルAPI など既存のSalesforce製品の連携なども考えたれているようだった。

エンタープライズを意識しつつも汎用的で、料金体制を見るとある程度無料範囲で使えそう

appiaries (アピアリーズ)

http://www.appiaries.com/jp/index.html

いつの間にか国内業者からもサービスが出ていたみたい。現在パブリックベータ期間中。デベロッパー向けの案内は以下

アプリ開発者の方へ

*1:招待枠など提供できる方ください。メールは laiso(at).lai.so

*2:http://b.hatena.ne.jp/tinsep19/20120224#bookmark-82188501