Room

Room 永続ライブラリは SQLite 全体に抽象化レイヤを提供することで、データベースへのより安定したアクセスを可能にし、SQLite を最大限に活用できるようにします。
最新の更新 安定版リリース リリース候補版 ベータ版リリース アルファ版リリース
2024 年 12 月 11 日 2.6.1 - - 2.7.0-alpha12

依存関係の宣言

Room への依存関係を追加するには、Google の Maven リポジトリをプロジェクトに追加する必要があります。詳しくは、Google の Maven リポジトリをご覧ください。

Room の依存関係には、Room による移行のテストRoom RxJava が含まれます。

アプリまたはモジュールの build.gradle ファイルに、必要なアーティファクトの依存関係を追加します。

Kotlin

dependencies {
    val room_version = "2.6.1"

    implementation("androidx.room:room-runtime:$room_version")

    // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP)
    // See Add the KSP plugin to your project
    ksp("androidx.room:room-compiler:$room_version")

    // If this project only uses Java source, use the Java annotationProcessor
    // No additional plugins are necessary
    annotationProcessor("androidx.room:room-compiler:$room_version")

    // optional - Kotlin Extensions and Coroutines support for Room
    implementation("androidx.room:room-ktx:$room_version")

    // optional - RxJava2 support for Room
    implementation("androidx.room:room-rxjava2:$room_version")

    // optional - RxJava3 support for Room
    implementation("androidx.room:room-rxjava3:$room_version")

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation("androidx.room:room-guava:$room_version")

    // optional - Test helpers
    testImplementation("androidx.room:room-testing:$room_version")

    // optional - Paging 3 Integration
    implementation("androidx.room:room-paging:$room_version")
}

Groovy

dependencies {
    def room_version = "2.6.1"

    implementation "androidx.room:room-runtime:$room_version"

    // If this project uses any Kotlin source, use Kotlin Symbol Processing (KSP)
    // See KSP Quickstart to add KSP to your build
    ksp "androidx.room:room-compiler:$room_version"

    // If this project only uses Java source, use the Java annotationProcessor
    // No additional plugins are necessary
    annotationProcessor "androidx.room:room-compiler:$room_version"

    // optional - RxJava2 support for Room
    implementation "androidx.room:room-rxjava2:$room_version"

    // optional - RxJava3 support for Room
    implementation "androidx.room:room-rxjava3:$room_version"

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation "androidx.room:room-guava:$room_version"

    // optional - Test helpers
    testImplementation "androidx.room:room-testing:$room_version"

    // optional - Paging 3 Integration
    implementation "androidx.room:room-paging:$room_version"
}

KAPT プラグインの使用方法については、KAPT のドキュメントをご覧ください。

KSP プラグインの使用方法については、KSP クイックスタートのドキュメントをご覧ください。

Kotlin 拡張機能の使用方法については、ktx のドキュメントをご覧ください。

依存関係について詳しくは、ビルド依存関係の追加をご覧ください。

Android 以外のライブラリ(Java または Kotlin のみの Gradle モジュールなど)の場合は、必要に応じて androidx.room:room-common を利用して Room アノテーションを使用できます。

コンパイラ オプションの構成

Room のアノテーション プロセッサ オプションは次のとおりです。

room.schemaLocation directory
指定したディレクトリの JSON ファイルにデータベース スキーマをエクスポートできるようにします。詳しくは、Room の移行をご覧ください。
room.incremental boolean
Gradle の増分アノテーション プロセッサを有効にします。デフォルト値は true です。
room.generateKotlin boolean
Java ではなく Kotlin ソースファイルを生成します。KSP が必要です。 デフォルト値は false です。詳しくは、バージョン 2.6.0 のリリースノートをご覧ください。

Room Gradle プラグインを使用する

Room バージョン 2.6.0 以降では、Room Gradle プラグインを使用して Room コンパイラ用のオプションを構成できます。このプラグインは、生成されたスキーマ(コンパイル タスクの出力で、自動移行に使用されます)が再現可能でキャッシュに保存可能なビルドになるように、プロジェクトを正しく構成します。

プラグインを追加するには、最上位の Gradle ビルドファイルで、プラグインとそのバージョンを定義します。

Groovy

plugins {
    id 'androidx.room' version "$room_version" apply false
}

Kotlin

plugins {
    id("androidx.room") version "$room_version" apply false
}

モジュール レベルの Gradle ビルドファイルで、プラグインを適用し、room 拡張機能を使用します。

Groovy

plugins {
    id 'androidx.room'
}

android {
    ...
    room {
        schemaDirectory "$projectDir/schemas"
    }
}

Kotlin

plugins {
    id("androidx.room")
}

android {
    ...
    room {
        schemaDirectory("$projectDir/schemas")
    }
}

Room Gradle プラグインを使用する場合は、schemaDirectory を設定する必要があります。これにより、Room コンパイラとさまざまなコンパイル タスクとそのバックエンド(javac、KAPT、KSP)が構成され、スキーマ ファイルがフレーバー フォルダ(schemas/flavorOneDebug/com.package.MyDatabase/1.json など)に出力されます。これらのファイルは、検証と自動移行に使用するためにリポジトリにチェックインする必要があります。

一部のオプションは、Room コンパイラでサポートされているにもかかわらず、Room Gradle プラグインのすべてのバージョンで構成することはできません。次の表に、各オプションと、room 拡張機能を使用してそのオプションの構成をサポートする Room Gradle プラグインのバージョンを示します。バージョンがそれより前の場合や、このオプションがまだサポートされていない場合は、代わりにアノテーション プロセッサ オプションを使用できます。

オプション バージョン
room.schemaLocation(必須) 2.6.0
room.incremental -
room.generateKotlin -

アノテーション プロセッサ オプションを使用する

Room Gradle プラグインを使用していない場合や、必要なオプションがプラグインのバージョンでサポートされていない場合は、ビルド依存関係を追加するで説明されているように、アノテーション プロセッサ オプションを使用して Room を構成できます。アノテーション オプションを指定する方法は、Room に KSP と KAPT のどちらを使用するかによって異なります。

Groovy

// For KSP
ksp {
    arg("option_name", "option_value")
    // other otions...
}

// For javac and KAPT
android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments += [
                    "option_name":"option_value",
                    // other options...
                    ]
            }
        }
    }
}

Kotlin

// For KSP
ksp {
    arg("option_name", "option_value")
    // other options...
}

// For javac and KAPT
android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments += mapOf(
                    "option_name" to "option_value",
                    // other options...
                )
            }
        }
    }
}

room.schemaLocation はプリミティブ タイプではなくディレクトリであるため、このオプションを追加するときに CommandLineArgumentsProvider を使用する必要があります。これにより、最新性チェックの実行時に Gradle がこのディレクトリを認識できるようになります。Room データベースを移行するでは、スキーマの場所を指定する CommandLineArgumentsProvider の完全な実装を示しています。

フィードバック

お寄せいただいたフィードバックは Jetpack 改善の参考にさせていただきます。新しい問題が見つかった場合や、このライブラリを改善するアイデアをお持ちの場合は、お知らせください。新しい問題を報告していただく前に、このライブラリの既存の問題をご確認ください。スターボタンをクリックすると、既存の問題に投票できます。

新しい問題を報告する

詳細については、Issue Tracker のドキュメントをご覧ください。

バージョン 2.7

バージョン 2.7.0-alpha12

2024 年 12 月 11 日

androidx.room:room-*:2.7.0-alpha12 がリリースされました。バージョン 2.7.0-alpha12 に含まれる commit はこちらをご覧ください。

