28
BaaSを使った お気楽アプリ開発 日本Androidの会北海道支部 まいむぞう / 大路裕介

Baa sでお気楽アプリ開発

Embed Size (px)

DESCRIPTION

OSC 2013 北海道で公演した内容です。 BaaSを使ったアプリ開発として、ParseとMobile Backend Starterを比較しています。

Citation preview

Page 1: Baa sでお気楽アプリ開発

BaaSを使ったお気楽アプリ開発

日本Androidの会北海道支部

まいむぞう / 大路裕介

Page 2: Baa sでお気楽アプリ開発

自己紹介

まいむぞう (本名 大路裕介)

札幌でAndroidやクラウド系開発をしている フリーランサーです。 日本Androidの会の北海道支部長やってます

ずっとAndroidばかりやってるので、Android開発自体には 若干飽きてます。 最近はAR・コンピュータビジョン・電子工作・ウェアラブル コンピュータなどやってます。

Page 3: Baa sでお気楽アプリ開発

今日お伝えしたいこと

BaaSって何? どこが便利なの? どうやって使うの?

Page 4: Baa sでお気楽アプリ開発

クラウドの分類

•  クラウドにより提供される部分と、自社で構築する必要がある部分をまとめると、以下のようになる

4

自社調達

アプリケーション

開発・実行環境

インフラ

IaaS アプリケーション

開発・実行環境

インフラ

PaaS アプリケーション

開発・実行環境

インフラ

SaaS アプリケーション

開発・実行環境

インフラ

・自社ですべて構築・所有

・自由度が高いが、構築に手間はかかる

・制限は多いがアプリケーション開発に専念できる

・必要なときに必要な分だけ使える。コストも使った分だけ

一昨年ぐらいの

AWSなど GAEなど

Page 5: Baa sでお気楽アプリ開発

BaaSの登場

•  スマホ用アプリでは、、、 •  サーバに求められる機能は、どのアプリでも同じようなもの

が多い

•  スマホアプリ開発者はWeb系技術に慣れてない人も多い

5

自社調達 フロントエンド

バックエンド

開発・実行環境

インフラ

IaaS フロントエンド

バックエンド

開発・実行環境

インフラ

PaaS フロントエンド

バックエンド

開発・実行環境

インフラ

BaaS フロントエンド

バックエンド

開発・実行環境

インフラ

SaaS フロントエンド

バックエンド

開発・実行環境

インフラ

Backend as a Serviceの出現

Page 6: Baa sでお気楽アプリ開発

BaaS界の巨人たち

6

Parse

Page 7: Baa sでお気楽アプリ開発

BaaS界の巨人たち

7

Kinvey

Page 8: Baa sでお気楽アプリ開発

BaaS界の巨人たち

8

StackMob

Page 9: Baa sでお気楽アプリ開発

BaaS界の巨人たち

9

Appcelerator Cloud

Page 10: Baa sでお気楽アプリ開発

BaaS界の巨人たち

10

Kii

Page 11: Baa sでお気楽アプリ開発

BaaS界の巨人たち

11

appiaries

Page 12: Baa sでお気楽アプリ開発

And more...

12

他にもたくさんの巨人がいるのですが、

おすすめはParseです

※個人的な感想です

Page 13: Baa sでお気楽アプリ開発

どこが便利なの?

13

•  BaaSの主な機能としてParseを例に取ると •  サーバ側は管理画面からぽちぽちするだけ

•  サーバ側の同じデータ、同じ機能に対して、複数の環境(AndroidだけではなくiOSやWebなど)からアクセスできる

•  それぞれの開発環境用のライブラリを呼び出すだけで、クラウド上にデータを保存したり、ユーザ管理やアクセス制御が可能

•  AndroidやiOSなどのPush通知を簡単に送信できる

•  TwitterやFacebookなどに簡単に投稿できる

Page 14: Baa sでお気楽アプリ開発

コストメリット

14

•  Parseが提供している機能を自分で実装する場合、Web系技術に詳しい人でも2~3人月程度はかかりそうです。

• すなわち少なく見積もっても100~200万円ぐらいの価値があります。

Page 15: Baa sでお気楽アプリ開発

具体例

15

•  Parseでデータをクラウドに保存するコード

ParseObject gameScore = new ParseObject("GameScore");gameScore.put("score", 1337);gameScore.put("playerName", "Sean Plott");gameScore.put("cheatMode", false);gameScore.saveInBackground();

テーブル名

ハッシュ構造 (KeyとValue)

同期保存も非同期保存も Offline保存も可能

Page 16: Baa sでお気楽アプリ開発

具体例

16

