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

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

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

前回のユーザ管理に続いて今回はデータストアをParse.comからニフティクラウド mobile backend(以下 NCMB)へ移行する際の懸念点などについて紹介します。データストアはアプリの基本になるかと思いますので、ぜひ移行の際には注意してください。

扱えるデータ型について

Parse.comで用意されているデータ型は次の通りです。

  • String
  • Number
  • Bool
  • Array
  • Object
  • Date
  • File
  • Pointer
  • Relation
  • Null

この中でNCMBのデータ型として用意されていないのはFile型になります。NCMBではファイルストアという別機能を用意しており、そちらにファイルを保存します。そのobjectIdをデータストアに紐付けて保存するのが基本になります。

逆にNCMBでは位置情報(Location)が扱えます。

データの保存はほぼ一緒

以下はParse.comによるデータ保存のコードです(Objective-C)。

PFObject *gameScore = [PFObject objectWithClassName:@"GameScore"];
gameScore[@"score"] = @1337;
gameScore[@"playerName"] = @"Sean Plott";
gameScore[@"cheatMode"] = @NO;
[gameScore saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
  if (succeeded) {
    // The object has been saved.
  } else {
    // There was a problem, check error.description
  }
}];

これがNCMBになると次のようになります。

NCMBobject *gameScore = [NCMBobject objectWithClassName:@"GameScore"];
[gameScore setobject:@"1337" forKey:@"score"];
[gameScore setobject:@"Sean Plott" forKey:@"playerName"];
[gameScore setobject:@NO forKey:@"cheatMode"];

//データストアへの登録を実施
[gameScore saveInBackgroundWithBlock:^(NSError *error) {
    if (error){
        //保存に失敗した場合の処理
    } else {
        //保存に成功した場合の処理
    }
}];

ほぼ変わらず実装できることが分かるかと思います。

検索もほぼ同じ

検索もクラス名こそ違いますが、基本的な使い方は同じです。

Parse.comの場合。

PFQuery *query = [PFQuery queryWithClassName:@"GameScore"];
[query whereKey:@"playerName" equalTo:@"Dan Stemkoski"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
  if (!error) {
    // The find succeeded.
    NSLog(@"Successfully retrieved %d scores.", objects.count);
    // Do something with the found objects
    for (PFObject *object in objects) {
        NSLog(@"%@", object.objectId);
    }
    } else {
    // Log details of the failure
    NSLog(@"Error: %@ %@", error, [error userInfo]);
  }
}];

NCMBの場合。

NCMBQuery *query = [NCMBQuery queryWithClassName:@"GameScore"];
[query whereKey:@"playerName" equalTo:@"Dan Stemkoski"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
  if (!error) {
    // 取得成功
  } else {
    // エラー処理
  }
}];

Local DataStore相当の機能はありません…

一点、大きな違いがあるとするとParse.comのLocal DataStore相当の機能は実装されていません。CoreDataやRealmなどへの移行が必要そうです。

移行時の注意

Parse.comから移行する際には、NCMBのインポート機能を使うことになります。ただしすでに同名のクラス名が存在する場合はインポートできません。これはユーザ、デバイストークン、ファイルストアなど規定のクラス名についても適用されるので注意してください。具体的にはuser/push/installation/fileといったクラス名は使用できません。


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

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