API の変更

  • 試験運用版の API RoomDatabase.Builder.setInMemoryTrackingMode() を追加し、Room が無効化のトラッキングにインメモリ テーブルを使用するかどうかを設定できるようにしました。(I2a9b2b/185414040

バグの修正 - 破壊的な移行でビューが破棄され、再作成されるようになりました。これにより、allowDestructiveMigrationForAllTables がオン(KMP のデフォルト)の場合の動作と、オフの場合の既存の動作が一致するようになりました。(0a3e83b/381518941

バージョン 2.7.0-alpha11

2024 年 10 月 30 日

androidx.room:room-*:2.7.0-alpha11 がリリースされました。バージョン 2.7.0-alpha11 に含まれる commit はこちらをご覧ください。

API の変更

  • 新しく追加された convertRows() メソッドのシグネチャを再検討し、部屋のページング用の RawRoomQuery を受け取る suspend 関数にします。(Ie57b5b/369136627

バグの修正

  • PagingSource と組み合わせて @Relation を使用すると無効なコードが生成される room-paging の問題を修正しました。

バージョン 2.7.0-alpha10

2024 年 10 月 16 日

androidx.room:room-*:2.7.0-alpha10 がリリースされました。バージョン 2.7.0-alpha10 に含まれる commit はこちらをご覧ください。

API の変更

  • Android 以外のプラットフォームと JVM 以外のプラットフォームで ByteBuffer とのリレーションをサポートする内部 ByteArrayWrapper クラスを作成します。(I75543b/367205685
  • さまざまな SQLITE_DATA_* 結果定数とともに SQLiteStatement.getColumnType() を追加して、列のデータ型を取得できるようにします。(I1985cb/369636251

バージョン 2.7.0-alpha09

2024 年 10 月 2 日

androidx.room:room-*:2.7.0-alpha09 がリリースされました。バージョン 2.7.0-alpha09 に含まれる commit はこちらをご覧ください。

バグの修正

  • 読み取り接続で書き込みトランザクションを開始したために Error code: 8, message: attempt to write a readonly database が発生する room-paging の KMP 実装の問題を修正しました。(b/368380988

バージョン 2.7.0-alpha08

2024 年 9 月 18 日

androidx.room:room-*:2.7.0-alpha08 がリリースされました。バージョン 2.7.0-alpha08 に含まれる commit はこちらをご覧ください。

新機能

  • room-paging アーティファクトは、KMP と互換性があるように移行されました。(Ib8756b/339934824
  • API invalidationTrackerFlow() は、InvalidationTracker.createFlow() としてファーストパーティ API として共通化され、KMP プロジェクトの Android 以外のソースセットで使用できるようになりました。(I1fbfa、(I8fb29)、b/329291639b/329315924

API の変更

  • Cursor という単語が使用されている Room の警告とエラー メッセージはすべて削除または置き換えられました。これは、Cursor が KMP バージョンの Room で使用できる正確な一般的な用語ではなくなったためです。(Id8cd9b/334087492

バグの修正

  • Room KMP が JVM 以外のプラットフォームで UUID を使用してコードを出力しようとする問題を修正しました。(b/362994709
  • Compose マルチプラットフォームを使用した KMP プロジェクトで Room Gradle プラグインを使用すると、「変更のためにロックされた後、構成の属性を変更できません」などのエラーが発生する問題を修正しました。(b/343408758

バージョン 2.7.0-alpha07

2024 年 8 月 21 日

androidx.room:room-*:2.7.0-alpha07 がリリースされました。バージョン 2.7.0-alpha07 に含まれる commit はこちらをご覧ください。

新機能

  • Room Gradle プラグインは、エクスポートされたスキーマを Android インストルメンテーション テストのリソースソースに自動的に追加し、MigrationTestHelper で使用できるようにします。

バグの修正

  • RoomDatabaseConstructor の生成された「actual」に、initialize 関数で「actual」修飾子が欠落している問題を修正しました(その関数が「expect」宣言でオーバーライドされている場合)。(359631627
  • RoomDatabaseConstructor の生成された「実際」が「expect」宣言の公開設定と一致しない問題を修正しました。(358138953

バージョン 2.7.0-alpha06

2024 年 8 月 7 日

androidx.room:room-*:2.7.0-alpha06 がリリースされました。バージョン 2.7.0-alpha06 には、これらの commit が含まれています。

API の変更

  • KMP プロジェクトの RoomDatabase のインスタンス化設定を変更します。

Kotlin 2.0 コンパイルモデルにより、生成される関数(instantiateImpl() という名前)を参照する戦略は、もはや有効ではありません。instantiateImpl() 戦略に代わる 2 つの新しい API(@ConstructedByRoomDatabaseConstructor)が導入されました。新しい戦略は次のとおりです。

  1. RoomDatabaseConstructor を実装する expect オブジェクトを定義する

      expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
    
  2. @ConstructedBy を使用してオブジェクトを @Database 宣言にリンクする

      @Database(...)
      @ConstructedBy(MyDatabaseCtor::class) // NEW
      abstract class MyDatabase : RoomDatabase
    
  3. ファクトリ パラメータを渡さずに新しいデータベース インスタンスを作成する

      fun createNewDatabase(path: String) =
        Room.databaseBuilder<AppDatabase>(name = path)
          .setDriver(BundledSQLiteDriver())
          .setQueryCoroutineContext(Dispatchers.IO)
          .build()
    

b/316978491b/338446862b/342905180 を修正

  • Room KMP で @RawQuery をサポートするために、RoomRawQuery という新しい API を追加しました。この API は、元の SQL 文字列を保持する点と、引数をステートメントにバインドする関数という点で SupportSQLiteQuery に似ています。@RawQuery アノテーション付きの関数で、RoomRawQuery を単一のパラメータとして受け取ることができるようになりました。(Iea844b/330586815
  • CoroutineContext を受け入れる setQueryCallback() のオーバーロードを追加します。(Id66ffb/309996304
  • linuxArm64 Kotlin マルチプラットフォーム ターゲットのサポートを追加しました。(I139d3b/338268719

バグの修正

  • Android 以外のターゲットで Room が recursiveFetchArrayMap への呼び出しを誤って生成する問題を修正しました。(710c36b/352482325
  • KMP プロジェクトで Room が「接続の試行中にタイムアウトしました」という例外をスローすることがある問題を修正しました。(fa72d0b/347737870
  • 他のテーブルが新しい外部キーに合わせてスキーマを変更する前に、外部キーをチェックしすぎる自動移行の問題を修正しました。(7672c0b/352085724

バージョン 2.7.0-alpha05

2024 年 7 月 10 日

androidx.room:room-*:2.7.0-alpha05 がリリースされました。バージョン 2.7.0-alpha05 には、これらの commit が含まれています。

API の変更

  • SQLiteKt の名前を SQLite に、BundledSQLiteKt の名前を BundledSQLite に変更しました。(I8b501

バグの修正

  • AndroidSQLiteDriver の使用時に RoomDatabase がデッドロックする、または接続タイムアウトでエラーになるバグを修正しました。

バージョン 2.7.0-alpha04

2024 年 6 月 12 日

androidx.room:room-*:2.7.0-alpha04 がリリースされました。バージョン 2.7.0-alpha04 に含まれる commit はこちらをご覧ください。

バグの修正

  • DAO でマルチマップ戻り値型が定義されている場合に、Room のアノテーション プロセッサで互換性のない KMP コードが生成される問題を修正しました。(b/340983093
  • @Database アノテーションが付与されたクラスにパッケージがない場合、Room が生成されたデータベース実装を見つけられない問題を修正しました。(b/342097292
  • 自動クローズと複数インスタンスの無効化を有効にすると、アイドル状態のためにデータベースが自動的にクローズされたときに ConcurrentModificationException が発生することがある問題を修正しました。

バージョン 2.7.0-alpha03

2024 年 5 月 29 日

androidx.room:room-*:2.7.0-alpha03 がリリースされました。バージョン 2.7.0-alpha03 には、これらの commit が含まれています。

バグの修正

  • Kotlin 2.0 と KSP 2.0 に関するさまざまな問題を修正。KSP 2 をサポートする Kotlin 2.0 は完成しておらず、チームは新しいコンパイラにおけるさまざまな API と動作の変更に取り組んでいます。(b/314151707

バージョン 2.7.0-alpha02

2024 年 5 月 14 日

androidx.room:room-*:2.7.0-alpha02 がリリースされました。バージョン 2.7.0-alpha02 には、これらの commit が含まれています。

バグの修正

  • KSP に関するさまざまな問題を修正しました。

バージョン 2.7.0-alpha01

2024 年 5 月 1 日

androidx.room:room-*:2.7.0-alpha01 がリリースされました。バージョン 2.7.0-alpha01 には、これらの commit が含まれています。

新機能

  • Kotlin マルチプラットフォーム(KMP)のサポート: このリリースでは、Room がリファクタリングされ、Kotlin マルチプラットフォーム(KMP)ライブラリになりました。まだ作業が残されていますが、このリリースでは、機能の大部分が「共通化」(マルチプラットフォーム化)された Room の新しいバージョンが導入されます。現在サポートされているプラットフォームは、Android、iOS、JVM(パソコン)、ネイティブ Mac、ネイティブ Linux です。新たにサポートされるプラットフォームで不足している機能は、今後の Room リリースで「機能がすべて揃った」状態になります。

Room KMP の使用を開始する方法について詳しくは、Room KMP の公式ドキュメントをご覧ください。

  • 処理が KSP 経由で行われる場合、KSP での Kotlin コード生成はデフォルトでオンになっています。KAPT または Java のみのプロジェクトの場合、Room は引き続き Java ソースを生成します。

API の変更

  • 生成された RoomDatabase 実装をインスタンス化するときにリフレクションの使用を回避するために、Room 生成関数で使用することを目的としたラムダ パラメータを取る Room.databaseBuilder() のオーバーロードが追加されました。使用例:
Room.databaseBuilder<MyDatabase>(
    context = appContext,
    name = dbFilePath,
    factory =  { MyDatabase::class.instantiateImpl() }
)
  • CoroutineContext を使用して Room を構成する API がビルダー RoomDatabase.Builder.setQueryCoroutineContext に追加されました。RoomDatabase は、setQueryExecutor を使用するエグゼキュータまたは Coroutine コンテキストのいずれかを使用してのみ構成できます。両方を使用することはできません。
  • SQLite ドライバで Room を構成するための API が追加されました。RoomDatabase.Builder.setDriver()SQLite Driver API の詳細については、SQLite KMP のドキュメントをご覧ください。
  • ドライバ API から基盤となる SQLiteConnection にアクセスするための API(RoomDatabase.useReaderConnectionRoomDatabase.useWriterConnection)が追加されました。
  • Room 関連の複数のコールバックに、SupportSQLiteDatabase ではなく SQLiteConnection を受け入れるオーバーロード バージョンが追加されました。これらは、KMP プロジェクトに移行するときにオーバーライドすることを目的としています。Android アプリでの Room の使用を共通の KMP モジュールに移行する方法については、移行ガイドをご覧ください。コールバックは次のとおりです。
    • Migration.migrate(SQLiteConnection)
    • AutoMigrationSpec.onPostMigrate(SQLiteConnection)
    • RoomDatabase.Callback.onCreate(SQLiteConnection)
    • RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)
    • RoomDatabase.Callback.onOpen(SQLiteConnection)
  • KTX アーティファクト androidx.room:room-ktx は、すべての API とともに androidx.room:room-runtime に統合され、アーティファクトは空になりました。依存関係リストから削除してください。

バージョン 2.6

バージョン 2.6.1

2023 年 11 月 29 日

androidx.room:room-*:2.6.1 がリリースされました。バージョン 2.6.1 に含まれる commit については、こちらをご覧ください

バグの修正

  • EntityCursorConverter の Double 列のデフォルト値が 0.0 ではなく 0 に設定されていた生成コードの問題を解決しました。また、浮動小数点型の列の同様のエッジケースに対する潜在的な修正も含まれています。(Id75f5b/304584179
  • PagingSource 読み込みからスローされた例外は、Throwable を含む LoadResult.ErrorLoadStateUpdate として伝播されるようになりました。このエラー状態は、PagingDataAdapter.loadStateFlow(Views) または LazyPagingItems.loadState(Compose) で確認できます。これは動作の変更を意味します。以前は、読み込みエラーは、読み込みをトリガーした dao メソッドによってスローされる例外としてバブルアップされていました。(I93887b/302708983

バージョン 2.6.0

2023 年 10 月 18 日

androidx.room:room-*:2.6.0 がリリースされました。バージョン 2.6.0 に含まれる commit については、こちらをご覧ください

2.5.0 以降の重要な変更

  • Kotlin コード生成(「Kotlin CodeGen」)を有効にするオプションが Room KSP で利用可能になりました。(4297ec0)。Room で Kotlin CodeGen を有効にするには、KSP のプロセッサ オプションに room.generateKotlin オプション名を追加します。KSP のプロセッサ オプションを渡す方法の詳細については、KSP のドキュメントをご覧ください。

注: Kotlin CodeGen を使用する場合は、追加の制限が適用されていることに注意してください。Kotlin CodeGen で抽象プロパティを DAO ゲッターまたは DAO クエリとして使用することはできません。代わりに、プロパティ値が不変で、固定された結果が格納されているという誤解を避けるために、関数として書き換える必要があります。また、Room for Kotlin CodeGen で Nullable コレクションの戻り値の型が許可されなくなりました。

警告: Kotlin CodeGen を使用すると、プロジェクトの null 可能性に関する制限が厳しくなる場合があります。Kotlin CodeGen では型引数の null 可能性は重要ですが、Java ではほとんど無視されます。たとえば、戻り値の型が Flow<foo\> で、テーブルが空であるとします。Java CodeGen では問題は発生しませんが、Kotlin CodeGen ではエラーが発生します。これを回避するには、null が生成されることを前提として、Flow<foo?\> を使用する必要があります。</foo?\></foo\>

  • Room Gradle プラグインの新しいアーティファクトが ID androidx.room で Room に追加されました。これにより、Gradle アノテーション プロセッサ オプションを介してスキーマの入出力を持つことに関する Room の既存の問題が解決されます。詳細については、Room バージョン 2.6.0-alpha02 リリースノートをご覧ください。
  • Room エンティティの値クラスが KSP でサポートされるようになりました。(4194095
  • Room で、DAO 関数のネストされた Map 戻り値の型がサポートされるようになりました。(I13f48203008711

バージョン 2.6.0-rc01

2023 年 9 月 20 日

androidx.room:room-*:2.6.0-rc01 がリリースされました。バージョン 2.6.0-rc01 に含まれる commit については、こちらをご覧ください

バージョン 2.6.0-beta01

2023 年 8 月 23 日

androidx.room:room-*:2.6.0-beta01 がリリースされました。バージョン 2.6.0-beta01 に含まれる commit については、こちらをご覧ください

バグの修正

  • アップサート中に 2067 SQLITE_CONSTRAINT_UNIQUE 例外がスローされたときに発生する、アップサート中の特殊なケースの SQLite 例外を処理。アップサート中に更新を実行する必要があります。(If2849b/243039555

バージョン 2.6.0-alpha03

2023 年 8 月 9 日

androidx.room:room-*:2.6.0-alpha03 がリリースされました。バージョン 2.6.0-alpha03 に含まれる commit については、こちらをご覧ください

新機能

  • Room で、DAO 関数のネストされた Map 戻り値の型がサポートされるようになりました。(I13f48203008711

API の変更

  • 非推奨となった @MapInfo に代わる新しい型アノテーションとして @MapColumn が作成されました。@MapInfo アノテーションで指定された列名(keyColumnNamevalueColumnName、またはその両方)ごとに、columnName のみを使用して @MapColumn アノテーションを宣言し、DAO 関数の戻り型で参照されている特定の型引数(Map のキーまたは値)にアノテーションを使用する必要があります。これは、@MapColumn アノテーションが、@MapInfo のような関数自体ではなく、DAO 関数の戻り値の型内の型引数で直接使用されるためです。詳細については、@MapColumn のドキュメントをご覧ください。(Ib0305b/203008711
  • API ファイルを更新して、互換性抑制のアノテーションを付けました。(I8e87ab/287516207
  • Room Gradle プラグイン API が更新され、バリアントごとの構成が常に必要ではなくなりました。つまり、このプラグインは、複数のディレクトリを作成することなく、すべてのバリアントのグローバルなロケーションを受け入れることができるため、スムーズな移行が可能になります。また、プラグインのメリット(再現可能でキャッシュに保存可能なビルド)を維持しながら、フレーバーやビルドタイプのスキーマを手動で構成することもできます。(I09d6fb/278266663

バグの修正

  • QueryInterceptorStatement の潜在的なメモリリークの脆弱性を修正しました。(I193d1
  • QueryInterceptorDatabase execSQL() 関数の誤った動作を修正しました。(Iefdc8

バージョン 2.6.0-alpha02

2023 年 6 月 21 日

androidx.room:room-*:2.6.0-alpha02 がリリースされました。バージョン 2.6.0-alpha02 に含まれる commit については、こちらをご覧ください

Room Gradle プラグイン

この新しいリリースには、ID androidx.room の Room Gradle プラグインの新しいアーティファクトが含まれています。これにより、Gradle アノテーション プロセッサ オプションを介してスキーマの入出力を持つことに関する Room の既存の問題が解決されます。Room Gradle プラグインは、自動移行に使用され、コンパイル タスクの出力として生成されるスキーマが、再現可能でキャッシュに保存可能なビルドになるようにプロジェクトを構成します。このプラグインには、ベーススキーマの場所を構成するための DSL が用意されています。

room {
    schemaDirectory("$projectDir/schemas/")
}

プラグインは、Room コンパイラとさまざまなコンパイル タスクとそのバックエンド(javac、KAPT、KSP)を構成して、フレーバー フォルダ(schemas/flavorOneDebug/com.package.MyDatabase/1.json など)にスキーマ ファイルを出力します。通常どおり、これらのファイルは検証と自動移行に使用するためにリポジトリにチェックインされます。アノテーション プロセッサ オプションの代わりにプラグインを使用するように移行する場合は、既存のスキーマ ファイルを、プラグインによって作成された生成されたフレーバー ディレクトリにコピーする必要があります。これは、手動で行う必要がある 1 回限りの移行オペレーションです。developers.android.com のスキーマのドキュメントは、フィードバックに対応し、プラグインが安定した時点で更新される予定です。ぜひお試しください。

API の変更

  • RoomDatabase.QueryCallback は、SAM コンバージョンの使用を可能にするために関数インターフェースとして定義されています。(Iab8eab/281008549

バグの修正

  • Room ソースを Java から Kotlin に移行した後に Robolectric でデータベースをインスタンス化すると発生する問題を解決。(Ic053cb/274924903

バージョン 2.6.0-alpha01

2023 年 3 月 22 日

androidx.room:room-*:2.6.0-alpha01 がリリースされました。バージョン 2.6.0-alpha01 に含まれる commit については、こちらをご覧ください

新機能

  • KSP 用の Room で値クラスをサポート。Room で、エンティティ内の値クラスをサポートできるようになりました。(4194095
  • Room で Kotlin コード生成(または「Kotlin CodeGen」)を有効にできるようになりました(4297ec0)。Room で Kotlin CodeGen を有効にするには、KSP のプロセッサ オプションに room.generateKotlin オプション名を追加します。KSP のプロセッサ オプションを渡す方法の詳細については、KSP のドキュメントをご覧ください。

注: Kotlin CodeGen を使用する場合は、追加の制限が適用されていることに注意してください。Kotlin CodeGen で抽象プロパティを DAO ゲッターまたは DAO クエリとして使用することはできません。代わりに、プロパティ値が不変で、固定された結果が格納されているという誤解を避けるために、関数として書き換える必要があります。また、Room for Kotlin CodeGen で Nullable コレクションの戻り値の型が許可されなくなりました。

警告: Kotlin CodeGen を使用すると、プロジェクトの null 可能性に関する制限が厳しくなる場合があります。Kotlin CodeGen では型引数の null 可能性は重要ですが、Java ではほとんど無視されます。たとえば、戻り値の型が Flow<foo\> で、テーブルが空であるとします。Java CodeGen では問題は発生しませんが、Kotlin CodeGen ではエラーが発生します。これを回避するには、null が生成されることを前提として、Flow<foo?\> を使用する必要があります。</foo?\></foo\>

API の変更

  • DAO メソッドの戻り値型で null 許容コレクションが無意味に使用されないようにします。(I777dcb/253271782b/259426907
  • 無効化トラッカーの変更を出力する Flow を作成する API を追加しました。この API は、データベースの変更に対応する必要があるストリームを作成する場合に便利です。(I8c790b/252899305

バグの修正

  • Kotlin コード生成で抽象プロパティを DAO ゲッターまたは DAO クエリとして使用できなくなります。代わりに、プロパティ値が不変で、格納された結果が固定されているという誤解を避けるために、関数として書き換える必要があります。(If6a13b/127483380b/257967987

バージョン 2.5.2

バージョン 2.5.2

2023 年 6 月 21 日

androidx.room:room-*:2.5.2 がリリースされました。バージョン 2.5.2 に含まれる commit については、こちらをご覧ください

バグの修正

  • kotlinx-metadata-jvm との非互換性の問題を修正しました。(386d5c
  • Robolectric テストで Room を使用するとエラーがスローされる問題を修正しました。(f79beab/274924903

バージョン 2.5.1

バージョン 2.5.1

2023 年 3 月 22 日

androidx.room:room-*:2.5.1 がリリースされました。バージョン 2.5.1 に含まれる commit については、こちらをご覧ください

バグの修正

  • データベースがすでに開いている場合は、FrameworkSQLiteHelper でデータベースの親ディレクトリを確認しない。(5de86b8
  • データベースがすでに開いているかどうかを確認する場合は、isOpenInternal チェックを使用します。(e91fb35
  • Room の acquireTransactionThread() でリエントラント ケースの処理が改善されました。(219f98b)。一時停止中のトランザクション中、Room はトランザクション エグゼキュータのスレッドを使用して、そのスレッドでイベントループを開始し、一時停止中のデータベース オペレーションをそのスレッドにディスパッチします。これにより、すべてのオペレーションがトランザクション コルーチン内にカプセル化されます。通常、トランザクション スレッドはトランザクションを開始したスレッドとは異なることが想定されますが、同じ場合もあります。このような再入可能ケースを処理するため、withTransaction() はリファクタリングされ、制御ジョブに依存しないようになり、代わりにトランザクション スレッドの runBlocking 内から停止中のトランザクション ブロックを実行します。

バージョン 2.5.0

バージョン 2.5.0

2023 年 2 月 22 日

androidx.room:room-paging-guava:2.5.0androidx.room:room-paging-rxjava2:2.5.0androidx.room:room-paging-rxjava3:2.5.0 がリリースされました。バージョン 2.5.0 に含まれる commit については、こちらをご覧ください

バージョン 2.5.0

2023 年 1 月 11 日

androidx.room:room-*:2.5.0 がリリースされました。バージョン 2.5.0 に含まれる commit については、こちらをご覧ください

2.4.0 以降の重要な変更

  • room-runtime ソースはすべて Java から Kotlin に変換されました。Kotlin へのライブラリ変換のためにコードが Kotlin の場合にソースの互換性がなくなる問題が発生する可能性があります。たとえば、既知のソース互換性のない変更として、InvalidationTracker ではタイプが MutableSet ではなく Set のパラメータを設定するため ObserveronInvalidate() を宣言することが必要になりました。さらに、特定の getter メソッドが、Kotlin ファイルでプロパティ アクセス構文を必要とするプロパティに変換されました。重大な非互換性エラーが生じた場合は、バグを報告してください。
  • 新しいショートカット アノテーション @Upsert を追加しました。このアノテーションは、一意性の競合がない場合にエンティティを挿入し、競合がある場合はエンティティの更新を試みます。(I7aaabb/241964353
  • Room ページングでのサポートのために新しい room-paging アーティファクト room-paging-rxjava2room-paging-rxjava3room-paging-guava を追加しました。
  • @MapInfo で曖昧さ回避のために Key-Value テーブル名を指定するための API を追加しました。(Icc4b5

バージョン 2.5.0-rc01

2022 年 12 月 7 日

androidx.room:room-*:2.5.0-rc01 がリリースされました。バージョン 2.5.0-rc01 に含まれる commit については、こちらをご覧ください

  • このリリースは 2.5.0-beta02 と同一です。

バージョン 2.5.0-beta02

2022 年 11 月 9 日

androidx.room:room-*:2.5.0-beta02 がリリースされました。バージョン 2.5.0-beta02 に含まれる commit については、こちらをご覧ください

API の変更

  • Java の配列の動作と一致するように、不変(Array<Any?>)から反変(Array<out Any?>)まで、クエリ引数を受け取るさまざまな API を修正しました。(b/253531073

バージョン 2.5.0-beta01

2022 年 10 月 5 日

androidx.room:room-*:2.5.0-beta01 がリリースされました。バージョン 2.5.0-beta01 に含まれる commit については、こちらをご覧ください

API の変更

  • @Upsert をサポートする最小バージョンを API 16 に制限します。古い API では、主キーの制約の競合を識別できないためです。(I5f67fb/243039555

バグの修正

  • シャドウ テーブルがスキーマ .json ファイルに誤ってエクスポートされた場合に破損する問題を修正しました。(I4f83bb/246751839

バージョン 2.5.0-alpha03

2022 年 8 月 24 日

androidx.room:room-*:2.5.0-alpha03 がリリースされました。バージョン 2.5.0-alpha03 に含まれる commit については、こちらをご覧ください

新機能

  • 新しいショートカット アノテーション @Upsert を追加しました。このアノテーションは、一意性の競合がない場合にエンティティを挿入し、競合がある場合はエンティティの更新を試みます。(I7aaabb/241964353

バグの修正

  • 自動移行の外部キー制約の確認の際に、Room が IllegalStateException ではなく SQLiteConstraintException をスローするようになりました。(I328dd
  • getOpenHelpergetQueryExecutorgetTransactionExecutor のゲッター / プロパティに関する Kotlin ソースの互換性のない変更を修正しました。(Iad0ac

バージョン 2.5.0-alpha02

2022 年 6 月 1 日

androidx.room:room-*:2.5.0-alpha02 がリリースされました。バージョン 2.5.0-alpha02 に含まれる commit については、こちらをご覧ください

新機能

  • Room ページングでの新しい room-paging アーティファクト room-paging-rxjava2room-paging-rxjava3room-paging-guava のサポートを追加しました。(41a1d4b/203666906)、(eb6098b/203666906)、(1b9ae4b/203666906

API の変更

  • room-runtime はすべて Java から Kotlin に変換されました。(If2069b/206859668)、(Ie4b55b/206859668)、(I697eeb/206859668)、(I96c25b/206859668

    注: Kotlin へのライブラリ変換のため、ソースの互換性がなくなる問題が発生するおそれがあります。コードを Kotlin で記述していて、Room の古いバージョンを呼び出す場合は、新しいバージョンでこれらのケースを処理する必要があります。たとえば、既知のソース互換性のない変更として、InvalidationTracker ではタイプが MutableSet ではなく Set のパラメータを設定するため ObserveronInvalidate() を宣言することが必要になりました。

  • @MapInfo で曖昧さ回避のために Key-Value テーブル名を指定するための API を追加しました。(Icc4b5
  • プロパティ ゲッターで @Ignore を再度許可するようにソースの互換性の問題を修正しました。(Ifc2fb

バグの修正

  • 重複する列の解決ヒューリスティック アルゴリズム。Room はマルチマップ クエリで曖昧な列の解決を試みるようになりました。これにより、結果データ オブジェクトに正しくマッピングされるよう同じ名前の列を含むテーブルとの JOIN が可能になりました。(I4b444b/201306012b/212279118

バージョン 2.5.0-alpha01

2022 年 2 月 23 日

androidx.room:room-*:2.5.0-alpha01 がリリースされました。バージョン 2.5.0-alpha01 に含まれる commit については、こちらをご覧ください

API の変更

  • Kotlin ソースで Room @IntDef の使用が適用されない問題を修正しました。(I75f41b/217951311
  • プロパティ ゲッターで @Query を再度許可するようにソースの互換性の問題を修正しました。(I0a09b
  • room-common を Java から Kotlin に変換しました。(I69c48b/206858235

    注: Kotlin へのライブラリ変換中に、一部のプロパティがコンパニオン オブジェクトに移動されたため、ソースの互換性がなくなる問題が発生するおそれがあります。コードを Kotlin で記述していて、Room の古いバージョンを呼び出す場合、新しいバージョンではこれらのプロパティにアクセスする際に「.Companion」サフィックスが必要になります。

  • room-migration を Java から Kotlin に変換しました。(I2724bb/206858622
  • room-runtime 内の paging 関連ファイルを Java から Kotlin に変換しました。(I82fc8b/206859668
  • FrameworkSQLite* レベルでのマルチプロセス ロックと使用のための API を追加し、マルチプロセスの最初のデータベース作成と移行を保護するようにしました。(Ied267b/193182592

バグの修正

  • Kotlin ソースの内部プロパティのサポートを追加しました。これは Room の軽微な動作変更で、ゲッター / セッターとしてプロパティと一致させるときに関数のソース名を使用するようになります(以前は、内部の関数 / プロパティによって異なる関数の JVM 名を使用していました)。カスタムの @JvmName アノテーションを使用してゲッター / セッターをプライベート プロパティと一致させている場合は、更新後に生成されたコードを再確認してください(If6531b/205289020

バージョン 2.4.3

バージョン 2.4.3

2022 年 7 月 27 日

androidx.room:room-*:2.4.3 がリリースされました。バージョン 2.4.3 に含まれる commit については、こちらをご覧ください

バグの修正

  • Kotlin 1.7 で Room が suspend 関数を認識しない問題を修正しました(b/236612358

バージョン 2.4.2

バージョン 2.4.2

2022 年 2 月 23 日

androidx.room:room-*:2.4.2 がリリースされました。バージョン 2.4.2 に含まれる commit については、こちらをご覧ください

バグの修正

  • -Xjvm-default=all またはそれと同等のものを使用したコンパイルによってデフォルト インターフェース メソッドを生成する本文を含む Dao @Transaction suspend 関数のコードを生成する際の問題を修正しました。(Ia4ce5
  • Room が戻り値の型 Array<ByteArray> のクエリメソッドのコードを生成するバグを修正しました。(If086eb/213789489

バージョン 2.4.1

バージョン 2.4.1

2022 年 1 月 12 日

androidx.room:room-*:2.4.1 がリリースされました。バージョン 2.4.1 に含まれる commit については、こちらをご覧ください

バグの修正

  • Kotlin ソースの内部プロパティのサポートを追加しました。これは Room の軽微な動作変更で、ゲッター / セッターとしてプロパティと一致させるときに関数のソース名を使用するようになります(以前は、内部の関数 / プロパティによって異なる関数の JVM 名を使用していました)。カスタムの @JvmName アノテーションを使用してゲッター / セッターをプライベート プロパティと一致させている場合は、更新後に生成されたコードを再確認してください(If6531b/205289020

バージョン 2.4.0

バージョン 2.4.0

2021 年 12 月 15 日

androidx.room:room-*:2.4.0 がリリースされました。バージョン 2.4.0 に含まれる commit については、こちらをご覧ください

2.3.0 以降の重要な変更

  • 自動移行: スキーマがエクスポートされている間、自動的に移行を生成するための API を Room が提供するようになりました。自動移行の生成が必要であることを Room に通知するには、新しいプロパティ @Database#autoMigrations を使用して、自動移行の移行元と移行先のバージョンを宣言できます。テーブルや列の名前の変更や削除に関する追加情報が Room に必要な場合、@AutoMigration アノテーションでそのような入力を含む仕様クラスを宣言できます。詳しくは、@AutoMigration のドキュメントをご覧ください。
  • 自動移行での依存関係の注入: @ProvidedAutoMigrationSpec は、AutoMigrationSpec が実行時に RoomDatabase.Builder#addAutoMigrationSpec() を介して提供されることを宣言するための新しい API です。これにより、依存関係の注入フレームワークで複雑な依存関係が必要な場合に、そのような仕様を提供できます。
  • 自動移行の移行テストヘルパーのサポート: テスト対象のデータベース クラスを受け取る新しいコンストラクタ API を提供することで自動移行をサポートするように、Room の MigrationTestHelper が更新されました。これにより、ヘルパーは runMigrationsAndValidate 中に同じ方法で自動移行を自動的に追加できます。
  • Room ページングのサポート: androidx.room:room-paging がリリースされました。これにより、androidx.paging.PagingSource を返す Room クエリで Paging 3.0 がネイティブにサポートされます。
  • リレーショナル クエリ メソッド: Room で、JOIN ステートメントに役立つ、マルチマップを戻り値の型とする @Dao メソッドがサポートされるようになりました。サポートされているマルチマップの型は、MapSparseArrayLongSparseArray と、Guava の ImmutableMapImmutableSetMultimapImmutableListMultimap です。

バージョン 2.4.0-rc01

2021 年 12 月 1 日

androidx.room:room-*:2.4.0-rc01 がリリースされました。バージョン 2.4.0-rc01 に含まれる commit については、こちらをご覧ください

新機能

  • Kotlin 1.6 をサポートするよう、KSP に対する Room の依存関係を 1.6.0-1.0.1 に更新しました。

バージョン 2.4.0-beta02

2021 年 11 月 17 日

androidx.room:room-*:2.4.0-beta02 がリリースされました。バージョン 2.4.0-beta02 に含まれる commit については、こちらをご覧ください

新機能

  • @MapInfo に SparseArray と LongSparseArray のサポートを追加しました。(Ic91a2b/138910317

バグの修正

  • 型の null 可能性情報を考慮する新しい TypeConverter アナライザを追加しました。この情報は KSP でしか利用できないため、KSP でのみデフォルトでオンになっています。問題が発生する場合は、room.useNullAwareTypeAnalysis=false をアノテーション プロセッサに渡すことでオフにできます。その場合、このフラグは今後に削除される予定であるためバグを報告してください。この新しい TypeConverter アナライザには null チェックでラップする機能があるため、null を受け取らない TypeConverter のみを提供することをおすすめします。なお、アノテーション プロセッサとして KAPT または Java を使用しているユーザーは(KSP とは異なり)型に null 可能性情報がないため影響がありません。(Ia88f9b/193437407
  • FTS エンティティが ICU トークナイザーの使用を宣言した場合に、Room がコンパイルに失敗し、SQL エラーが発生するバグを修正しました。(I00db9b/201753224
  • バージョン間で埋め込まれたエンティティに新しい列が追加されるという自動移行の問題を解決しました。(I5fcb1b/193798291
  • LEFT JOIN クエリでのリレーショナル クエリ メソッドの戻り値の型に関する問題を解決しました。今回の変更により、1 対多のマッピングが存在する場合、無効な値オブジェクトは、カーソル内にない場合にキーに対して返されるコレクションに含まれなくなります。有効な値がない場合、キーは空のコレクションにマッピングされます。(Id5552b/201946438
  • SQLite キーワードを列名でエスケープできない自動移行の問題を解決しました。(Idbed4b/197133152

バージョン 2.4.0-beta01

2021 年 10 月 13 日

androidx.room:room-*:2.4.0-beta01 がリリースされました。バージョン 2.4.0-beta01 に含まれる commit については、こちらをご覧ください

バグの修正

  • 同じ自動移行内の別のテーブルにも同じ名前の新しい列がある場合、自動移行で新しい列が追加されない問題を修正しました。(Ia5db5b/200818663
  • room-paging によって生成された PagingSource 実装が、以前の Dispatchers.IO ではなく、RoomDatabase.Builder を介して渡された queryExecutor を使用するようになったため、オーバーライドできるようになりました。(Iae259

バージョン 2.4.0-alpha05

2021 年 9 月 29 日

androidx.room:room-*:2.4.0-alpha05 がリリースされました。バージョン 2.4.0-alpha05 に含まれる commit については、こちらをご覧ください

新機能

API の変更

  • デベロッパーが組み込みの Enum および UUID コンバータを無効にできるように、TypeConverter アノテーションに新しいプロパティを追加しました。これらのコンバータはデフォルトでオンになっていますが、特定のスコープまたはデータベース全体で無効にできます。詳しくは、TypeConverter のドキュメントをご覧ください。(36ae9eb/195413406

  • @MapInfo アノテーションにより、DAO のマルチマップ戻り値型について POJO 以外のキー / 値をサポートします。(I4d704

マップのキーまたは値の列が単一の列に由来する場合は、@MapInfo が必要になります。次の例をご覧ください。

@MapInfo(valueColumn = "songCount")
@Query("""
       SELECT *, COUNT(mSongId) as songCount
       FROM Artist JOIN Song ON Artist.artistName = Song.artist
       GROUP BY artistName
       """)
fun getArtistAndSongCounts(): Map<Artist, Integer>
  • Room で Paging3 を使用する場合は、room-paging が必須アーティファクトになります。(Ieaffe

バグの修正

  • マップのキーからの列の ORDER BY 句がクエリに含まれている場合に、マルチマップ クエリの結果が正しく並べ替えられなかった問題を修正しました。(I6b887

外部からの協力

  • @Index でインデックス順序を指定する新しい API を追加しました。Nikita Zhelonkin 氏に感謝いたします。(I033fc

バージョン 2.4.0-alpha04

2021 年 7 月 21 日

androidx.room:room-*:2.4.0-alpha04 がリリースされました。バージョン 2.4.0-alpha04 に含まれる commit については、こちらをご覧ください

新機能

  • Room で、JOIN ステートメントに役立つ、マルチマップを戻り値の型とする @Dao メソッドがサポートされるようになりました。サポートされているマルチマップの型は、Map と、Guava の ImmutableMapImmutableSetMultimapImmutableListMultimap です。

    以下に、マルチマップ クエリの例を示します。

    1 対 1 関係のマップ

    @Query("SELECT * FROM Song JOIN Artist ON Song.artistId = Artist.artistId")
    fun getSongAndArtist(): Map<Song, Artist>
    

    1 対多関係のマップ(標準のマルチマップ)

    @Query("SELECT * FROM Artist JOIN Album ON Artist.id = Album.artistId")
    fun getArtistAndAlbums(): Map<Artist, List<Album>>
    

    マルチマップの結果は、サポートされている非同期の戻り値の型(LiveData、Rx の Observable、コルーチン Flow など)でラップすることもできます。

Room ページング

  • androidx.room:room-paging がリリースされました。これにより、androidx.paging.PagingSource を返す Room クエリで Paging 3.0 がネイティブにサポートされます。

    @Dao
    interface UserDao {
      @Query("SELECT * FROM users ORDER BY id ASC")
      fun loadUsers(): PagingSource<Int, User>
    }
    
  • このアーティファクトは、Room によって生成された androidx.paging.PagingSource の実装を、Paging 3.0 API 上に構築された実装に置き換えます。新しい PagingSource の実装ではキーの解析方法が異なっているため、Room の PagingSource に手動で指定するキーは、Pager のコンストラクタで渡される initialKey を含め、この動作変更に対応する必要があります。ページの読み込みは Key から開始されます(Key は最初に読み込まれるアイテムとなります)。これは、LoadParams.Refresh.Key がユーザーのスクロール位置として扱われ、キーの前後でアイテムがロードされる既存の動作とは異なります。

  • このアーティファクトはオプションです。オプトアウトすると、Room 2.3 で導入された Paging 3.0 の既存のサポートにフォールバックします。ただし、今後のリリースで Paging 3.0 で Room を使用している場合は、このアーティファクトはオプションではなくなります。オプトインするには、新しい room-paging アーティファクトをクラスパスに追加してください。Gradle を使用している場合は、次のスニペットを build.gradle に追加します。

    dependency {
      implementation("androidx.room:room-paging:2.4.0-alpha04")
    }
    

バグの修正

  • 外部キー違反の処理に関する自動移行で問題を修正しました。(b/190113935

バージョン 2.4.0-alpha03

2021 年 6 月 16 日

androidx.room:room-*:2.4.0-alpha03 がリリースされました。バージョン 2.4.0-alpha03 に含まれる commit については、こちらをご覧ください

API の変更

  • Room の MigrationTestHelper を更新し、テスト対象のデータベース クラスを受け取る新しいコンストラクタ API を提供することにより、自動移行をサポートするようにしました。これにより、ヘルパーは runMigrationsAndValidate 中に同じ方法で自動移行を自動的に追加できます。

バグの修正

  • Room の SQLite ネイティブ ライブラリに関する問題を修正し、Apple の M1 チップをサポートするようにしました。(b/174695268

  • @Transaction 関数の戻り値の型が Flow だったときに Room がエラーを表示しない問題を修正しました(I56dddb/190075899

  • インデックスに関連する自動移行の問題を修正しました。(b/177673291

依存関係の更新

  • Room の KSP サポートが KSP 1.5.10-1.0.0-beta01 に依存するようになりました。(1ecb11b/160322705

バージョン 2.4.0-alpha02

2021 年 5 月 5 日

androidx.room:room-*:2.4.0-alpha02 がリリースされました。バージョン 2.4.0-alpha02 に含まれる commit については、こちらをご覧ください

API の変更

  • @ProvidedAutoMigrationSpec は、AutoMigrationSpec が実行時に RoomDatabase.Builder#addAutoMigrationSpec() を介して提供されることを宣言するための新しい API です。これにより、依存関係の注入フレームワークで複雑な依存関係が必要な場合に、そのような仕様を提供できます。

バグの修正

  • @DatabaseView が正しく再作成されない自動移行の問題を修正しました。

外部からの協力

  • Room の JournalMode.TRUNCATE で、たまに InvalidationTracker コールバックの呼び出しが無効になったり、遅すぎたり、またはまったく発生しなかったりする問題を修正しました。Uli Bubenheimer | bubenheimer@users.noreply.github.com に感謝いたします(b/154040286

バージョン 2.4.0-alpha01

2021 年 4 月 21 日

androidx.room:room-*:2.4.0-alpha01 がリリースされました。バージョン 2.4.0-alpha01 に含まれる commit については、こちらをご覧ください

新機能

  • 自動移行: スキーマがエクスポートされている間、自動的に移行を生成するための API を Room が提供するようになりました。自動移行の生成が必要であることを Room に通知するには、新しいプロパティ @Database#autoMigrations を使用して、自動移行の移行元と移行先のバージョンを宣言できます。テーブルや列の名前の変更や削除に関する追加情報が Room に必要な場合、@AutoMigration アノテーションでそのような入力を含む仕様クラスを宣言できます。詳しくは、@AutoMigration のドキュメントをご覧ください。

バグの修正

  • defaultValue に余分なかっこが含まれる場合、Room のスキーマ検証によって正しく検証されない問題を修正しました。(b/182284899

バージョン 2.3.0

バージョン 2.3.0

2021 年 4 月 21 日

androidx.room:room-*:2.3.0 がリリースされました。バージョン 2.3.0 に含まれる commit については、こちらをご覧ください

2.2.0 以降の重要な変更

  • 組み込みの列挙型のサポート: 型コンバータが提供されなかった場合、Room はデフォルトで列挙型から文字列型へ(およびその逆)の型コンバータを使用するようになりました。列挙型用の型コンバータがすでに存在する場合、Room はデフォルトの型コンバータよりそちらを優先的に使用します。
  • クエリ コールバック: Room は、クエリを実行する直前に利用できる一般的なコールバック API RoomDatabase.QueryCallback を提供するようになりました。これは、デバッグビルドのロギングに役立ちます。このコールバックは RoomDatabase.Builder#setQueryCallback() を介して設定できます。
  • あらかじめパッケージ化されたデータベースへの対応: Room に、入力ストリームから読み込まれた、あらかじめパッケージ化されたデータベースを使用してデータベースを作成するための API が追加されました。これにより、あらかじめパッケージ化されたデータベースが gzip で圧縮されている場合などに対応できます。
  • 型コンバータの提供: Room に、アプリが初期化を制御できるように、型コンバータのインスタンスを提供するための API が追加されました。Room に提供される型コンバータにマークを付けるには、新しいアノテーション @ProvidedTypeConverter を使用します。
  • RxJava3 のサポート: Room で RxJava3 の型がサポートされるようになりました。RxJava2 と同様に、戻り値の型が Flowable、Single、Maybe、Completable の DAO メソッドを宣言できます。また、RxJava3 をサポートする新しいアーティファクト androidx.room:room-rxjava3 を使用できます。
  • Paging 3.0 のサポート: 戻り値の型が androidx.paging.PagingSource である、@Query アノテーション付きメソッドの実装の生成が Room でサポートされます。

バージョン 2.3.0-rc01

2021 年 3 月 24 日

androidx.room:room-*:2.3.0-rc01 がリリースされました。バージョン 2.3.0-rc01 に含まれる commit については、こちらをご覧ください

バグの修正

  • Room が作成したコルーチンの Flow クエリが停止されている withTransaction ブロックで消費されない問題を修正しました(I797bf)。

バージョン 2.3.0-beta03

2021 年 3 月 10 日

androidx.room:room-*:2.3.0-beta03 がリリースされました。バージョン 2.3.0-beta03 に含まれる commit については、こちらをご覧ください

新機能

  • KSP の増分コンパイルのサポートを追加しました。(I031c1b/176453350

バグの修正

  • メインスレッドで PagingSource を作成すると ANR が発生するバグを修正しました。(I42b74b/181221318
  • @ExperimentalRoomApi の公開設定がパッケージ プライベートではなく一般公開になる問題を修正しました。(b/181356119

外部からの協力

  • Room では、@SkipQueryVerification アノテーションが付いているときに、@Query アノテーション付きの DAO メソッドで POJO 戻り値の型が受け入れられるようになりました。Room は、@RawQuery アノテーション付きの DAO メソッドの場合と同じように、ベスト エフォートを行ってクエリの結果を POJO 戻り値の型に変換します。「Markus Riegel | hey@marcorei.com」に感謝いたします。(I45acb

バージョン 2.3.0-beta02

2021 年 2 月 18 日

androidx.room:room-*:2.3.0-beta02 がリリースされました。バージョン 2.3.0-beta02 に含まれる commit については、こちらをご覧ください

新機能

  • Room に Kotlin Symbol Processing KSP の試験運用版でのサポートが追加されました。

    KSP は Kotlin コンパイラでネイティブにアノテーション プロセッサを実行する KAPT に置き換わるもので、ビルド時間を大幅に短縮します。

    KSP で Room を使用するには、KSP Gradle プラグインを適用し、ビルドファイル内の kapt 構成を ksp に置き換えます。たとえば、kapt 'androidx.room:room-compiler:2.3.0-beta02' の代わりに ksp 'androidx.room:room-compiler:2.3.0-beta02' を使用します。詳しくは、KSP のドキュメントをご覧ください。

    なお、KSP は試験運用中のため、実稼働コードには KAPT を引き続き使用することをおすすめします。ビルド時間の短縮は、KAPT を使用するプロセッサが他にない場合にのみ適用されます。既知の問題については b/160322705 をご覧ください。

バージョン 2.3.0-beta01

2021 年 1 月 27 日

androidx.room:room-*:2.3.0-beta01 がリリースされました。バージョン 2.3.0-beta01 に含まれる commit については、こちらをご覧ください

新機能

  • 自動クローズ可能なデータベース: 一定の期間アクセスされなかったデータベースをクローズする機能が Room に導入されました。これは試験運用版の機能であり、有効にするには RoomDatabase.Builder#setAutoCloseTimeout() を呼び出します。この機能は、複数のデータベースを使用するアプリで役立ちます。

バグの修正

  • 異なる競合戦略が定義された複数の @Update または @Delete メソッドを使用する Dao メソッドが、そのうちの 1 つの戦略のみを使用してコードを生成し、定義された戦略を結果的に無視する問題を修正しました。(/I0b90db/176138543

バージョン 2.3.0-alpha04

2020 年 12 月 16 日

androidx.room:room-*:2.3.0-alpha04 がリリースされました。バージョン 2.3.0-alpha04 に含まれる commit については、こちらをご覧ください

新機能

  • Room は、クエリを実行する直前に利用できる一般的なコールバック API RoomDatabase.QueryCallback を提供するようになりました。これは、デバッグビルドのロギングに役立ちます。このコールバックは RoomDatabase.Builder#setQueryCallback() を介して設定できます。(Iaa513b/174478034b/74877608
  • 型コンバータが提供されなかった場合、Room はデフォルトで列挙型から文字列型へ(およびその逆)の型コンバータを使用するようになりました。列挙型用の型コンバータがすでに存在する場合、Room はデフォルトの型コンバータよりそちらを優先的に使用します。(b/73132006

既知の問題

  • 列挙型に対する読み取り用として一方向の型コンバータがすでに存在する場合、Room は組み込みの文字列型から列挙型への型コンバータを(使用すべきでなくても)誤って使用することがあります。これは既知の問題であり、型コンバータを双方向にすることで解決できます。b/175707691 を参照してください。

バグの修正

  • JDK の新しいバージョンで Room が増分アノテーション処理を誤って無効にする問題を修正しました。(b/171387388
  • 複数のクラスローダが使用されているときに Room が生成されたクラスを検出する問題を修正しました。修正にご協力いただいた「Serendipity | 892449346@qq.com」に感謝いたします。(b/170141113
  • Kotlin @Dao に汎用型が JVM のプリミティブである基本クラスが存在する場合に、Room が誤ったコードを生成する問題を修正しました。(b/160258066

外部からの協力

  • WAL モードが有効で API が 16 以上の場合、Room はデフォルトで beginTransactionNonExclusive を使用するようになりました。「Ahmed I. Khalil | ahmedibrahimkhali@gmail.com」に感謝いたします。(b/126258791

バージョン 2.3.0-alpha03

2020 年 10 月 14 日

androidx.room:room-*:2.3.0-alpha03 がリリースされました。バージョン 2.3.0-alpha03 に含まれる commit については、こちらをご覧ください

新機能

  • Room に、アプリが初期化を制御できるように、型コンバータのインスタンスを提供するための API が追加されました。Room に提供される型コンバータにマークを付けるには、新しいアノテーション @ProvidedTypeConverter を使用します。「mzgreen yairobbe@gmail.com」に感謝いたします。(Ie4fa5b/121067210

  • Room に、入力ストリームから読み込まれた、あらかじめパッケージ化されたデータベースを使用してデータベースを作成するための API が追加されました。これにより、あらかじめパッケージ化されたデータベースが gzip で圧縮されている場合などに対応できます。「Ahmed El-Helw ahmedre@gmail.com」に感謝いたします。(3e6792b/146911060

API の変更

  • 欠落しているターゲットを @ForeignKey アノテーションに追加しました。これにより、@Entity アノテーションの外部での使用を防ぐことができます。(Iced1e

  • RoomDatabase.java のフィールド mCallbacks を非表示にしました。(d576cbb/76109329

バグの修正

  • TypeConverter に関するドキュメントを更新し、TypeConverter を使用できるのは、列 / フィールドを変換する場合のみであり、行の変換には使用できないことを明確にしました。(I07c56b/77307836

  • DaoProcessor を更新し、Kotlin の「プリミティブ」を持つ汎用的なスーパー型を使用して Dao のコンパイラ エラーを修正しました。(Ice6bbb/160258066

  • add / remove オブザーバー メソッドに関するドキュメントを更新し、スレッド化について明確にしました。(Ifd1d9b/153948821

  • rowid 列を宣言した FTS テーブルを Room が誤って検証する問題を修正しました。(d62ebcb/145858914

外部からの協力

  • トルコ語に関連する大文字 / 小文字のロケールの問題を修正(5746e3)、b/68159494

  • Android Lollipop の問題を回避するため、RoomDatabase 内の ConcurrentHashMapCollections.synchronizedMap() に変更しました。(d1cfc7b/162431855

  • あらかじめパッケージ化された DB をコピーする場合のために、onOpenPrepackagedDatabase コールバックを追加しました。(I1ba74b/148934423

バージョン 2.3.0-alpha02

2020 年 7 月 22 日

androidx.room:room-*:2.3.0-alpha02 がリリースされました。バージョン 2.3.0-alpha02 に含まれる commit については、こちらをご覧ください

新機能

  • RxJava3 のサポート: Room で RxJava3 の型がサポートされるようになりました。RxJava2 と同様に、戻り値の型が Flowable、Single、Maybe、Completable の DAO メソッドを宣言できます。また、RxJava3 をサポートする新しいアーティファクト androidx.room:room-rxjava3 を使用できます。(b/152427884

API の変更

  • Kotlin の Object クラスで @TypeConverter の宣言がサポートされるようになりました。(b/151110764
  • Room の増分アノテーション処理オプションがデフォルトでオンになりました。(b/112110217

バージョン 2.3.0-alpha01

2020 年 6 月 10 日

androidx.room:room-*:2.3.0-alpha01 がリリースされました。バージョン 2.3.0-alpha01 に含まれる commit については、こちらをご覧ください

新機能

  • Paging 3.0 のサポート: 戻り値の型が androidx.paging.PagingSource である、@Query アノテーション付きメソッドの実装の生成が Room でサポートされます。

    @Dao
    interface UserDao {
      @Query("SELECT * FROM users ORDER BY id ASC")
      fun pagingSource(): PagingSource<Int, User>
    }
    

API の変更

  • @RewriteQueriesToDropUnusedColumns は、結果内の未使用の列が削除されるように Room がクエリの「*」投影を書き換える、便利な新しいアノテーションです。
  • プロセッサ オプション room.expandProjection のサポートが終了しました。スター投影を使用する Room 最適化クエリの代わりとして、@RewriteQueriesToDropUnusedColumns を使用してください。なお @RewriteQueriesToDropUnusedColumns は、@Embedded フィールドを含む戻り値の型に関して提供される列競合ソリューション room.expandProjection を置き換えるものではありません。

バグの修正

  • 増分アノテーション プロセッサを有効にするために使用される JDK バージョンを Room が正しく検出しないバグを修正しました。「Blaz Solar(me@blaz.solar)」に感謝いたします。(b/155215201
  • ANTLR も使用する他のプロセッサとのバージョン競合を避けるために、Room はアノテーション プロセッサで ANTLR 依存関係を埋め込むようになりました。(b/150106190

バージョン 2.2.6

バージョン 2.2.6

2020 年 12 月 16 日

androidx.room:room-*:2.2.6 がリリースされました。バージョン 2.2.6 に含まれる commit については、こちらをご覧ください

バグの修正

  • JDK の新しいバージョンで Room が増分アノテーション処理を誤って無効にする問題を修正しました。(b/171387388

バージョン 2.2.5

バージョン 2.2.5

2020 年 3 月 18 日

androidx.room:room-*:2.2.5 がリリースされました。バージョン 2.2.5 に含まれる commit については、こちらをご覧ください

バグの修正

  • MultiInstanceInvalidationService を directBootAware にします。「Mygod contact-git@mygod.be」 に感謝いたします。(b/148240967
  • 複数インスタンスの無効化が有効で、データベースに FTS エンティティが含まれている場合にクラッシュするバグを修正しました。(b/148969394
  • Room アノテーション プロセッサで SQLite ネイティブ ライブラリを読み込むときに、並列コンパイルが原因でコンパイラがクラッシュする問題を修正しました。(b/146217083

バージョン 2.2.4

バージョン 2.2.4

2020 年 2 月 19 日

androidx.room:room-common:2.2.4androidx.room:room-compiler:2.2.4androidx.room:room-guava:2.2.4androidx.room:room-ktx:2.2.4androidx.room:room-migration:2.2.4androidx.room:room-runtime:2.2.4androidx.room:room-rxjava2:2.2.4androidx.room:room-testing:2.2.4 がリリースされました。バージョン 2.2.4 に含まれる commit については、こちらをご覧ください

バグの修正

  • トランザクションが実際に開始される前にコルーチンがすぐにキャンセルされた場合にデッドロックになる、トランザクションの停止に関する問題を修正しました。(b/148181325
  • JDK 9 でのビルド時に @Generated が誤って使用される問題を修正しました。(b/146538330
  • Kotlin の DAO インターフェースに具象関数がある場合に Room が誤ったコードを生成する問題を修正しました。(b/146825845

バージョン 2.2.3

バージョン 2.2.3

2019 年 12 月 18 日

androidx.room:room-*:2.2.3 がリリースされました。バージョン 2.2.3 に含まれる commit については、こちらをご覧ください

バグの修正

  • 移行を行っておらず、スキーマにインデックスを持つレガシー ハッシュを含むデータベースを、Room が検証できないバグを修正しました。(b/139306173

バージョン 2.2.2

バージョン 2.2.2

2019 年 11 月 20 日

androidx.room:room-*:2.2.2 がリリースされました。バージョン 2.2.2 に含まれる commit については、こちらをご覧ください

バグの修正

  • 999 行を超える 1 対 1 の関係を収集すると Room が null に関連するアイテムを返すというバグを修正しました(b/143105450

バージョン 2.2.1

バージョン 2.2.1

2019 年 10 月 23 日

androidx.room:room-*:2.2.1 がリリースされました。バージョン 2.2.1 に含まれる commit については、こちらをご覧ください

バグの修正

  • コンパイラ オプション expandProjection がオンのときの CURSOR_MISMATCH に関して Room が誤って警告するバグを修正しました。(b/140759491
  • コンパイル中のクエリの確認に使用されるネイティブ ライブラリが見つからない場合の処理を再試行するメカニズムを追加しました。

バージョン 2.2.0

バージョン 2.2.0

2019 年 10 月 9 日

androidx.room:room-*:2.2.0 がリリースされました。バージョン 2.2.0 に含まれる commit については、こちらをご覧ください

バージョン 2.1.0 以降の重要な変更点

  • あらかじめパッケージ化されたデータベース: すでにデータが設定されているデータベース ファイルを指定して RoomDatabase を作成するために、RoomDatabase.Builder の 2 つの新しい API を利用できるようになりました。createFromAsset() は、事前に設定されたデータベース ファイルが APK のアセット フォルダにある場合に使用し、createFromFile() は、ファイルが任意の場所にある場合に使用します。これらの API を使用すると破壊的な移行の動作が変更されるため、フォールバック移行中に、Room は、事前に設定されたデータベースがある場合はそれを再コピーしようとします。そうでない場合は、フォールバックして単にすべてのテーブルを削除し、再作成します。b/62185732
  • スキーマのデフォルト値: 列のデフォルト値の指定に使用できる新しいプロパティ defaultValue@ColumnInfo に追加されました。デフォルト値はデータベース スキーマの一部であり、指定されている場合は移行中に検証されます。b/64088772
  • 多対多の関係: 新しいアノテーション @Junction を受け取る新しいプロパティ associateBy@Relation に追加されました。ジャンクション テーブル(結合テーブルとも呼ばれます)を介して満たす必要がある関係の宣言に使用します。 b/69201917
  • 1 対 1 の関係: List 型または Set 型の、@Relation アノテーションが付けられた POJO フィールドの制限が解除され、実質的に単一値の関係を表現できるようになりました。 b/62905145
  • ターゲット エンティティ: DAO アノテーション @Insert@Update@Delete に新しいプロパティ targetEntity が追加され、DAO メソッドの対象として想定されたターゲット テーブルを指定できるようになりました。これにより、これらの DAO メソッドのパラメータを、部分的なエンティティとして解釈される任意の POJO にできます。実際面では、これにより部分的な挿入、削除、更新が可能になります。b/127549506
  • コルーチンの Flow: @Query DAO メソッドの戻り値の型が Flow<T> になりました。クエリ内の監視テーブルが無効になった場合、返された Flow は新しい値のセットを再出力します。戻り値の型を Channel<T> として DAO 関数を宣言するとエラーになります。代わりに、Room では Flow を使用してから、近隣関数を使用して FlowChannel に変換することをおすすめします。b/130428884
  • Gradle 増分アノテーション プロセッサ: Room が Gradle 分離アノテーション プロセッサになりました。プロセッサ オプション room.incremental を介して増分機能を有効にできます。詳しくは、Room のコンパイラ オプションに関する説明をご覧ください。問題が発生した場合は、こちらでバグを報告してください。今後の安定版では、増分機能をデフォルトで有効にする予定です。b/112110217
  • 展開投影: 新しい試験運用版のコンパイラ オプション room.expandProjection が追加されました。これにより Room は、戻り値の型の POJO の列のみを含むようにスター投影でクエリを書き換えます。たとえば @Query("SELECT * FROM Song") を指定した DAO メソッドの場合、フィールドが 2 つだけの SongIdAndTitle という名前の POJO を返します。次に、Room はクエリを SELECT id, title FROM Song に書き換えて、戻り値の型を満たす列の最小のセットが読み込まれるようにします。これにより、返される POJO の型のどのフィールドとも一致しない余分な列をクエリが返すときに表示される CURSOR_MISMATCH 警告が、実質的になくなります。

バージョン 2.2.0-rc01

2019 年 9 月 5 日

androidx.room:room:2.2.0-rc01 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。

Room 2.2.0-beta01 から公開された変更はありません。

バージョン 2.2.0-beta01

2019 年 8 月 22 日

androidx.room:room-*:2.2.0-beta01 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。

バグの修正

  • コルーチンの Flow クエリが一定時間後に新しい値の再出力を停止するバグを修正しました。(b/139175786
  • Room 1.0 以後移行されていないデータベースを開いているときに Room が以前のスキーマ ハッシュコードを受け入れず、無効なスキーマが原因でランタイム クラッシュが発生するバグを修正しました。(b/139306173

バージョン 2.2.0-alpha02

2019 年 8 月 7 日

androidx.room:room-*:2.2.0-alpha02 がリリースされました。このバージョンに含まれる commit については、こちらをご覧ください。

新機能

  • コルーチンの Flow: @Query DAO メソッドの戻り値の型が Flow<T> になりました。クエリ内の監視テーブルが無効になった場合、返された Flow は新しい値のセットを再出力します。戻り値の型を Channel<T> として DAO 関数を宣言するとエラーになります。代わりに、Room では Flow を使用してから、近隣関数を使用して FlowChannel に変換することをおすすめします。b/130428884
  • 展開投影: 新しい試験運用版のコンパイラ オプション room.expandProjection が追加されました。これにより Room は、戻り値の型の POJO の列のみを含むようにスター投影でクエリを書き換えます。たとえば @Query("SELECT * FROM Song") を指定した DAO メソッドの場合、フィールドが 2 つだけの SongIdAndTitle という名前の POJO を返します。次に、Room はクエリを SELECT id, title FROM Song に書き換えて、戻り値の型を満たす列の最小のセットが読み込まれるようにします。これにより、返される POJO の型のどのフィールドとも一致しない余分な列をクエリが返すときに表示される CURSOR_MISMATCH 警告が、実質的になくなります。
  • onDestructiveMigrate は、Room がデータベースを破壊的に移行するときのために RoomDatabase.Callback に追加された新しいコールバック API です。b/79962330

バグの修正

  • フィールドが保護されている場合に、Room がメソッドをフィールド セッターとして使用して誤ったコードを生成するバグを修正しました。b/136194628
  • 複数インスタンスの無効化が有効で、無効化サービスが強制終了されたときに、InvalidationTracker が 2 番目のプロセスで NPE をスローするバグを修正しました。 b/137454915
  • @RawQuery アノテーション付きの継承された suspend 関数の戻り値の型を Room が正しく識別しないバグを修正しました。b/137878827
  • 関連キーが BLOB 型の場合に生成される @Relation のコードを更新して、同等の ByteBuffer を使用するようにしました。 b/137881998
  • @Insert@Update@Delete の部分的なエンティティ パラメータとして使用される POJO にセッターが見つからないというエラーが Room で発生するバグを修正しました。b/138664463
  • 一部の DAO メソッドでエンティティ クラスが使用される場合に、@Entity を介して無視される列のゲッターとセッターが見つからないというエラーが Room で発生するバグを修正しました。 b/138238182
  • パラメータを再利用してクエリを実行すると、Room が名前付きバインディング引数を位置引数に正しく変換せず、ランタイム例外が発生するバグを修正しました。 b/137254857

バージョン 2.2.0-alpha01

2019 年 7 月 10 日

新機能

  • あらかじめパッケージ化されたデータベース: すでにデータが設定されているデータベース ファイルを指定して RoomDatabase を作成するために、RoomDatabase.Builder の 2 つの新しい API を利用できるようになりました。createFromAsset() は、事前に設定されたデータベース ファイルが APK のアセット フォルダにある場合に使用し、createFromFile() は、ファイルが任意の場所にある場合に使用します。これらの API を使用すると破壊的な移行の動作が変更されるため、フォールバック移行中に、Room は、事前に設定されたデータベースがある場合はそれを再コピーしようとします。そうでない場合は、フォールバックして単にすべてのテーブルを削除し、再作成します。b/62185732
  • スキーマのデフォルト値: 列のデフォルト値の指定に使用できる新しいプロパティ defaultValue@ColumnInfo に追加されました。デフォルト値はデータベース スキーマの一部であり、指定されている場合は移行中に検証されます。b/64088772

    注: ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z によって追加されたものなど、すでにデータベース スキーマにデフォルト値があり、@ColumnInfo を介して同じ列にデフォルト値を定義する場合、不明なデフォルト値を検証するために移行が必要になることがあります。詳しくは、Room の移行に関する説明をご覧ください。

  • 多対多の関係: 新しいアノテーション @Junction を受け取る新しいプロパティ associateBy@Relation に追加されました。ジャンクション テーブル(結合テーブルとも呼ばれます)を介して満たす必要がある関係の宣言に使用します。 b/69201917
  • 1 対 1 の関係: List 型または Set 型の、@Relation アノテーションが付けられた POJO フィールドの制限が解除され、実質的に単一値の関係を表現できるようになりました。 b/62905145
  • ターゲット エンティティ: DAO アノテーション @Insert@Update@Delete に新しいプロパティ targetEntity が追加され、DAO メソッドの対象として想定されたターゲット テーブルを指定できるようになりました。これにより、これらの DAO メソッドのパラメータを、部分的なエンティティとして解釈される任意の POJO にできます。実際面では、これにより部分的な挿入、削除、更新が可能になります。b/127549506
  • Gradle 増分アノテーション プロセッサ: Room が Gradle 分離アノテーション プロセッサになりました。プロセッサ オプション room.incremental を介して増分機能を有効にできます。詳しくは、Room のコンパイラ オプションに関する説明をご覧ください。問題が発生した場合は、こちらでバグを報告してください。今後の安定版では、増分機能をデフォルトで有効にする予定です。b/112110217

バグの修正

  • クエリの完了前にクエリの Rx ストリームが破棄された場合に、Room が EmptySetResultException をグローバル エラーハンドラに伝搬しなくなりました。 b/130257475
  • @RawQuery アノテーションが付けられた suspend DAO 関数に戻り値の型がない場合に、Room が誤ったエラー メッセージを表示するバグを修正しました。 b/134303897
  • Room は raw 型の DAO アダプターを生成しなくなりました。 b/135747255

バージョン 2.1.0

バージョン 2.1.0

2019 年 6 月 13 日

Room 2.1.0 がリリースされました。2.1.0-rc01 からの変更はありません。このバージョンに含まれる commit については、こちらをご覧ください。

2.0.0 以降の重要な変更

  • FTS: FTS3 または FTS4 マッピング テーブルを含むエンティティが Room でサポートされるようになりました。@Entity アノテーションが付与されたクラスでは、@Fts3 または @Fts4 のアノテーションを追加で使用することにより、全文検索のマッピング テーブルを含むクラスを宣言できるようになりました。アノテーションのメソッドを介して FTS オプションを使用することで、さらにカスタマイズできるようになります。
  • ビュー: Room で @DatabaseView アノテーションを使用することにより、クラスをストアドクエリ(ビューとも呼ばれます)として宣言できるようになりました。
  • コルーチン: DAO メソッドを suspend 関数として使用できるようになりました。この機能を利用するには、依存関係に room-ktx を含めます。ktx アーティファクトは、コルーチン内でデータベース トランザクションを実行するための拡張関数 RoomDatabase.withTransaction も提供します。
  • AutoValue: Room で、AutoValue アノテーションが付与されたクラスをエンティティや POJO として宣言できるようになりました。AutoValue アノテーションが付与されたクラスの抽象メソッドで、Room のアノテーションである @PrimaryKey@ColumnInfo@Embedded@Relation を宣言できるようになりました。これらのアノテーションは @CopyAnnotations とともに使用して、Room が正しく認識できるようにする必要もあります。
  • 非同期の追加サポート: @Insert@Delete、または @Update のアノテーションが付けられた DAO メソッドと、INSERTDELETE、または UPDATE のステートメントを含む @Query は、Rx の戻り値の型 CompletableSingleMaybe と、Guava の戻り値の型 ListenableFuture をサポートするようになり、suspend 関数にもできるようになりました。
  • enableMultiInstanceInvalidation: RoomDatabase.Builder の新しい API です。この API では、1 つのデータベース ファイルで RoomDatabase の複数のインスタンスを無効にできます。
  • fallbackToDestructiveMigrationOnDowngrade: RoomDatabase.Builder の新しい API です。この API は、ダウングレードが発生した場合にデータベースを自動的に再作成します。
  • ignoredColumns: @Entity アノテーションの新しい API です。この API を使用すると、無視するフィールドをフィールド名のリストで指定できます。
  • データクラスに含まれる Kotlin の基本コンストラクタが Room で適切に使用されるようになり、プロパティを vars として宣言する必要がなくなりました。

バージョン 2.1.0-rc01

2019 年 5 月 29 日

バグの修正

  • temp_store 構成がすでにセットアップされているために発生する可能性のある Room の初期化エラーを修正しました。 b/132602198
  • SQLite 3.27.0 以上のユーザーに対する、二重引用符の使用に関する警告を修正しました。 b/131712640
  • 複数の無効化チェックが並行して行われると InvalidationTracker がクラッシュするバグを修正しました。 b/133457594

バージョン 2.1.0-beta01

2019 年 5 月 7 日

androidx.room 2.1.0-beta01 がリリースされました。2.1.0-alpha07 からの変更はありません。このバージョンに含まれる commit については、こちらをご覧ください。

バージョン 2.1.0-alpha07

2019 年 4 月 25 日

API / 動作の変更

  • 拡張関数 RoomDatabase.withTransaction が変更され、CoroutineScope をレシーバとする関数ブロックを使用しなくなりました。これにより、トランザクション ブロックでの処理を同時実行するために必要な追加の coroutineScope { } ラッパーがスキップされなくなります。

バグの修正

  • コレクション型のパラメータを含む Kotlin DAO 関数について Room が適切な TypeConverter を見つけられないバグを修正しました。 b/122066791

バージョン 2.1.0-alpha06

2019 年 3 月 22 日

API / 動作の変更

  • Room がデータベース トランザクションの実行に複数のスレッドを使用しないように、非同期トランザクション クエリがシリアル化されました。RoomDatabase.Builder.setTransactionExecutor(Executor) が追加されて、トランザクションに使用するエグゼキュータを設定できるようになりました。
  • RoomDatabase.runInTransaction(Callable) は、チェックされた例外を RuntimeExceptions にラップしなくなりました。 b/128623748

バグの修正

  • コンテンツ テーブルと外部コンテンツ FTS テーブルの両方にオブザーバーが追加された場合に、無効化トラッカーがコンテンツ テーブルの監視を停止するバグを修正しました。 b/128508917
  • Room の SQLite 文法を SQLite 3.24.0 と一致させるように更新しました。 b/110883668

バージョン 2.1.0-alpha05

2019 年 3 月 13 日

新機能

  • 拡張関数 RoomDatabase.withTransaction を使用すると、コルーチン内でデータベース トランザクションを安全に実行できます。Room の拡張関数とコルーチンのサポートは、room-ktx アーティファクトで利用できます。
  • @Transaction アノテーションが付けられた非抽象 DAO メソッドを suspend 関数にできるようになりました。b/120241587

API / 動作の変更

  • アーティファクト room-coroutines の名前を、他の androidx アーティファクトと同じ命名規則に従って room-ktx に変更しました。
  • runInTransactionroom-ktx 拡張関数 withTransaction を優先して、RoomDatabasebeginTransactionsetTransactionSuccessfulendTransaction のサポートが終了しました。

バグの修正

  • 使用されたトークナイザーが SIMPLE の場合にトークナイザーの引数が削除されていたバグを修正しました。b/125427014
  • タイプが内部クラスであるパラメータを指定した suspend 関数を Room が正しく識別できないバグを修正しました。b/123767877
  • INSERTUPDATE、または DELETE のステートメントを使用した遅延 @Query DAO メソッドがメインスレッドでクエリの準備を行っていたバグを修正しました。b/123695593
  • 一部の suspend 関数に対して Room が不正なコードを生成するさまざまなバグを修正しました。b/123466702b/123457323
  • 生成されたコードで、サポートが終了したメソッドの使用が正しく抑制されていなかったバグを修正しました。b/117602586
  • androidx.sqlite の Room の依存関係を 1.0.2 に更新しました。これには、破損したデータベースを正しく処理するための修正が含まれています。b/124476912

既知の問題

  • Room 2.1.0-alpha05 は、Maven Central で現在利用できない kotlinx-metadata-jvm アーティファクトに依存しています(KT-27991)。 この依存関係は、maven { url "https://kotlin.bintray.com/kotlinx/" } をプロジェクトのリポジトリに追加することで解決できます。

バージョン 2.1.0-alpha04

2019 年 1 月 25 日

新機能

  • INSERTUPDATE、または DELETE ステートメントを含む @Query アノテーションが付けられた DAO メソッドが、非同期の型 SingleMaybleCompletableListenableFuture を返せるようになりました。さらに、suspend 関数にもできるようになりました。b/120227284

API / 動作の変更

  • @Transaction アノテーションが付けられた非抽象 DAO メソッドが非同期の型(SingleMaybleCompletableLiveDataListenableFuture など)を返す場合、Room がエラーをスローするようになりました。トランザクションはスレッドに限定されるため、Room は現在のところ、異なるスレッドでクエリを実行する可能性のある関数に関するトランザクションの開始と終了ができません。b/120109336
  • OnConflictStrategy.FAILOnConflictStrategy.ROLLBACK は、Android の現在の SQLite バインディングでは意図したとおりに動作しないため、@Deprecated になっています。b/117266738

バグの修正

  • DAO メソッドが suspend 関数である場合、Room が戻り値の型の TypeConverter を正しく使用しないバグを修正しました。b/122988159
  • 継承された suspend 関数を Room が誤って非 suspend と識別するバグを修正しました。b/122902595
  • @Embedded フィールドが親クラスにあり、複数の子クラスで使用される場合に、Room が誤ったコードを生成するバグを修正しました。b/121099048
  • beginTransaction()endTransaction() の間で DAO の suspend 関数を呼び出すと、データベースがデッドロックする問題を修正しました。b/120854786

バージョン 2.1.0-alpha03

2018 年 12 月 4 日

API の変更

  • @Fts3 または @Fts4 の FTS tokenizer が列挙値ではなく文字列を受け取るようになりました。これにより、カスタムの tokenizer を Room で使用できるようになりました。組み込みの tokenizer は依然として、FtsOptions で文字列定数として定義されています。b/119234881

新機能

  • コルーチン: DAO メソッドを suspend 関数として使用できるようになりました。Room の suspend 関数をサポートするために、新しいアーティファクト(room-coroutines)がリリースされました。b/69474692
  • DAO メソッドのアノテーションに @Insert@Delete@Update のいずれかを使用することで、戻り値の型として ListenableFuture を使用できるようになりました。b/119418331

バグの修正

  • Room が @EntityignoredColumns プロパティの列を使用して、誤ってコンストラクタを見つけようとするバグを修正しました。b/119830714
  • 生成された実装において、Room が DAO メソッドのパラメータを final としてマークしないバグを修正しました。b/118015483
  • Room のプロセッサが特殊記号を含むクエリのエラーを報告する際にクラッシュするバグを修正しました。b/119520136
  • Room が IN 式の引数として他の Collection の各種実装を拒否するバグを修正しました。b/119884035
  • Room から返される LiveData が常に監視される場合、ガベージ コレクションが行われ、新しいデータが生成されなくなるバグを修正しました。b/74477406
  • ロックの競合を緩和するよう RoomDatabase のクローズロックが更新されました。b/117900450

バージョン 2.1.0-alpha02

2018 年 10 月 30 日

新機能

  • @Relation@DatabaseView を参照できるようになりました。b/117680932

バグの修正

  • Rx の戻り値の型を使用して登録や破棄を行う場合に、Room がディスク I/O をメインスレッドで実行するバグを修正しました。b/117201279
  • Kotlin エンティティ クラスのフィールドに適した型コンバータを Room が見つけられないバグを修正しました。b/111404868
  • 引数のない Kotlin デフォルト メソッドを含む DAO インターフェースの実装に適さないコードが Room によって生成されるバグを修正しました。b/117527454
  • Room の SQLite 文法パーサーを更新し、ビルド時間が長引く原因となるパフォーマンスの問題を修正しました。b/117401230

バージョン 2.1.0-alpha01

2018 年 10 月 8 日

新機能

  • FTS: FTS3 または FTS4 マッピング テーブルを含むエンティティが Room でサポートされるようになりました。@Entity アノテーションが付与されたクラスでは、@Fts3 または @Fts4 のアノテーションを追加で使用することにより、全文検索のマッピング テーブルを含むクラスを宣言できるようになりました。アノテーションのメソッドを介して FTS オプションを使用することで、さらにカスタマイズできるようになります。b/62356416
  • ビュー: Room で @DatabaseView アノテーションを使用することにより、クラスをストアドクエリ(ビューとも呼ばれます)として宣言できるようになりました。b/67033276
  • AutoValue: Room で、AutoValue アノテーションが付与されたクラスをエンティティや POJO として宣言できるようになりました。AutoValue アノテーションが付与されたクラスの抽象メソッドで、Room のアノテーションである @PrimaryKey@ColumnInfo@Embedded@Relation を宣言できるようになりました。これらのアノテーションは @CopyAnnotations とともに使用して、Room が正しく認識できるようにする必要もあります。b/62408420
  • Rx の戻り値の型の追加サポート: DAO メソッドのアノテーションに @Insert@Delete@Update のいずれかを使用することで、Rx の戻り値の型として CompletableSingle<T>Maybe<T> を使用できるようになりました。b/63317956
  • @Relation が付与された不変の型: Room では従来、@Relation アノテーションが付与されたフィールドは設定できるものである必要がありましたが、それらのフィールドをコンストラクタのパラメータとして指定できるようになりました。
  • enableMultiInstanceInvalidation: RoomDatabase.Builder の新しい API です。この API では、1 つのデータベース ファイルで RoomDatabase の複数のインスタンスを無効にできます。この複数インスタンスの無効化メカニズムは、プロセスが複数にわたる場合でも機能します。b/62334005
  • fallbackToDestructiveMigrationOnDowngrade: RoomDatabase.Builder の新しい API です。この API は、ダウングレードが発生した場合にデータベースを自動的に再作成します。b/110416954
  • ignoredColumns: @Entity アノテーションの新しい API です。この API を使用すると、無視するフィールドをフィールド名のリストで指定できます。エンティティで継承されたフィールドを無視する場合に便利です。b/63522075

API / 動作の変更

  • RoomDatabasemCallbackmDatabase@Deprecated になりました。これらは Room の次のメジャー バージョンで削除される予定です。b/76109329

バグの修正

  • 初期化中にデータベースが破損した場合または不正な移行が行われた場合に、Room を正常に復元できない問題を修正しました。b/111504749b/111519144
  • データクラスに含まれる Kotlin の基本コンストラクタが Room で適切に使用されるようになり、フィールドを vars として宣言する必要がなくなりました。b/105769985

バージョン 2.0.0

バージョン 2.0.0

2018 年 10 月 1 日

androidx.room 2.0.0 がリリースされました。2.0.0-rc01 からの変更はありません。

バージョン 2.0.0-rc01

2018 年 9 月 20 日

androidx.room 2.0.0-rc01 がリリースされました。2.0.0-beta01 からの変更はありません。

バージョン 2.0.0-beta01

2018 年 7 月 2 日

API / 動作の変更

  • RoomDatabase.Builder.setQueryExecutor() が追加され、クエリの実行場所のカスタマイズが可能になりました。
  • RxJava2 Observable のサポートが追加されました。
  • 生成された DAO とデータベースの実装は今回が最終版となります。

バグの修正

  • 「cannot find getter for field」エラーにクラス / フィールド名が指定されるようになりました。b/73334503
  • 旧バージョンの Room との RoomOpenHelper の下位互換性を修正しました。b/110197391

AndroidX 以前の依存関係

AndroidX 以前のバージョンの Room では、次の依存関係を含めます。

dependencies {
    def room_version = "1.1.1"

    implementation "android.arch.persistence.room:runtime:$room_version"
    annotationProcessor "android.arch.persistence.room:compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor

    // optional - RxJava support for Room
    implementation "android.arch.persistence.room:rxjava2:$room_version"

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation "android.arch.persistence.room:guava:$room_version"

    // Test helpers
    testImplementation "android.arch.persistence.room:testing:$room_version"
}

バージョン 1.1.1

バージョン 1.1.1

2018 年 6 月 19 日

Room 1.1.1 は Room 1.1.1-rc1 とまったく同じです。

バージョン 1.1.1-rc1

2018 年 5 月 16 日: 移行を使用している場合、Room 1.1.0 ではなく 1.1.1-rc1 を使用することを強くおすすめします。

Room で移行後の初期化が適切に処理されないバグを修正しました。b/79362399

バージョン 1.1.0

バージョン 1.1.0-beta3

2018 年 4 月 19 日

バグの修正

  • Kotlin POJO が Java で定義された関係エンティティを参照する際に発生するコンパイル エラーを修正しました。b/78199923

バージョン 1.1.0-beta2

2018 年 4 月 5 日

バグの修正

  • Room の Rx の SingleMaybe の実装における重大なバグを修正しました。このバグは、クエリのリサイクルを早すぎるタイミングで実行し、返された Single インスタンスまたは Maybe インスタンスに複数のオブザーバーを追加した場合に問題を引き起こしていました。 b/76031240

  • [RoomDatabase.clearAllTables][ref-clearAllTables] がトランザクション内で呼び出された場合、データベースに VACUUM を実行しなくなりました。 b/77235565

バージョン 1.1.0-beta1

2018 年 3 月 21 日

API の変更

  • API レビューのフィードバックに基づき、@RawQuery では String をクエリ パラメータとして渡すことができなくなりました。[SupportSQLiteQuery][ref-SupportSQLiteQuery] を使用する必要があります(引数をサポートする [SupportSQLiteQuery][ref-SupportSQLiteQuery] のインスタンスを簡単に作成するには、[SimpleSQLiteQuery][ref-SimpleSQLiteQuery] についてご確認ください)。
  • RoomDatabase.Builder の [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] メソッドで、vararg Integer の代わりに vararg int を使用できるようになりました。

バグの修正

  • WAL チェックポイントを設定し、データベースの VACUUM を実行することで、[RoomDatabase.clearAllTables][ref-clearAllTables] がオペレーティング システムにスペースを返すようになりました。
  • [@RawQuery][ref-RawQuery] は、Pojo が Embedded フィールドまたは Relation を介してエンティティを参照する限り、observedEntities プロパティの Pojo をすべて受け入れるようになりました。 b/74041772
  • Paging: Room の DataSource の実装で、マルチテーブルの依存関係(関係、結合など)を適切に処理できるようになりました。以前はこの依存関係により、新しい結果をトリガーできず、コンパイルを実行できないこともありました。 b/74128314

バージョン 1.1.0-alpha1

2018 年 1 月 22 日

新機能

  • RawQuery: この新しい API を使用すると、@Dao メソッドで SQL をクエリ パラメータとして受け取ることができます。 b/62103290b/71458963
  • fallBackToDestructiveMigrationsFrom: RoomDatabase.Builder のこの新しい API を使用すると、よりきめ細かな制御が可能になり、スキーマ バージョンの破壊的な移行を開始できるようになります(fallbackToDestructiveMigration との比較)。 b/64989640
  • Room で新しい Paging API(alpha-4 以上)のみをサポートするようになりました。非推奨の LivePagedListProvider のサポートは終了しました。新しい Room アルファ版を使用するには、Paging alpha-4 以上を使用し、LivePagedListProvider から LivePagedListBuilder に切り替える必要があります(まだ切り替えていない場合)。

バグの修正

  • Kotlin Kapt の型に対するサポートが改善されました。b/69164099
  • フィールドの順序によってスキーマが無効化されることがなくなりました。b/64290754