Kotlinアプリケーション開発に、NoSQLドキュメント指向モバイルデータベースCouchbase Liteを使ってみる

## はじめに

本稿では、Kotlinアプリケーション開発に、NoSQLドキュメント指向モバイルデータベース Couchbase Liteを使うための具体的な方法について解説します。

本稿では、Couchbase Lite 3.0.0ベータ版をKotlinアプリケーションで利用する際の動作確認までを行います。

Couchbaseをモバイルアプリケーションで利用する意義については、以下の記事をご参考ください。

https://qiita.com/yoshiyuki_kono/items/3abd5e32801060a449d2

### 確認環境

- macOS Catalina Version 10.15.7
- Android Studio 4.1.3

## 実行手順

### プロジェクト作成・Couchbase Liteインストール


Android Studioで新しい「Empty Activity(空のアクティビティ)」プロジェクトを作成します

### `build.gradle`ファイル編集

新しく作成したプロジェクトで、アプリケーションレベルの`build.gradle`ファイルを編集します。

#### `android`セクション


`android`セクションの`minSdkVersion`を`22`にします。


今回検証したプロジェクトのbuild.gradleファイルの`android`セクション全体を示します。`minSdkVersion`以外は、変更していませんが、`compileOptions`や`kotlinOptions`のバージョンに注意してください。

```gradle
android {
    compileSdkVersion 30
    buildToolsVersion "30.0.3"

    defaultConfig {
        applicationId "com.example.cbl_kotlin"
        minSdkVersion 22
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }

}
```

#### `repositories`セクション
`repositories`セクションに以下を含めます。

```gradle
repositories {
  maven { url 'https://mobile.maven.couchbase.com/maven2/dev/' }

//   ... 省略
}
```
#### `dependencies`セクション

`dependencies`セクションに以下を含めます。

```gradle
dependencies {

  implementation 'com.couchbase.lite:couchbase-lite-android-ee-ktx:3.0.0-beta02'

//   ... 省略
}
```

以上の変更を加えた後に、プロジェクトをビルドすると、Couchbase Liteがプロジェクトにプルダウンされます。

### プログラミング・実行結果確認

#### `MainActivity`ファイル編集

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/8f37ab84-44be-cd70-e494-3c745f5537f7.png)


インポート文として、下記を追加します。

```KOTLIN
import android.content.Context
import android.util.Log
import com.couchbase.lite.*
```

`MainActivity`クラスを以下のように編集します。

```KOTLIN
class MainActivity : AppCompatActivity() {

    private var TAG = "CBL-TEST"
    private var cntx: Context = this

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Couchbase Lite 初期化
        CouchbaseLite.init(cntx)
        Log.i(TAG,"Couchbase Lite 初期化完了")

        // データベース作成
        Log.i(TAG, "データベース作成開始")
        val cfg = DatabaseConfigurationFactory.create()
        val database = Database("kotlindb", cfg)

        val docId = "test"

        // ドキュメント作成
        var mutableDoc = MutableDocument(docId).setString("type", "user")

        // ドキュメント保存
        database.save(mutableDoc)

        // ドキュメント取得、変更、保存
        mutableDoc = database.getDocument(docId)!!.toMutable().setString("name", "田中")
        database.save(mutableDoc)


        // ドキュメント取得、ログ出力
        val document = database.getDocument(docId)!!
        Log.i(TAG, "ドキュメントID : ${document.id}")
        Log.i(TAG, "名前 : ${document.getString("name")}")

        // クエリ
        val rs = QueryBuilder.select(SelectResult.all())
                .from(DataSource.database(database))
                .where(Expression.property("type").equalTo(Expression.string("user")))
                .execute()
        Log.i(TAG, "ドキュメント数 : ${rs.allResults().size}")

    }

}
```


ビルドし、エミュレーターで実行します。

#### ログ

logcatウィンドウに以下のようなログが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/3638df6b-023e-8d23-11fe-c5870f6733b0.png)

#### データベースファイル

メニューから、Device File Explore（View > Tool Window >  Device File Explore）を開きます。

「Name」セクションのdata > dataを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/f89bf515-7e49-8d3f-48ef-f6f039fa8a29.png)

アプリケーションのパッケージ以下のfilesに下記のように作成したデータベース（フォルダー）を確認することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/66f756e0-25a1-9267-13ff-4ba31dc6bbfc.png)


## 最後に

本稿では、Kotlinアプリケーション開発のために、プロジェクトにCouchbase Liteをダウンロードし、基本的な操作が行えるところの確認までを行いました。
モバイルアプリケーション開発に組込データベースを使った経験のある方であれば、以降の応用は、比較的簡単に可能かと思います。
最後に、さらなるステップに進むための情報を示して、本稿の締め括りとしたいと思います。

Couchbase Liteについての記事を以下の投稿で整理していますので、ご関心に応じて、参照してみてください。

https://qiita.com/yoshiyuki_kono/items/6a5bbad1b02196a25417

Kotlinについては、まず今年2021年に発表されたビデオを紹介します。

https://www.youtube.com/watch?v=rJYSuy3jquE


Kotolinではなく、Android Javaが利用されていますが、Couchbase Liteを用いた以下のようなチュートリアルが存在します。

https://www.raywenderlich.com/853-couchbase-tutorial-for-android-getting-started

こちらも、Kotolinではなく、Android Javaが利用されていますが、サンプルアプリケーションを動作させる環境の構築を通じて、Couchbase Lite利用のみではなく、Couchbase Serverとのデータ同期までをカバーした、以下のチュートリアルがあります。

https://docs.couchbase.com/tutorials/mobile-travel-sample/introduction.html

上記のチュートリアルの内容をベースに日本語化したものを下記で確認いただけます。

https://github.com/YoshiyukiKono/cb-dev-days-mobile

Kotlinを使ったチュートリアルとして、Couchbase Liteではなく、Couchbase Serverとの連携を扱ったものとして以下があります。

https://dzone.com/articles/couchbase-with-kotlin-spring-boot-and-spring-data

本稿で扱っていない、Couchbase Serverについては、日本語で読むことができるまとまった情報として、次の拙著を紹介させていただきます。

https://www.amazon.co.jp/-/en/%E6%B2%B3%E9%87%8E-%E6%B3%B0%E5%B9%B8/dp/429560030X/ref=tmm_pap_swatch_0?_encoding=UTF8&qid=1636588872&sr=1-1