3
1

More than 1 year has passed since last update.

Androidアプリ開発におけるローカルデータベース〜Room覚書

Posted at

はじめに

1年以上前(2021年1月)に下記の記事を書きました。

Realm、Couchbase Liteからはじめ、色々とマイナーなものを取り上げたものの、影響力に鑑みて、Android Roomを無視するわけには〜OSレベルの汎用性は別として〜いかないと考え、調査を始めた記録を覚書として残します。

上記記事を執筆したモチベーションは、業界の技術動向を理解した上で、Couchbase Lite/Mobileを、その中に位置付けることでした。Couchbase Mobileについては、以下参照ください。

Couchbase Mobileは、NoSQL組み込みデータベースCouchbase Lite、およびCouchbase ServerとCouchbase Liteとのデータ同期を担うSync Gatewayからなります。
Couchbase Serverについては、次の拙著を紹介させていただきます。

RoomとRealmの比較

Realm
メリット
・速い
動作はSQLiteよりも早く、
・iosとAndroidともに対応

デメリット
apkファイルを2.5MB増加させる

Room
メリット
・SQLiteデータベースにアクセスする処理がとても簡単に記述できます。
・SQLの中に現れるカラム名のミスなどがコンパイル時にエラーとして検出できることが強みです。
・LiveDataと一緒に使えばデータ変更を検知してUIを更新するような処理がとても簡単に記述できます。

デメリット
Swiftにはない

Android Room

Room は、SQLite 全体を対象とする抽象化レイヤを提供し、SQLite を最大限に活用しつつ、スムーズなデータベース アクセスを可能にします。

比較的大量の構造化データを処理するアプリは、そのデータをローカルに永続化することで大きなメリットを得ることができます。最も一般的なユースケースは、関連データのキャッシュを保存することです。これにより、デバイスがネットワークにアクセスできない場合でも、ユーザーはオフラインでコンテンツを閲覧することができます。ユーザーがコンテンツに変更を加えた場合は、デバイスがオンラインに戻った後にサーバーに同期されます。

Room を使用すれば、このような処理が自動的に実行されるため、SQLite の代わりに Room を使用することを強くおすすめします。SQLite API を直接使用したい場合は、SQLite を使用してデータを保存するをご覧ください。

注: 上記の API は強力ですが、極めてローレベルであるため、活用するにはかなりの時間と労力が必要となります。

RAW SQL クエリはコンパイル時に検証されません。データグラフに変更があった場合、影響を受ける SQL クエリを手動でアップデートする必要があります。これは、時間がかかり、エラーも発生しやすいプロセスです。
SQL クエリとデータ オブジェクトを変換するには、大量のボイラープレート コードを記述する必要があります。

Android Room

Room アーキテクチャー

image.png

(画像は上述の公式ドキュメントRoom を使用してローカル データベースにデータを保存するより引用)

オブジェクト間のリレーション

SQLite はリレーショナル データベースであるため、エンティティ間のリレーションを指定できます。ほとんどのオブジェクト リレーショナル マッピング ライブラリにおいて、エンティティ オブジェクト間の相互参照が可能ですが、Room では明示的に禁止されています。

  • 埋め込みオブジェクト
  • 1 対 1 のリレーション
  • 1 対多のリレーション
  • 多対多のリレーション
  • ネストされたリレーション

最後に

下記の記事には、Realmを利用した簡単なアプリのサンプルがあるので、実際に動作確認の上、Room利用版を作ってみても面白そうだと考えています。

関連情報

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1