サービス一覧に戻る

Android Room

Room は Android Jetpack の永続化ライブラリで、SQLite の上に抽象レイヤーを提供し、SQLite の機能をすべて活かしながら、ローカルデータベースへより快適にアクセスできるようにします。SQL クエリをコンパイル時に検証でき、アノテーションによってボイラープレートコードを減らせます。

Android Room の代替サービスを見る
投稿者:
einverne
修正を提案
サイトを開く
最近のレビュー

代替サービス

公式サイトのプレビュー

技術スタック

技術スタックはまだ追加されていません。 ログインして追加を提案

Room は Android Jetpack の一部で、アプリ内の構造化データをローカルデータベースに永続化するために使います。公式ドキュメントによると、最も一般的な用途は重要なデータのキャッシュで、デバイスがネットワークに接続されていない場合でも、ユーザーはそのコンテンツを閲覧できます。公式では、SQLite API を直接呼び出すのではなく、Room を優先して使うことを推奨しています。

3 つの主要コンポーネント

  • データベースクラス(Database):@Database アノテーションを付けた抽象クラスで、RoomDatabase を継承します。データベースを保持し、永続化された基盤データへの接続にアクセスするための主要なエントリポイントとなります。アノテーション内で、関連するすべてのエンティティを列挙する必要があります。
  • データエンティティ(Entity):各エンティティクラスはデータベース内の 1 つのテーブルに対応し、インスタンスはテーブルの 1 行に対応します。@Entity、@PrimaryKey、@ColumnInfo などのアノテーションで定義します。
  • データアクセスオブジェクト(DAO):@Dao を付けたインターフェースで、@Query、@Insert、@Delete などの関数を通じて、クエリ、挿入、更新、削除を行います。

データベースクラスは、DAO ごとに引数のない抽象関数を提供します。アプリは DAO を通じてエンティティオブジェクトを読み取れるほか、エンティティを使って新しい行を作成したり、既存の行を更新したりできます。

主な利点

  • SQL クエリをコンパイル時に検証するため、エラーをビルド段階で早期に発見できます。
  • 便利なアノテーションにより、繰り返しが多くミスしやすいボイラープレートコードを減らせます。
  • データベースのマイグレーション手順を簡素化できます。
  • 公式ドキュメントには、オブジェクト間のリレーション(1 対 1、1 対多、多対多、ネストされたリレーション)、非同期 DAO クエリ、データベースビュー、事前入力済みデータベース、マイグレーション、テストとデバッグなどのトピック別ガイドがあります。
  • 公式ドキュメントには、SQLite から Room への移行ガイドと、Room 2.x から Room 3.0 への移行ガイドが用意されています。
  • Kotlin Multiplatform をサポートしており、他のプラットフォームとデータベースレイヤーを共有できます。

インストールと使い方

モジュールの build.gradle.kts に依存関係を追加します。公式サイトの現行ドキュメントでは Room 3.0(サンプルのバージョンは 3.0.3)が紹介されており、アノテーション処理には KSP が必要です。

dependencies {
    val room_version = "3.0.3"

    implementation("androidx.room3:room3-runtime:$room_version")
    ksp("androidx.room3:room3-compiler:$room_version")
}

その後、エンティティ、DAO、データベースクラスを定義し、Room.databaseBuilder でデータベースインスタンスを作成します。公式サイトのサンプルでは、DAO の関数に Kotlin の suspend 関数を使用し、setDriver(AndroidSQLiteDriver()) でドライバーを指定しています。

注意事項

  • シングルプロセスのアプリでは、データベースインスタンスをシングルトンとして作成してください。RoomDatabase の各インスタンスはコストが高く、通常は複数のインスタンスを必要としないためです。
  • マルチプロセスのアプリでは、データベースの構築時に enableMultiInstanceInvalidation() を呼び出すことで、あるプロセスでの無効化通知が他のプロセスのインスタンスへ自動的に伝達されます。
  • Room はデバイス上のデータ永続化を対象としています。デバイス間の同期、リアルタイムコラボレーション、オフライン対応のクラウドバックエンドが必要な場合、公式では Room を WorkManager および自前のバックエンドと組み合わせるか、Cloud Firestore や Firebase SQL Connect などのマネージドクラウドサービスを使うことを推奨しています。

対象ユーザー

構造化データをローカルに保存・クエリする必要がある Android 開発者に適しています。また、Kotlin Multiplatform でデータベースレイヤーを共有したいチームにも向いています。