Help us understand the problem. What is going on with this article?

ニフティクラウドmobile backendの事始めと導入手順まとめ

More than 3 years have passed since last update.

概要:Parse.comに代わる選択肢としてニフティクラウドmobile backendを使用してみる

2016年の1月29日にParse.comが1年後に終了するという発表がされ衝撃が走りました。私も今まで書いてきたParseで作成したサンプルアプリケーションやそれに関連する記事はどうしようか?という部分に関してはかなり迷いました。当面はParseに関する記事自体は残しておきますが、ニフティクラウドmobile backendを使用したサンプルアプリケーションの作成に関しても今後は追いかけて行ければと思います。

まだ個人的に使いこなしているわけではないのですが、今回はアカウントの作成や使用する上での下準備の段階の部分から疎通試験までをざっくりとまとめてみましたので参考になれば幸いです。

準備:ニフティクラウドmobile backendのアカウントを作成

ニフティクラウドmobile backendのアカウントの作成の際には、@niftyに登録する必要がありますがこちらは基本的には上記のニフティクラウドのページから手順に従って進めば問題なく作成できるかと思います。

①まずはニフティクラウドmobile backendのトップページへ進む:
トップページの左下にある「今すぐ無料登録」のページから進んで下さい。

mb_toppage.png

②@niftyへの会員登録を行う:
画面のところから@niftyのアカウントを作成を行って下さい。その後は作成したアカウントでニフティクラウドmobile backendの管理画面へログインを行って下さい。

mb_registration.png

③管理画面の確認と新規アプリの作成:
ログインに成功すると、下記のような画面が出てくるかと思います。この部分でデータやストレージの管理やアプリに関する管理を行います。

mb_control_panel.png

また新しいアプリを作成する場合はナビゲーション上部にある「+新しいアプリ」のところをクリックしてアプリを作成します。この時にアプリケーションキーとクライアントキーが作成されます。※こちらは後からでも確認ができます。

mb_create_new_app.png

以上でニフティクラウドmobile backendの準備は完了しましたので次はmobile backendのSDKを導入する手順に関して紹介していきます。

設定:mobile backend SDKをCocoapodsで導入する

私の方の使用環境は下記になります:
・OS X 10.10.5 Yosemite
・XCode 7.2
・Swift2.1.1

次にXCodeで新しいプロジェクトを作成します。

ニフティクラウドmobile backendの導入に関しては公開されているリポジトリからzipファイルをダウンロードして手動で導入する方法とCocoapodsを利用して導入する方法がありますが、今回はCocoapodsを経由してインストールする手順を解説します。任意のプロジェクトの中にPodfileを作成し、Podfileに記載を行います。

※参考:ニフティクラウドmobile backendをCocoapodsなしで導入する場合のSDKはこちら

①Podfileを作成:

$ sudo vim Podfile

②Podfile内に下記の記述を行う:

target 'nifty_cloud_spa' do
   pod 'NCMB', :git => 'https://github.com/NIFTYCloud-mbaas/ncmb_ios.git'
end

③NCMBのインストールを実行:

$ pod install

④Briging-Headerファイルを追加する:

ニフティクラウドmobile backendはObjective-Cで書かれていますのでSwift内で利用する場合は[プロジェクト名]-Briging-Header.hファイルを追加する必要があります。このファイルを追加する場合には、objective-Cのファイルを追加して、拡張子のxxxxx.mファイルを削除して、ヘッダファイルへ下記の記述をしてあげればOKです。

XXX-Bridging-Header.h
#import <NCMB/NCMB.h>

Swiftで作成されたファイルにObjective-Cのファイルを追加した際には、下記のようなダイアログが表示されるかと思いますので、「Create Bridging Header」のボタンを押して下さい。

briding-header.png

その後はプロジェクトの「Build Settings」で「Objective-C Briding Header」という項目が追加されていますので、その中に $(SRCROOT)/$(PROJECT)/XXX-Bridging-Header.hという記述を追加して下さい。

bridging-header-setting.png

(参考)Bridging-Headerの導入に関する参考

ここまででニフティクラウドmobile backendのプロジェクトファイルへの導入は完了しました。あとは実際にコードを書いて疎通試験をしていく感じになります。

コード:仮のデータを用いての疎通試験を行う

それでは実際にニフティクラウドmobile backendとの接続ができているかのテストをしていきます。今回はあくまで疎通試験ができればOKですのでAppDelegate.swiftに直接記述していきたいと思います。

今回のサンプルに関して参考にしたのは下記の記事になります。このサンプルをSwift2.x系にさらに書き直したものが下記のソースになります。

