Couchbase Lite機能解説：データベースの使い方

## はじめに

Couchbase Liteの利用に資するために、下記のドキュメントの内容（英語）を整理します。

https://docs.couchbase.com/couchbase-lite/current/java/database.html

## 初期化

APIを使用する最初のステップは、イニシャライザーを呼び出すことです。
初期化前に他のAPIメソッドが呼び出されると、例外が発生します。

例1.データベース初期化

```java
// Initialize the Couchbase Lite system
CouchbaseLite.init();
```

## データベース作成/オープン

`Database`クラスを使用して、新しいデータベースを作成したり、既存のデータベースをオープンすることができます。
データベース名とオプションで`DatabaseConfiguration`を渡します。

注意すべき点は次のとおりです。

- データベースのオープン/作成は非同期プロセスです
- 指定されたデータベースが指定された場所またはデフォルトの場所に存在しない場合は、新しいデータベースが作成されます
- データベースは、ディレクトリを指定しない限り、デフォルトの場所に作成されます（参照：`DatabaseConfiguration`および`DatabaseConfiguration.setDirectory（）`）

ベストプラクティスは、データベースへのパスを常に明示的に指定することです。

「データベースファイルの検索」も参照してください。

例2.データベース作成/オープン

```java
DatabaseConfiguration config = new DatabaseConfiguration();

config.setDirectory(context.getFilesDir().getAbsolutePath());

Database database = new Database(DB_NAME, config);
```

ここでは、データベースのディレクトリパスを指定しています。

## データベースをクローズする



データベースを閉じるには、`Database.close（）`を使用します。
ただし、注意すべき点がいくつかあります。

- データベースを閉じることは同期操作であり、すぐに有効になります。
- 開いていないデータベースを閉じることはできません。
- データベースを開く（または作成する）ことは非同期であることに注意してください。したがって、オープン/作成を開始した直後にクローズを発行すると、そのプロセスが完了していない場合にエラーが発生する可能性があります。

データベースをクローズすると、アクティブなレプリケーション、リスナー、またはデータベースに接続されているライブクエリもすべてクローズされます。
レプリケーションを開始した直後にデータベースを閉じると、同期で例外が生成される可能性があります
（例：`IllegalStateException: Attempt to perform an operation on a closed database`）。

オープンしているすべてのデータベースをクローズすることをアプリケーションワークフローに組み込むことをお勧めします。


例3.データベースを閉じる

```java
database.close()
```

## データベースの暗号化

データベースの暗号化はEnterprise　Editionのみで利用できる機能です。

Java上のCouchbase Liteには、データベースを暗号化する機能が含まれています。これにより、モバイルアプリケーションは、データがデバイスに保存されているときに、保存されているデータを保護できます。データベースの暗号化に使用されるアルゴリズムは256ビットAESです。

暗号化を有効にするには、`DatabaseConfiguration.encryptionKey`プロパティを選択した暗号化キーに設定する必要があります。データベースをオープンするたびに、この暗号化キーを指定します。

```java
DatabaseConfiguration config = new DatabaseConfiguration();
config.setEncryptionKey(new EncryptionKey("PASSWORD"));
Database database = new Database(DB_NAME, config);
```

Couchbase Liteはキーを保持しません。キーを管理し、AppleのキーチェーンやAndroidのキーストアなどのプラットフォーム固有の安全なキーストアに保存するのはアプリケーションの責任です。

暗号化されたデータベースは、最初に暗号化に使用されたのと同じ言語SDK（Swift、C＃、Java、Java（Android）、またはObjective-C）でのみ開くことができます。たとえば、データベースがSwift SDKで暗号化されてからエクスポートされた場合、データベースはSwift SDKでのみ読み取り可能になります。


## データベースファイルの検索
デフォルトでは、JavaのCouchbase Liteデータベースは、カレントディレクトリの下の`<databaseName>.cblite2`というディレクトリに作成されます 。

この場所は、`DatabaseConfiguration`メソッドによって設定されます。データベースの場所を明示的に設定するには、常にこれを使用する必要があります。これを行う方法については、次の例を参照してください。

```java
DatabaseConfiguration thisConfig = new DatabaseConfiguration();
thisConfig.setDirectory("yourDBpath");
Database thisDB = new Database("db", thisConfig);
```

## コマンドラインツール
`cblite` は、Couchbase Lite2.xデータベースを検査およびクエリするためのコマンドラインツールです。

couchbaselabsの[GitHubリポジトリ](https://github.com/couchbaselabs/couchbase-mobile-tools/blob/master/README.cblite.md)からダウンロードしてビルドできます。このcbliteツールは、Couchbaseサポートポリシーではサポートされていないことに注意してください。

## トラブルシューティング

診断情報の最初のソースとして、Couchbaseのコンソールログを使用する必要があります。デフォルトのログレベルの情報が不十分な場合は、データベースエラーに焦点を当てて、より詳細なメッセージを生成できます。例4を参照してください。

ログの使用の詳細については、「[ログの使用](https://docs.couchbase.com/couchbase-lite/current/java/troubleshooting-logs.html)」を参照してください。

例4.データベースのログレベルを上げる

```java
Database.log.getConsole().setDomain(LogDomain.DATABASE);
```