なぜ、Couchbaseなのか?〜モバイル/エッジコンピューティングプラットフォームとしての観点から

## はじめに

Couchbaseは、NoSQLドキュメント指向データベースです。この表現は間違ってはいませんが、若干正確性を欠いてもいます。つまり、Couchbaseという名前を持つデータベースには、Couchbase ServerとCouchbase Liteというふたつが存在します。

ここではモバイル/エッジコンピューティングプラットフォームとしてのCouchbaseについて解説します。この観点においては、Couchbase ServerとCouchbase Liteの両方が重要な役割を持ちます。

以下、上述の本題に進む前にいくつか基本的な部分を整理します。

### NoSQLドキュメント指向データベースについて

NoSQLドキュメント指向データベースについては、パブリッククラウドが提供する独自のテクノロジーを除くと、代表的なものとして以下の3つをあげることができます。

- MongoDB
- Apache CouchDB
- Couchbase Server

### Couchbase Serverについて

Couchbase Serverについて、2021年11月に、以下の書籍を上梓しました。

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

Couchbase Serverに関しては、上記書籍に日本語で読める最新の情報が整理されています。

オンデマンド版のページの試し読みでは、ふたりの登場人物の会話形式によるプロローグを読むことができます。また、Kindle版のサンプルを入手いただくと、「第１章 Couchbase Serverとは何か」を全てお読みいただくことが可能です。

MongoDBとの違いや、Apache CouchDBとの関係などは、こちらをご参照ください。

## モバイル/エッジコンピューティングプラットフォームとしてのCouchbase

### モバイル（組込）データベース

モバイルアプリケーションで利用することのできるデータベースとしては、[SQLite](https://www.sqlite.org/index.html)が筆頭に上げられるのではないかと思います。あるいは、iOS開発者であれば、[Core Data](https://developer.apple.com/documentation/coredata)を思い出すかもしれません。また、オブジェクト指向モバイルデータベースとして、[Realm](https://realm.io/)が知られています。

### Couchbase Liteについて

Couchbase Liteは、NoSQLドキュメント指向モバイル（組込）データベースです。KotlinやSwiftなどの開発言語を利用して、AndroidやiOSアプリケーションで利用することができるだけでなく、JVM環境でも動かすことができます。また、3.0.0ベータでは、C/C++環境でも利用することができるようになりました。これにより、エッジデバイスでの利用の幅が格段に広がっています。

### Couchbase Mobileとは何か？

ここで、新しい言葉が登場します。「Couchbase Mobile」とは、単体のデータベースないし何らかのテクノロジーを指す言葉ではなく、Couchbase LiteとSync Gatewayを含むカテゴリーとして用いられています。
Sync Gatewayとは、Couchbase LiteとCouchbase Serverとのデータ同期を行う技術です（具体的には、Couchbase Serverともに用いられる、Couchbase LiteとCouchbase Serverとの間でデータ同期を仲介するサーバーソフトウェアです）。

## モバイルデータベースの重要性

スマートフォン上で利用されるモバイルアプリケーションの多くは、サーバーとデータを通信しながら稼働します。モバイルデータベースといえども、その中に格納されるデータは、モバイル端末で作成・保存・利用されれば十分なものばかりとは限らず、サーバーとの間で、データのやりとり〜サーバーからのデータの取得、サーバーへのデータの登録・更新〜が行われるデータを含むことがあります。サーバー（データベース）との間で、データ通信が行われる場合に、あえてローカルデータベースを持つ理由・利点としては、以下があります。

- ネットワーク依存の分離
- 通信ロジックの分離

それぞれについて、以下解説します。

## ネットワーク依存の分離

### オフラインファーストアプリケーション

ローカルデータベースを持つことによって、ネットワーク通信が行えない環境でもデータを利用しつつ、ネットワークが回復した場合にデータの同期を行う、という設計を指して「オフラインファーストアプリケーション」という言葉が使われます。
航空会社の従業員用のアプリケーションというユースケースもありますが、「ネットワーク通信が行えない環境」と言われても、非常に特殊なケースという印象を持つ方も多いかもしれません。その意味では、「オフラインファーストアプリケーション」は、「ユーザーエクスペリエンス向上」の中の一形態と考えた方が良いかもしれません。

### ユーザーエクスペリエンス向上

モバイルデータベースを持たないアプリケーションが、サーバーからデータを取得して表示する場合、ユーザーがアプリケーションを立ち上げてから、データが画面が表示されるまでの期間は、ユーザー体験として、空白期間（単なる待ち時間）になります。これはウェブアプリケーションに典型的に見られる状況ということがいえます。
モバイルデータベースの存在は、「ネットワーク依存」をアプリケーション操作から分離するために役立たせることができます。当然ながら、モバイルデータベースを導入するだけで自動的に解決するようなものではなく、開発者が適切にユーザー体験をデザインする必要がありますが、ローカルデータベースとアプリケーションの関係をこうした観点から整理することができます。

## 通信ロジックの分離

ここまで、モバイルデータベースの意義について、ユーザーの利便性の観点から見てきました。「オフラインファーストアプリケーション」にしろ「ユーザーエクスペリエンス向上」にしろ、必要なのは、データの扱いをデザインすることであり、モバイルデータベースの導入は、その手段でしかないといえます。
そもそもデータベースは、アプリケーションアーキテクチャーにおける、データとロジックの分離を可能にするために存在しています。つまり、汎用的な処理（データマネジメント）を信頼性のある既存のテクノロジーに任せることで、開発者は利益を得ています。ローカルデータベースとリモートデータベースの同期を、データベースプロダクト（データプラットフォーム）に任せることにより、開発者はさらに、通信ロジックについても、信頼性のある既存のテクノロジーに任せることが可能になります。

これには、次のような副産物が伴います。

### プレビルトデータベース

アプリケーションが利用するデータを、アプリケーションインストール時に、データベースとして同梱することにより、初期データへのアクセスと、それ以外のデータへのアクセス手法を区別する必要がなくなります。

### マルチプラットフォーム/チャネル

同じサービスをモバイルアプリケーションとウェブアプリケーションの両方の形態で提供することは珍しくありません。このような場合に、モバイルアプリケーションではローカルデータベースを利用し、ウェブアプリケーションでは、ローカルデータベースと同期されたデータベースを利用することが考えられます。結果として、全体として、統一されたテクノロジーを採用することができます。

## 最後に

本稿では、データプラットフォームとして、Couchbaseを採用する意義について、モバイル/エッジコンピューティングプラットフォームとしての観点から概念的に整理しました。

テクノロジーを理解し、選定する際には、全体像、そして個々の要素について、具体的に把握することが欠かせません。
Couchbase Mobileについての記事を以下の投稿で整理していますので、ご関心に応じて、参照してみてください。

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