個人のスマホアプリ開発者がParseを使うべき15の理由


# <span style="color:red">注意(2016/01/29追記)</span>

Parseサービスの終了が発表されました。
利用できるのは2017/01/28までだということです。

Facebook Shutters Its Parse Developer Platform | TechCrunch
http://techcrunch.com/2016/01/28/facebook-shutters-its-parse-developer-platform/

Moving On
http://blog.parse.com/announcements/moving-on/

こんなに便利なサービスが終了してしまうのは残念でなりません。。

(一応ParseサーバーとMongoDBのマイグレーションツールが公開されるということなので
自前サーバーで管理すればParseと同じようなものを動作させることは可能かもしれません。)

# 背景
最近個人で掲示板系のiOSアプリをParseを利用して作ってみたが、思っていた以上に使い勝手が良かった。ユーザー登録をして、サーバーにデータを保存するいろいろなタイプのアプリでかなり便利に利用できると思う。
そこで、新しくアプリを実装する際に参考にしてもらえればと思って、個人的に感じたParseを利用した時のメリット(とデメリット)をまとめてみる。


# そもそもParseとは？

## Parse

ParseはMBaaS(Mobile Backend as a Service)で最も有名なサービスの一つ。2013年にfacebookに買収されている。
https://www.parse.com/

## MBaaS

最近流行りのMBaaSの説明はこちら。
> **BaaS 【 Backend as a Service 】 MBaaS / Mobile Backend as a Service**
スマートフォン向けのWebアプリケーションが必要とするサーバ側の様々な機能をインターネットを通じてサービスとして提供するクラウドサービスの一種。
提供される機能はサービスにより様々だが、利用者情報の登録・管理や認証、データの保管、プッシュ通知、課金・決済、ソーシャルメディアとの連携などが実装されていることが多い。アプリケーション開発者はこれらの機能のAPIを呼び出すよう設定することで、自らのアプリケーションの一部として取り込むことができる。
出典: BaaSとは 【 MBaaS 】 【 Backend as a Service 】 - 意味/解説/説明/定義 ： IT用語辞典

# Parseを利用するメリット
一言で言うと「必要になりそうな機能はあらかじめそろってるから **車輪の再発明をしなくてもいい** よ」「アプリケーション固有の実装に集中できて **開発速度が上がる** よ」というお話。
以下では、インフラ・サーバー・クライアントの3つの観点でまとめた。他のMBaaSサービスと共通する話もあるし、Parse固有の話も含めて書いている。またクライアントに関してはiOSでしか試せていないので、他のプラットフォームでは当てはまらないこともあるかもしれない。

## インフラ

### 1. DBを用意する必要がない
DBは当然のように用意されている。MongoDBのようなNoSQLで、テーブルのカラムを定義しなくても好きなデータを保存できる。

### 2. DBにインデックスを貼る必要がない
スマートインデックスという機能が入っており、どうやらクライアントから実行されるクエリを分析して適切にインデックスを張ってくれるらしい。実際、DBにはインデックスを設定する場所は存在しない。
http://blog.parse.com/2014/04/01/smart-indexing-at-parse/

### 3. 静的ファイル用のストレージを用意する必要がない
ファイルストレージはあらかじめ用意されている。例えばユーザーが投稿した画像などをそこに置いておくことができる。わざわざS3などにファイルをアップロードする必要はない。

### 4. スケールするまでお金を払う必要がない
2014年の春頃に料金体系が変わって、従量課金になると同時に無料分が増えた。
アプリケーション毎の無料範囲は以下

* リクエスト: 30req/s
* ファイルストレージ: 20GB
* データベースストレージ: 20GB
* ファイル転送容量: 2TB

https://parse.com/plans

### 5. スケールアウトについて心配する必要がない
ユーザーが増えてアクセスが増えた時もお金を払えば大丈夫。より多くのリクエストをさばいてくれるようになる。最初はユーザーが増えた時のことを心配せずに作ることができる。

