Backendless系のmBaaSアプリ（GMO mBaaSなど）からニフティクラウドmobile backendに切り替える方法（JavaScript版）

# mBaaSとは

最近アプリ開発でサーバー機能を便利にするものmBaaSとしてよく聞いています。
簡単に言いますと、[mBaaSとは](http://mb.cloud.nifty.com/about.htm)スマートフォンアプリのバックエンド機能が開発不要になるクラウドサービス。海外だと有名なのは[Parse](https://parse.com/), [Backendless](http://backendless.jp/)..があります、国内だと[ニフティクラウドmobile backend](http://mb.cloud.nifty.com/), [Appiaries](http://www.appiaries.com/jp/)ありますよね。
開発が便利ですが、サーバーといった大事なところは他社に依存するのはリスクがありますね。最近うちのブログもこんな[記事](http://blog.mb.cloud.nifty.com/?p=3779)あります。
今回mBaaS使うの紹介ではなく、途中使って、切り替え（乗り換え）も簡単ですよと試したことを紹介します。今回対象はBackendlessからニフティクラウドmobile backendに切り替える方法を紹介します。

# Backendlessとは

アメリカ会社が作ったmBaaSです。最近日本でGMO-mBaaSのベースになったものでもあります。無料から利用、機能も充実しています（分析、カスタムコードなど）

# ニフティクラウドmobile backendとは

ニフティクラウドが提供する国産のmBaaSサービスです。高いスペックでプッシュ通知、データー管理など無料で使えます。日本語ドキュメントとサポートがあり！

# Backendlessからニフティクラウドmobile backendに切り替える基本的なステップ

* SDKをインポート
* アプリ内、SDKを利用宣言
* ニフティクラウドmobile backendでアプリ作成、キー(ApplicationKey, ClientKey)を取得
* アプリ内で初期化
* 実装コードを変更
* その他：データー移行、設定変更

実際にやってみます！

# 前提

Javascriptでデーターストア機能を動いているアプリは以下になります（Quickstartのもの）

* SDKファイル：libs/backendless.js
* HTMLファイル：
test.html

```html
    <meta charset="utf-8">
    <title>
        javascript sdk
    </title>
    <script src="libs/backendless.js"></script>
    <script src="app.js"></script>
```

* JavaScriptファイル：

```js
var APPLICATION_ID = 'APPLICATION-ID',
    SECRET_KEY = 'SECRET-KEY',
    VERSION = 'v1'; //default application version;

Backendless.initApp(APPLICATION_ID, SECRET_KEY, VERSION);

var user = new Backendless.User();
user.email = "foo@foo.com";
user.password = "foo";
user.name = "Bob";

Backendless.UserService.register(user);

```

# (1) ニフティクラウドmobile backendのSDKをインポート

こちらの[SDKダウンロードページ](http://mb.cloud.nifty.com/doc/current/introduction/sdkdownload_javascript.html)の通りに、[Github](https://github.com/NIFTYCloud-mbaas/ncmb_js/releases)のリリースページにてSDK(ncmb.min.js)を取得し、/libs/にコピーします。
![20151209_qiita1.png](https://qiita-image-store.s3.amazonaws.com/0/18698/0d632924-467b-0bca-4231-a2c4b8390a51.png)

# (2) アプリ内、SDKを利用宣言

HTMLファイルtest.htmlを変更

```html
    <script src="libs/backendless.js"></script>
```
以下のように修正

```html
    <script src="libs/ncmb.min.js"></script>
```

# (3)ニフティクラウドmobile backendでアプリ作成、キー(ApplicationKey, ClientKey)を取得

ニフティクラウドmBaaSの画面でアプリ作成、アプリ名を設定し、アプリ作成完了すると、二つキー（ApplicationKey, ClientKey）が作成されます。

![20151209_qiita2.png](https://qiita-image-store.s3.amazonaws.com/0/18698/09d6702f-e5d3-f69b-2f98-f9b156b8542a.png)

![20151209_qiita3.png](https://qiita-image-store.s3.amazonaws.com/0/18698/f240fbf1-aea5-307d-50df-6aa959d1ca65.png)

# (4)アプリ内で初期化

以下のようにJavaScriptファイルapp.jsを修正します。


```js
var APPLICATION_ID = 'APPLICATION-ID',
    SECRET_KEY = 'SECRET-KEY',
    VERSION = 'v1'; //default application version;

Backendless.initApp(APPLICATION_ID, SECRET_KEY, VERSION);
```

以下のように変更

```js
var APPLICATION_KEY = 'YOUR-APPLICATION--KEY',
    CLIENT_KEY = 'YOUR-CLIENT-KEY'

var ncmb = new NCMB(APPLICATION_KEY, CLIENT_KEY);
```

# (5)実装コードを変更

以下のようにJavaScriptファイルapp.jsを修正します。

```js
var user = new Backendless.User();
user.email = "foo@foo.com";
user.password = "foo";
user.name = "Bob";

Backendless.UserService.register(user);

```

以下のように変更します


```js
var user = new ncmb.User();
user.set("userName", "foo")
    .set("email", "foo@foo.com")
    .set("password", "foo");
// 新規登録
user.signUpByAccount()
    .then(function(){
      // 登録後処理
    })
    .catch(function(err){
      // エラー処理
    });
```

ここでの修正ですが、ニフティクラウドmobile backendの会員管理とbackendlessの会員管理は少し仕組みが違います。メールの登録は両方とも可能ですが、mobile backendの場合、メール登録リクエストを送信され、そこにアクセスするとパスワード設定し、本登録になるという仕様です。
上記のコードではパスワードを指定し、登録するという実装なので、userNameの設定も入れるようにします。
これで、試すと、ユーザーが登録されることを確認します。

# その他：データー移行、設定変更など

ここに関しては難しいところかなと思いますので、知っている範囲で書いてみます。

* backendlessではExport機能ありますが、CSV形式になります。
* ニフティクラウドmobile backendではデーターストアの新規クラス作成する時、CSV、Json, txtどちらもインポートできますが、会員データーやinstallation(プッシュ通知配信端末)データーという既存のものであればできません。
* アプリ設定はそれぞれ違うので、検討した方が良さそうです！