いつもアプリを作るときに「サーバ側もできたらもっとサービスっぽいものが作れそうなのになー」なんて思いながらもフロント側のプログラムばかり書いている私なのですが、先日参加したYAPC::Asiaで教えていただいてこんなサービスがあったのかと感動したので導入だけですがやってみました。
Parseとは
Parseとは、MBaaS(Mobile Backend as a Service) サービスのひとつです。最近のってるらしいです。MBaaSというのは、モバイル・アプリケーションに必要な主要な機能をサーバーレスで実現することができるサービスです。つまり、主にサーバとの通信やサーバ側での処理を簡単に実装できる環境とライブラリを提供してくれています。すごい。
登録してみる
Parseへ登録します。登録はメールアドレスとパスワードの入力だけなので特に困ることはないと思います。アプリをひとつ作成して管理画面に移りましょう。アプリの名前は後から変更もできるので、仮でも大丈夫かと思います。管理画面でリクエストやデータの管理できるようです。
アプリに導入してみる
はじめに、SDKをダウンロードします。今回はiOSアプリ(Objective-C)で実装しますが、他にも様々なプラットフォームへ対応しています。詳しくは公式ドキュメントに一覧があります。また、同ページからSDKをダウンロードできるので、最新版をダウンロードします。SDKがインストールされたプロジェクトも配布されていますが、プロジェクト名はやっぱ自分で決めたかったり後から修正を加えるのも大変そうなので、ちょっと手間ですが自分で新規プロジェクトを作るところからやります。
早速、Xcodeで新規プロジェクトを作成します。今回はHelloWorldくらいのもので終わろうと思うので「SingleViewApplication」で作成しました。
作成したら先ほどダウンロードしたSDKと、必要なライブラリ群をプロジェクト設定のBuild Phasesから追加します。詳細はQuickStartのページにあります。こんな感じです。
はじめに、AppDelegateのdidFinishLaunchingWithOptions:にアプリの識別と分析のためのコードを追加します。setApplicationIdはインストール方法で右上のプルダウンメニューから対象のアプリを選択すると、確認することができます。
#import "AppDelegate.h"
#import <Parse/Parse.h>
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[Parse setApplicationId:@"appID"
clientKey:@"clientKey"];
[PFAnalytics trackAppOpenedWithLaunchOptions:launchOptions];
return YES;
}
データを送る
さっそくデータを送信してみます。コードは数行で、これだけです。すごい。
ここでClassはWebの管理画面で作成しておく必要はなく、送信時に存在しない場合は自動で生成されます。
// send data
PFObject *object = [PFObject objectWithClassName:@"Object"];
object[@"name"] = @"test object";
[object saveInBackground];
実行後に管理画面のData Browserで確認すると、新たにObjectクラスが作成されており、Rowがひとつ追加されていると思います。objectIdは重複しないように作成されるobjectを一意に決定する識別子です。
データを取得する
今度はParseに保存したデータを取得してみます。ひとまず表示するためのLabelを作って、
// create label for debug
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(30, 30, 320, 20)];
[label setText:@"label"];
[self.view addSubview:label];
作ったラベルに取得したデータを表示します。objectIdを指定して、次のように読み込みます。
// get data and update label text to user name on parse
PFQuery *query = [PFQuery queryWithClassName:@"Object"];
[query getObjectInBackgroundWithId:@"yFzlwZ5ULO" block:^(PFObject *object, NSError *error) {
[label setText:object[@"name"]];
}];
こんな感じで取得できます。
というわけで、今回は本当に導入だけですが、Parseを使い始めてみました。TwitterやFacebookでのログインやサーバでのデータ管理等、小さいアプリでいちいちサーバを立てるのもなあ…という場合にもすごくよいかなという感じです。自分のようにサーバ側わからねええ!みたいなときもいいかもしれません()。無料プランでもしばらくは使っていけそうなので、これから使いながら続きも書いて見たいと思います。