React Nativeで使えるデータベースを比較【2021年12月版】(featuring Couchbase Lite)

## はじめに

React Nativeアプリケーションのデータ管理手段について検討してみます。

下記の記事を大いに参考にさせていただきつつ、自分の関心に応じて気づいた範囲でアップデートしています（題名については、オマージュ？ということで）。下記記事では、「Couchbase: 情報が少なかったので除外しました...」とのことだったので、Couchbaseについての記述を追加しています。

https://qiita.com/hiroga/items/df67587036ad0883a950

また、上記記事の参考として挙げられていた下記のサイト(githubリポジトリですが、実際上READMEが下記引用通りののリストとなっています)は、上記記事発表以降もアップデートされており、今回一部参考にさせていただきました（ここに挙げた以上のストレージ系コンポーネントが紹介されています）。

https://github.com/jondot/awesome-react-native

>Awesome React Native is an awesome style list that curates the best React Native libraries, tools, tutorials, articles and more. PRs are welcome!

今回の検討の方向性としては、まずは、アプリケーションのローカルでデータを管理する手法を対象とし、補足的に、アプリケーションにとってのリモート＝サーバーとのデータ同期について触れます。

## Redux

https://redux.js.org/

React Nativeでの利用について、こちらの書籍で詳細に扱われています。

https://www.amazon.co.jp/-/en/%E9%AB%99%E6%9C%A8-%E5%81%A5%E4%BB%8B/dp/4297113910/ref=sr_1_5?keywords=react+native&qid=1639622361&sr=8-5

Reduxそのものの紹介については、上掲の【2018年5月版】や、下記記事などに譲ります。

https://qiita.com/kitagawamac/items/49a1f03445b19cf407b7

## MongoDB Realm

https://docs.mongodb.com/realm/sdk/react-native/

Realmは、MongoDB Atlas (DBaaS)と連携機能(Realm Sync)があります。



## React Native Async Storage

React Nativeから提供されていましたが、下記サイトからの引用のように、すでに非推奨(deprecated)となっています。

https://reactnative.dev/docs/asyncstorage

>Deprecated. Use one of the community packages instead.

コミュニティパッケージのいずれかを使うことが推奨されており、以下で紹介されています。

https://reactnative.directory/?search=storage

## React Native Firebase

https://github.com/invertase/react-native-firebase

>React Native Firebase is a collection of official React Native modules connecting you to Firebase services; each module is a light-weight JavaScript layer connecting you to the native Firebase SDKs for both iOS and Android.

Google社のMBaas(サービスとしてのモバイルバックエンド)のフロントエンド。

## SQLite

### react-native-sqlite-2

https://github.com/craftzdog/react-native-sqlite-2

>SQLite3 Native Plugin for React Native for Android, iOS, Windows and macOS. This plugin provides a WebSQL-compatible API to store data in a react native app, by using a SQLite database on the native side.

>Inspired by fantastic work done by Nolan Lawson. It should be a drop-in replacement for react-native-sqlite-storage. It works pretty well with PouchDB on React Native app.

https://dev.to/craftzdog/announcing-react-native-sqlite-2-3-0-1-36h7

上記記事の日本語訳が下記で公開されています。

https://qiita.com/craftzdog/items/758e8847e9e1b33b20d1


### react-native-sqlite-storage

https://github.com/andpor/react-native-sqlite-storage

下記の利用記事が公開されています。

https://dev-yakuza.posstree.com/react-native/react-native-sqlite-storage/

### react-native-simple-store

https://github.com/jasonmerino/react-native-simple-store

下記でコードのサンプルを見つけることができます。

https://codesandbox.io/examples/package/react-native-simple-store


## react-native-local-mongodb

https://github.com/antoniopresto/react-native-local-mongodb

>Embedded persistent or in memory database for react-native. API is a subset of MongoDB's (NeDB).

>It is a subset of MongoDB's (NeDB) API (the most used operations).

下記でコードのサンプルを見つけることができます。

https://codesandbox.io/examples/package/react-native-local-mongodb

## Couchbase Lite

Couchbase Liteは、iOS、Android、.Netプラットフォーム用の組み込みNoSQLデータベースです。Android（Java）、iOS（Swift、Objective-C）、およびUWP/Xamarin（C#）のネイティブプラットフォームバインディングをサポートしています。

Couchbase Liteには、Couchbase Serverとの双方向同期を行う機能が提供されています。

React Nativeアプリで、Couchbase Liteを使用する場合、Couchbase LiteのネイティブAPIにアクセスする必要があります。そのために、React Nativeモジュールを利用します。

https://reactnative.dev/docs/native-modules-android

https://reactnative.dev/docs/native-modules-ios

### アーキテクチャー
Couchbase Liteを使用するReact Nativeアプリのアーキテクチャー以下のような構成を持ちます。

- **UIレイヤー**: JavaScript/TypeScriptで記述され、AndroidとiOSとで共通
- **データ永続化レイヤー**: ネイティブプラットフォーム言語で記述され、Couchbase Liteとのインターフェースを担当する。
- **Couchbase LiteネイティブAPI**: React Nativeモジュールを使用してJavascript UIにエクスポートされる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/806977b4-6555-f515-05d6-d99da0e5b061.png)

以下のようなチュートリアルが公開されています。提供されているReact NativeのUI実装（スタータープロジェクト）に対して、Couchbase Liteを利用するためのコードを追加していく形になっています。2018年時点のものにて、提供されているReact Nativeのソースコードは、すでに時代遅れなものとなっていますが、提供されているUI実装は無視しても（React Nativeを昔から使っている人は、提供物をベースに最新化してもよいかもしれませんが ）、チュートリアルの内容を参考にして実装を行うことができるでしょう（将来別の記事で発表したいと思っています）。

https://blog.couchbase.com/couchbase-lite-react-native/

https://docs.couchbase.com/tutorials/hotel-finder/ios.html

https://docs.couchbase.com/tutorials/hotel-finder/android.html

### react-native-couchbase-lite

https://github.com/couchbaselabs/react-native-couchbase-lite

>NOTE: This plugin works for Couchbase Lite 1.x only. For new projects, we recommend to use the Couchbase Lite 2.0 Native API and to write your own wrapper to access Couchbase Lite APIs from a JavaScript codebase (see https://facebook.github.io/react-native/docs/communication-ios.html).

ご注意まで。

### Couchbaseについて

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

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

Couchbase Liteについての記事を以下の投稿で整理しています。

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

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