•  Parseでデータをクラウドから取得するコード

ParseQuery<ParseObject> query = ParseQuery.getQuery("GameScore");query.getInBackground("xWMyZ4YEGZ", new GetCallback<ParseObject>() { public void done(ParseObject object, ParseException e) { if (e == null) { int score = object.getInt("score"); String playerName = object.getString("playerName"); boolean cheatMode = object.getBoolean("cheatMode"); } else { // something went wrong } }});

保存した時のKey

エラーの時は例外 オブジェクトが入る

Page 17: Baa sでお気楽アプリ開発

Parseは万能ではない

17

•  この先ずっとParseが用意した機能だけで大丈夫? •  サーバ側はさわれないので機能拡張には限界が…

•  定期的に実行したいサーバ側のコードがある場合 •  定期的にランキング集計や統計を取るような機能は苦

•  アプリの価値がデータ統計部分にあるなら伸び悩むかも…

心配な方はMobile Backend Starterも検討

Page 18: Baa sでお気楽アプリ開発

Mobile Backend Starterとは

18

•  Mobile Backend Starter(MBS)は今年のGoogle I/Oで発表されたBaaS(?)です

Page 19: Baa sでお気楽アプリ開発

Mobile Backend Starterとは

19

•  機能的にもParseと同じ問題領域をサポートしています

Page 20: Baa sでお気楽アプリ開発

機能比較

機能 Parse Mobile Backend Starter

無償利用 ◯ ◯

Android ◯ ◯

iOS / .Net / OS X / Windows 8 /Windows Phone 8 / Unity / Web(JavaScript)

◯ △(RESTで可能)

RESTful API ◯ △(コードが読めれば)

Push通知 ◯ ◯

Analytics ◯ ☓

File送受信 ◯ ☓

ユーザ管理 / アクセス制御 ◯ ◯(google acount)

Twitter / Facebook連携 ◯ ☓

サーバサイドロジック △ ◯

サーバ側機能拡張 ☓ ◯

Page 21: Baa sでお気楽アプリ開発

MBSの使い所

21

•  サーバはGoogle App Engine(GAE)です。MBSは、GAE上で稼働するオープンソースのサーバアプリケーション+クライアントライブラリという形で提供されています。

•  すなわち、Parseのように完成形のサーバが稼働しているわけではなく、サーバとして使えるひな形が提供されていることになります。

•  最低限の機能しか搭載されていませんが、GAEさえ使えれば必要に応じて機能拡張可能です。制限はありません。

•  Google Cloud Endpointsを使っているのでAndroidだけではなく、iOSやWebもサポート可能

Page 22: Baa sでお気楽アプリ開発

Google Cloud Endpoints

22

•  GAEを使ったRPCっぽいことをするフレームワーク

1.Endpointsを使って サーバコードを書くと 2. http://ホスト/post/(id)

などエンドポイントができて (RESTful API)

3. 各OS用のクライアントコードを自動生成できる

Page 23: Baa sでお気楽アプリ開発

具体例

23

•  MBSのサーバ側のコードの抜粋です

@ApiMethod(path = "CloudEntities/insertAll", httpMethod = "POST")public EntityListDto insertAll(EntityListDto cdl, User user) throws UnauthorizedException { SecurityChecker.getInstance().checkIfUserIsAvailable(user); return CrudOperations.getInstance().saveAll(cdl, user);}@ApiMethod(path = "CloudEntities/{kind}/{id}", httpMethod = "GET")public EntityDto get(@Named("kind") String kindName, @Named("id") String id, User user) throws UnauthorizedException, NotFoundException { SecurityChecker.getInstance().checkIfUserIsAvailable(user); return CrudOperations.getInstance().getEntity(kindName, id, user);}

Page 24: Baa sでお気楽アプリ開発

具体例

24

•  MBSのクライアント側のコードの抜粋です

CloudEntity newPost = new CloudEntity("Guestbook");newPost.put("message", "message from EditText");getCloudBackend().insert(newPost, null);

Page 25: Baa sでお気楽アプリ開発

まとめ

25

そろそろいい時間なのでまとめます。 次の3つを覚えて帰って下さい。

Page 26: Baa sでお気楽アプリ開発

まとめ

26

1. Parseサイコー

機能が充実しているうえに、無料もで使えます

Page 27: Baa sでお気楽アプリ開発

まとめ

27

2. あなたのアプリの価値が サーバ側にもあるのならば Mobile Backend Starterも

検討して

Page 28: Baa sでお気楽アプリ開発

まとめ

28

3.でもMobile Backend Starterを 使いこなすには、

結構スキルが必要だよ