AppDelegete.swift
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.

    //"xxx":アプリケーションキー, "yyy":クライアントキー
    NCMB.setApplicationKey("xxx", clientKey: "yyy")

    let query: NCMBQuery = NCMBQuery(className: "TestClass")
    query.whereKey("message", equalTo: "Hello, NCMB!")
    query.findObjectsInBackgroundWithBlock({(NSArray objects, NSError error) in

        if error == nil {

            if objects.count > 0 {
                let msg: AnyObject? = objects[0].objectForKey("message")
                let msgStr: String = msg as! String
                print("success find data. \(msgStr)")
            } else {
                var saveError : NSError? = nil
                let obj : NCMBObject = NCMBObject(className: "TestClass")
                obj.setObject("Hello, NCMB!", forKey: "message")
                obj.save(&saveError)

                if saveError == nil {
                    print("success save data.")
                } else {
                    print("failure save data. \(saveError)")
                }             
            }

        } else {
            print(error.localizedDescription)
        }
    })

    return true
}

この状態でシミュレーターを起動すると、画面が呼び出された"TestClass"テーブルにデータが何もない場合は新規データが1件追加され、すでにデータがある際は"TestClass"テーブルからデータを1件抽出してくる処理を行っています。

mb_save_message_complete.png

以上ざっくりとニフティクラウドmobile backendに触れてきてみましたが、Parse.comと比べてみてもメソッド名等に違いはあれど、行う処理の流れやイメージに関してはそれほどギャップがあるわけではなさそうだと感じました。今後Parse.comが終了して新たにmBaaSをネイティブアプリのバックエンドは何にしようかと考える際には、選択肢の1つとして良いではないかと思います。

おわりに:この次のステップとして

今回はレコードが存在しない場合にはメッセージが新規に1件登録され、存在する場合には登録されたレコードを表示するだけのサンプルですが、今後は実際にデータを追加・変更・削除する機能や画像やファイル等の扱いに関しても深掘りできればと思っています。

補足:Swift3.0での導入に関して

XCode8系 + Swift3.0.xでの導入の手順は基本的に上記の手順で問題なく導入できますが、AppDelegate.swiftの記述とPodfileを下記のように記載すれば動作しました。
参考までに検証した環境は下記の通りになります。

・OS X 10.10.6 El Capitan
・XCode 8.1
・Swift3.0.1
・CocoaPods1.1.0.rc.2

下記が疎通試験用のコードになります。

AppDelegete.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    //"xxx":アプリケーションキー, "yyy":クライアントキー
    NCMB.setApplicationKey("xxx", clientKey: "yyy")

    let query: NCMBQuery = NCMBQuery(className: "TestClass")
    query.whereKey("message", equalTo: "Hello, NCMB!")

    //findObjectsInBackgroundでデータがある場合はNSArray型のデータを返す(エラーの場合はNSError型)
    query.findObjectsInBackground({(objects, error) in

        guard error == nil else {
            print((error?.localizedDescription)! as String)
            return
        }

        let count = (objects?.count)!

        //データが少なくとも1件存在する場合は一番最初の"message"を取得して表示する
        if count > 0 {

            let callBackData = objects![0] as AnyObject
            let msg = callBackData.object(forKey: "message")! as! String
            print("success find data. \(msg)")

        //データが1件も存在しない場合は新規に1件レコードを追加する
        } else {

            var saveError : NSError? = nil
            let obj: NCMBObject = NCMBObject(className: "TestClass")
            obj.setObject("Hello, NCMB!", forKey: "message")
            obj.save(&saveError)

            guard saveError == nil else {
                print("failure save data. \(saveError)")
                return
            }
            print("success save data.")
        }
    })

    return true
}

また、CocoaPodsに関してですが、XCode8系での導入の際にはCocoaPodsのバージョンアップを行って置いて下さい。

バージョンアップを行った後のPodfileの中は下記のようになります。

platform :ios, '9.0'
target '自分のプロジェクト名' do
  use_frameworks!

  # Pods for mypremiumcafencmb
  pod 'NCMB', :git => 'https://github.com/NIFTYCloud-mbaas/ncmb_ios.git', :branch => 'master'
  pod 'RealmSwift'

  post_install do |installer|
    installer.pods_project.targets.each do |target|
      target.build_configurations.each do |config|
        config.build_settings['SWIFT_VERSION'] = '3.0'
      end
    end
  end

end

※もしエラーや動かない等のご報告があれば宜しくお願い致しますm(_ _)m

fumiyasac@github
iOS Developer & Ruby & PHP Engineer (Sometimes UI Design) 本業は都内でプログラマをしています。まだまだ学ぶことは沢山ありますが、「整理・負担を軽く」「感謝され、期待に添えること」コンセプトに技術を磨く毎日です。最近はSwift/Objective-C/PHP/Ruby/ReactNative/KotlinとUI実装が大好物(^_^)
https://just1factory.net/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした