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

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

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

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

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


### 確認環境

- macOS Catalina Version 10.15.7
- Xcode Version 12.4

## 実行手順


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

本稿では、Swiftパッケージマネージャーを使用して、Couchbase Liteをセットアップする手順を紹介します（Swiftパッケージマネージャーを使用してCouchbaseLiteSwiftをインストールするにはXcode12 +が必要です）。

Xcodeで、新しいプロジェクトを作成します：File > New > Project


![Pasted Graphic 8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/011550bc-f5b1-e7b1-2d4e-4f26c9b09d18.png)
￼

今回は、「SwiftUI」ではなく、「UIKit」を使います。

![Pasted Graphic 9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/047a57d1-db5a-a228-5eda-3bb4d599d240.png)
￼
 下記のように、Swift Packages画面を表示します。

![Pasted Graphic 10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/56ecf7c8-d356-e954-4007-63d1744b9cc1.png)
￼
「＋」アイコンを押下し、「Choose Package Repository」ダイアログを表示します。

入力欄に次のURLを入力します。

`https://github.com/couchbase/couchbase-lite-swift-ee.git`

「Next」ボタンを押下します。

![Choose Package Repository.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/61c1c217-8a5c-b756-1110-f67db48e33b3.png)
￼
「Choose Package Options」ダイアログが表示されます。

下記のように「Version」入力欄に、`3.0.0-beta02`と入力します。

「Next」ボタンを押下します。

![Choose Package Options.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/b3e0ed73-95a3-8523-f3a9-2b22da3badd0.png)

パッケージ追加が始まります。

![Add Package to CBLiteTestUlKit.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/9a9f29c7-0f9a-5edd-b28c-5d1294470881.png)

下記のように、「CouchbaseLiteSwift」パッケージが表示されます。チェックし、「Finish」ボタンを押下します。

![Add Package to CBLiteTestUIKit.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/7020bb35-601b-ba30-116b-a34dae67289a.png)
￼
下記のように、「CouchbaseLiteSwift」パッケージがプロジェクトに登録されます。
追加されたパッケージの名前、バージョン、URLが表示されています。

![Pasted Graphic 15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/e9e739e2-18dc-7ac6-c6ff-d88b06ff54c9.png)
￼


これで、CouchbaseLiteSwiftをインポートして、アプリで使用できます。

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

#### ソースコード編集

今回は、稼働確認のため、ViewController.swiftを以下のように編集しました。


```swift
import UIKit
import CouchbaseLiteSwift

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        getStarted(testReplication: false)
    }

    func getStarted (testReplication: Bool) {
            // データベース作成または取得（再実行時）
            let database: Database
            do {
                database = try Database(name: "mydb")
            } catch {
                fatalError("Error opening database")
            }

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

            // ドキュメント保存
            do {
                try database.saveDocument(mutableDoc)
            } catch {
                fatalError("Error saving document")
            }

            // ドキュメント取得、変更、保存
            if let mutableDoc = database.document(withID: mutableDoc.id)?.toMutable() {
                mutableDoc.setString("田中", forKey: "name")
                do {
                    try database.saveDocument(mutableDoc)

                    let document = database.document(withID: mutableDoc.id)!
                    print("ドキュメント更新完了 - ドキュメントID： \(document.id), 名前： \(document.string(forKey: "name")!)")
                } catch {
                    fatalError("Error updating document")
                }
            }

            // クエリ
            print("クエリ実行")
            let query = QueryBuilder
                .select(SelectResult.all())
                .from(DataSource.database(database))
                .where(Expression.property("type").equalTo(Expression.string("user")))

            do {
                let result = try query.execute()
                print("ドキュメント数 : \(result.allResults().count)")
            } catch {
                fatalError("Error running the query")
            }

        }

}

```

#### ログ

以下のログが出力されます。

```
ドキュメント更新完了 - ドキュメントID： -YamrzlmIFovzOXYUp1YWDo, 名前： 田中
クエリ実行
ドキュメント数 : 1
```

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

ターミナルで、作成されたデータベースファイルを確認します。

```shell
$ cd ~/Library/Developer/CoreSimulator/Devices
$ find . -name "mydb.cblite2"
./5C245945-C956-495A-B7CB-D646905E95C7/data/Containers/Data/Application/4E0B4959-9D0B-4181-A2E6-F3D3A233D5A9/Library/Application Support/CouchbaseLite/mydb.cblite2

```

## 最後に

本稿では、Swiftアプリケーション開発のために、プロジェクトにCouchbase Liteをダウンロードし、基本的な操作が行えるところの確認までを行いました。

モバイルアプリケーション開発に組込データベースを使った経験のある方であれば、以降の応用は、比較的簡単に可能かと思います。

最後に、さらなるステップに進むための情報を示して、本稿の締め括りとしたいと思います。

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

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

本稿の記事の内容（インストール、動作確認）に関する、一次情報として、下記のドキュメントがあります（Swiftパッケージマネージャーを使う以外の方法も説明されています）。

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


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

Couchbase Lite（のみを「スタンドアローン」で）を使ったチュートリアルとして、以下が公開されています。

https://docs.couchbase.com/userprofile-couchbase-mobile/standalone/userprofile/userprofile_basic.html

上記チュートリアルからはじめ、さらに進んだトピックとして、「クエリ」、「Couchbase Serverとの同期」、「バックグラウンドでのフェッチ」までがカバーされています。

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

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

上述のチュートリアルは、全てCouchbase社によるものでしたが、それとは別に下記のようなチュートリアルも公開されています（こちらも、Couchbase Serverとの同期までをカバーしています）。

https://www.raywenderlich.com/5480-couchbase-tutorial-for-ios-getting-started

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