## サーバー
### 6. ユーザー登録やログインを実装する必要がない
ユーザーモデルは最初から準備されていて、Twitterやfacebookに連携してログインする機能も付いている。また、匿名ユーザーとして利用してもらうこともできる。その場合は、機種変更や複数端末で利用するときにユーザー名とパスワードを設定してデータを引き継いでもらう、という使い方も可能。

### 7. サーバーサイドAPIを実装する必要がない
最低限のCRUDであれば、クライアント側から直接DBにクエリを投げる感覚で実行することができる。かといってサーバーにロジックを入れ込めないわけではなく、DB操作時に特定の操作を実行してやることもできるし、特定の機能を持った新しいAPIを作ることもできる。

### 8. Push通知を実装する必要がない
Push通知のサーバー側の実装は完成しているので、各種キーを設定してあげれば利用できる。ユーザーのデバイス毎にチャンネルの設定をしてあげれば、特定のチャンネルに所属しているデバイスだけに通知を送ることも可能。特定の時間にPush通知を送る予約機能も。
https://parse.com/products/push

### 9. 画像(ファイル)投稿を実装する必要がない
通常のDB操作に加えて、画像などの大きなデータも簡単にファイルストレージへアップロードすることができる。

### 10. 管理画面を用意する必要がない
既存の管理画面でDB操作やPush通知の設定などもできるため、わざわざ自分で作る必要はない。

### 11. アクセス解析を用意する必要がない
簡単なアクセス解析は用意されているので、一日ごとのユーザー数やクエリ数などを確認することができる。以前は有料機能だったが2014年にアクセス解析機能は無料化された。

## クライアント
### 12. 非同期処理を実装する必要がない
DB操作やファイルの取得に関しては、ネットワークを経由するため非同期処理が必要になるが、必要な実装が既に用意されている。

### 13. キャッシュ機構を実装する必要がない
画像などのファイルは一度読みこめば自動的にキャッシュしてくれる。DBのデータに関してもクエリ毎にキャッシュが効く。

### 14. リストビューを実装する必要がない
リストビュー用のクラスが用意されており、通常より少ない記述でDB上のデータをリスト表示できる。また、Pull to Refreshの機能なんかも用意されていた。

### 15. 通信失敗時の再リクエストを実装する必要がない
サーバーとの通信に失敗すると、数秒ごと時間を開けて5回まで再リクエストを送ってくれる。

# Parseを利用するデメリット

いろいろな機能は用意されているが、あんまり複雑なことをしようと思うとやはり面倒、というのはある。
以下に一例を載せる。

### サーバーの中身は見ることができない
MBaaSは大体そうだと思うが、サーバーに直接sshでログインして〜などの操作はできない。

### RDBは利用できない
アプリケーションによっては利用したくなると思うが、RDBは用意されていない。

### アクセス解析はカスタマイズできない
既存のアクセス解析は日毎のデータがとれるが、項目が決まっている。だから、たとえば特定の機能に関するアクセス数をとりたいと思っても不可能。その場合はGoogleAnalyticsなど別のサービスを導入すると良いだろう。

### 文字列の部分一致検索はできない(？)
部分一致検索はなさそうなので、検索機能などを作る場合は独自にやり方を考える必要がある。

## 個人的な感想と使い所
Parseをちゃんと使い始めたのはここ数ヶ月だが、ユーザー登録やログインが最初から用意されているのはとても嬉しい。また、知って一番驚いたのはDBのスマートインデックスの機能。インデックスを自動的に張ってくれるのは、考えないといけないことが減ってとてもありがたかった。
個人や少人数で作るアプリだったら、最初のうちはほとんどの場合無料の範囲で利用することができるのでは、と思う。複雑なことをしない限りは、サーバー側の実装がほぼいらないのでかなり開発速度が上がるだろう。実際Parseを利用して個人でアプリを作っているときには、利用する前に予想していた以上に車輪の再発明が不要でストレスが少ない。