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

## はじめに

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

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

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(空のアクティビティ)」プロジェクトを作成します。

「Language」として「Java」を選択します。

また、「Minimum SDK」として「APId 22: Android 5.1 (Lollipop)」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/8be1ab25-5985-a10b-9dc1-1bc9f0d4d378.png)


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

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

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


今回検証したプロジェクトの`android`セクションの全体を示します。`targetSdkVersion`と`compileSdkVersion`周りにマニュアルでの編集を行っています。

```gradle
android {
    compileSdkVersion 31

    defaultConfig {
        applicationId "com.example.myapplication"
        minSdkVersion 22
        targetSdkVersion 31
        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
    }
}
```

#### `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`ファイル編集


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

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

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


```java
public class MainActivity extends AppCompatActivity {

    //@Override
    //protected void onCreate(Bundle savedInstanceState) {
    //    super.onCreate(savedInstanceState);
    //    setContentView(R.layout.activity_main);
    //}

    private String TAG = "CBL-GS";
    private Context cntx = this;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);


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

        //

        // データベース作成
        Log.i(TAG, "データベース作成開始");
        DatabaseConfiguration cfg = new DatabaseConfiguration();
        Database database = null;
        try {
            database = new Database("myjavadb", cfg);
        } catch (CouchbaseLiteException e) {
            e.printStackTrace();
        }


        // ドキュメント作成
        MutableDocument mutableDoc =
                new MutableDocument().setString("type", "user").setString("name", "佐藤");


        // ドキュメント保存
        try {
            database.save(mutableDoc);
        } catch (CouchbaseLiteException e) {
            e.printStackTrace();
        }


        // ドキュメント取得、変更、保存
        mutableDoc =
                database.getDocument(mutableDoc.getId())
                        .toMutable()
                        .setString("firstname", "太郎");
        try {
            database.save(mutableDoc);
        } catch (CouchbaseLiteException e) {
            e.printStackTrace();
        }


        // ドキュメント取得、ログ出力
        Document document = database.getDocument(mutableDoc.getId());
        Log.i(TAG, String.format("Document ID : %s", document.getId()));
        Log.i(TAG, String.format("姓名 : %s", document.getString("name")));
        Log.i(TAG, String.format("名前 : %s", document.getString("firstname")));
    }
}

```


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

#### ログ

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

[image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/0fa20f9b-0d57-aef7-8d9b-65db295c7878.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に作成したデータベース（フォルダー）を確認することができます。



## 最後に

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

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

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



Couchbase Liteを用いたAndroid Javaアプリケーション開発について、以下のようなチュートリアルが存在します。

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

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

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

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

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


本稿で扱っていない、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

https://docs.couchbase.com/couchbase-lite/3.0/android/gs-prereqs.html

https://docs.couchbase.com/couchbase-lite/3.0/android/gs-install.html

https://docs.couchbase.com/couchbase-lite/3.0/android/gs-build.html