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

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

KotlinでNCMBを使う:async/awaitと組み合わせる

f:id:mbaasdevrel:20181207095244p:plain

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

今回はAndroid Studio 3系を使い、KotlinでNCMBを利用する方法を解説します。今回はKotlin 1.3から使えるようになったasync/awaitを利用する例です。

セットアップ

NCMBのセットアップは割愛して、Kotlinでasync/awaitを使う場合の下準備です。まず、Kotlinのバージョンが1.3系であるのを確認します。これは /build.gradle で確認できます。

buildscript {
    ext.kotlin_version = '1.3.10'
    :

次に /app/build.gradle に以下を追加します。

dependencies {
  :(省略)
  def coroutines_version = '1.0.1'
  implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
  implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version"
}

これでasync/await(コルーチン)が使えるようになります。

コードについて

本来であれば同期処理である save メソッドを使います。その際に async で囲んで、括弧の外でawaitを使うのがポイントです。

async(Dispatchers.Default) { obj.save() }.await()

これだけで処理が非同期化(コルーチン化)されます。

コルーチンとは

コルーチンは軽量なスレッドのようなものです。スレッドよりも簡単に使えるのがメリットです。

エラー処理について

async/awaitにおけるエラー処理はtry/catchで拾うようにします。

try {
  async(Dispatchers.Default) { obj.save() }.await()
  Log.d("[DEBUG]", "Saved 1.")
  var obj2 = NCMBObject("Setting")
  obj2.put("Key", "Setting Value2")
  async(Dispatchers.Default) { obj2.save() }.await()
  Log.d("[DEBUG]", "Saved 2.")
} catch (e: NCMBException) {
  Log.d("[ERROR]", e.toString())
}

まとめ

async/awaitを使うことで、非同期処理のコールバック方式から、見やすいコードに変更できます。Kotlinのasync/awaitはとても分かりやすいので、NCMBと組み合わせる際には積極的に使っていきましょう。

中津川 篤司

中津川 篤司

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