ニフクラmBaaSお役立ちブログ

スマホアプリ開発にニフクラmBaaS。アプリ開発に役立つ情報をおとどけ!

Parse.comからデータストアを移行する際の懸念点(Android)

Parse.comからの移行先を探している方向けにぜひ私たちのニフティクラウド mobile backendを使って欲しいと思い、様々な調査を行っています。

その中で分かってきている事柄についてまとめつつ、Androidアプリを移行する際の注意点について紹介します。

ローカルデータストア相当の機能がありません

ニフティクラウド mobile backendではParse.comのローカルデータストア相当の機能がありません。その部分についてはRealmやSQLiteなどに移行する必要があります。

ファイルを保存するカラムはありません

Parse.comではデータストアの中でバイナリファイルを扱えましたが、ニフティクラウド mobile backendではファイルストアという別な機能となっています。そのため、ファイルストアにバイナリファイルを保存し、そのObjectIDやHTTPSのURLをデータストアに保存する変更が必要になります。

コードは類似しています

Parse.comとNCMBのAndroid SDKは似た使い方ができます。例えばデータの保存は以下のようになります。まずはParse.comです。

ParseObject gameScore = new ParseObject("GameScore");
gameScore.put("score", 1337);
gameScore.put("playerName", "Sean Plott");
gameScore.saveInBackground(new SaveCallback() {
  public void done(ParseException e) {
    // ここは保存完了後に呼び出される。
    if (e == null) {
      System.out.println("保存成功");
    } else {
      System.out.println("保存失敗");
    }
  }
});

次にニフティクラウド mobile backend。

NCMBObject gameScore = new NCMBObject("GameScore");
gameScore.put("score", 1337);
gameScore.put("playerName", "Sean Plott");
gameScore.saveInBackground(new DoneCallback() {
    @Override
    public void done(NCMBException e) {
        if (e != null) {
            //エラー発生時の処理
        } else {
            //成功時の処理
        }
    }
});

続いてオブジェクトの取得。

ParseQuery<ParseObject> query = ParseQuery.getQuery("GameScore");
query.getInBackground("xWMyZ4YEGZ", new GetCallback<ParseObject>() {
    public void done(ParseObject object, ParseException e) {
        if (e == null) {
            // object will be your game score
        } else {
            // something went wrong
        }
    }
});

ニフティクラウド mobile backend。

NCMBObject obj = new NCMBObject("TestClass");
obj.setObjectId("getTestObjectId");
obj.fetchInBackground(new FetchCallback<NCMBObject>() {

    @Override
    public void done(NCMBObject object, NCMBException e) {
        if (e != null) {
            //エラー時の処理
        } else {
            //取得成功時の処理
        }
    }
});

検索についても同様です。まずはParse.comです。

ParseQuery<ParseObject> query = ParseQuery.getQuery("GameScore");
query.whereEqualTo("playerName", "Dan Stemkoski");
query.findInBackground(new FindCallback<ParseObject>() {
    public void done(List<ParseObject> scoreList, ParseException e) {
        if (e == null) {
            Log.d("score", "Retrieved " + scoreList.size() + " scores");
        } else {
            Log.d("score", "Error: " + e.getMessage());
        }
    }
});

続いてニフティクラウド mobile backend。

//TestClassを検索するためのNCMBQueryインスタンスを作成
NCMBQuery<NCMBObject> query = new NCMBQuery<>("TestClass");

//keyというフィールドがvalueとなっているデータを検索する条件を設定
query.whereEqualTo("key", "value");

//データストアからデータを検索
query.findInBackground(new FindCallback<NCMBObject>() {
    @Override
    public void done(List<NCMBObject> results, NCMBException e) {
        if (e != null) {

            //検索失敗時の処理
        } else {

            //検索成功時の処理
        }
    }
});

オブジェクト名こそ違いますが、コード自体は似たような形で実装できます。

リレーションが使えます

Parse.comにあるリレーションの機能もサポートされています。ポインターもありますので、データ構造はほぼそのまま(ファイルカラムを除く)移行できます。ニフティクラウド mobile backendではその他、位置情報型もあります。

インポート時の注意

Parse.comから移行する場合、規定のクラス名はそのままインポートはできません。user/file/push/installationといった名前が規定になります。これらの移行はコードを書いて既存のクラスにデータを追加する形で行っていく必要があります。


Parse.comとNCMBのデータストアはiOSであれば殆ど変わらずに使いこなすことができるでしょう。コードの移行もそれほど多くありません。既存データについては移行スクリプトなどを作る必要がありそうです。

現在、Parse乗り換え相談会を行っています。Parse.comからの乗り換えに際して疑問点、不安などがある場合はぜひお問い合わせください。