FJCT_ニフクラ mobile backend(mBaaS)お役立ちブログ

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

KotlinでNCMBを使う:ポインターの使い方

f:id:mbaasdevrel:20181207095244p:plain

AndroidではJavaの他、Kotlinも公式言語としてサポートされています。KotlinはJVM上で動作する静的な型付け言語で、言語体系がSwiftに似ています。そのため、Swiftに慣れた開発者であればすぐに習得できるかと思います(似ているので逆に戸惑う部分もあるのですが)。

今回はAndroid Studio 3系を使い、KotlinでNCMBを利用する方法を解説します。今回はデータストアのオブジェクト同士を連携させる技術の一つ、ポインターの使い方を紹介します。

Android Studioでプロジェクトを作成する

Android Studio 3系からKotlinプラグインをインストールせずにKotlinプロジェクトを作成できるようになりました。まずは新しいプロジェクトを作成します。

f:id:mbaasdevrel:20181207094347p:plain

新しいプロジェクトを作成する際にInclude Kotlin Supportをチェックします。これでKotlinベースのコードが生成されます。

f:id:mbaasdevrel:20181207094507p:plain

他はデフォルトのままです。Phone and Tabletを対象にし、 APIはある程度新しいもの(今回は23)を選択します。

f:id:mbaasdevrel:20181207094525p:plainf:id:mbaasdevrel:20181207094525p:plain

さらにベースは何もなし、Empty Activityを選択します。

f:id:mbaasdevrel:20181207094536p:plain

Activity NameはMainActivity、Layout Nameはactivity_mainというのもデフォルトのままです。

f:id:mbaasdevrel:20181207094555p:plain

NCMBを追加する

プロジェクトが作成されたらファイルツリーを右クリックして、Open Module Settingsを選択します。

f:id:mbaasdevrel:20181207094605p:plain

開いたウィンドウで、上にあるプラスアイコンをクリックします。

f:id:mbaasdevrel:20181207094652p:plain

そしてImport .JAR/.AAR Packageを選択します。

f:id:mbaasdevrel:20181207094710p:plain

次のダイアログでNCMB.jarを選択します。NCMB.jarはこちらからダウンロードし、解凍します。

f:id:mbaasdevrel:20181207094721p:plain

追加すると、左側のメニューでappの下にNCMBが追加されます。ついでDependenciesをクリックします。

f:id:mbaasdevrel:20181207094843p:plain

下にあるプラスアイコンをクリックし、Module dependencyを選択します。

f:id:mbaasdevrel:20181207094859p:plain

モジュールの選択でNCMBを選びます。

f:id:mbaasdevrel:20181207094908p:plain

一覧にNCMBが追加されたら完了です。

f:id:mbaasdevrel:20181207094941p:plain

セキュリティ設定を変更する

AndroidManifest.xml を開いて設定を追加します。これはインターネット接続を用いる設定です。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="jp.moongift.ncmbupdatedatastore">
    <!-- 以下の uses-permission を追加 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <application
      :
    />
</manifest>

これで準備完了です。

SDKをインポートする

まずNCMBを利用する画面のKotlinファイルを開きます。今回は MainActivity.kt を編集します。今回は基礎になる NCMB クラスと、データストアで用いる NCMBObject クラスを読み込んでいます。

import com.nifcloud.mbaas.core.NCMB
import com.nifcloud.mbaas.core.NCMBObject

そして override fun onCreate の内容を編集します。 APPLICATION_KEYCLIENT_KEY はそれぞれのキーに書き換えてください。

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    // 初期化
    NCMB.initialize(applicationContext, "APPLICATION_KEY", "CLIENT_KEY")

今回は認証ユーザ(匿名ユーザ)に対してデータを追加します。まず連携させるデータを保存します。問題がなければ、下記の 保存完了 というところに進むでしょう。

var user = NCMBUser.getCurrentUser()
var obj  = NCMBObject("Setting")
obj.put("Key", "Setting Value")
obj.saveInBackground {e ->
    if (e != null) {
        Log.d("[ERROR]", obj.toString())
    } else {
      // 保存完了
    }
}

後は連携先であるユーザデータにオブジェクトを登録するだけです。

user.put("setting", obj)
user.saveInBackground {e ->
  if (e != null) {
    Log.d("[ERROR]", user.toString())
  } else {
    Log.d("[DEBUG]", "Data save successful!")
  }
}

ポインターデータの取り出し方

では次にポインターとして保存したデータの取り出し方です。今回の場合は連携先であるユーザデータを取り出します。その際、 setIncludeKey を使ってポインターになっているカラムを指定します。

var user = NCMBUser.getCurrentUser()
user.getIncludeObject<NCMBObject>("Setting")
var query  = NCMBQuery<NCMBObject>("user")
query.whereEqualTo("objectId", user.getString("objectId"))
query.setIncludeKey("setting")

そして検索を行えば、getIncludeObject を使ってNCMBObjectが取り出せます。

query.findInBackground {users, e ->
    if (e != null) {
        Log.d("[ERROR]", users[0].toString())
    } else {
        Log.d("[DEBUG]", users[0].getIncludeObject<NCMBObject>("setting").getString("Key"))
    }
}

まとめ

ポインターの保存はとても簡単で、オブジェクトをそのまま当てはめるだけです。取得する際にはクエリの時点でsetIncludeKeyを使うことと、取り出した後にgetIncludeObjectを使うのがポイントになります。データを細かく管理する上でもポインターは大事な機能になります。ぜひ使いこなしてください。

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。