Room 3.0 の最初のアルファ版がリリースされました。Room 3.0 は、Kotlin Multiplatform(KMP)に重点を置いたライブラリのメジャー バージョンであり、既存の Android、iOS、JVM デスクトップのサポートに加えて、JavaScript と WebAssembly(WASM)のサポートを追加しています。
このブログでは、破壊的変更、Room 3.0 の背後にある理由、Room 2.0 から移行するためにできるさまざまなことについて説明します。
破壊的変更
Room 3.0 には、API の互換性を破る次の変更が含まれています。
- SupportSQLite API の削除: Room 3.0 は、androidx.sqlite ドライバ API によって完全にサポートされています。SQLiteDriver API は KMP と互換性があり、Room の Android API への依存関係を削除することで、2 つのバックエンドを回避できるため、Android の API サーフェスが簡素化されます。
- Java コードの生成を廃止: Room 3.0 では Kotlin コードのみが生成されます。これは、進化する Kotlin ファーストのパラダイムに沿ったものですが、コードベースと開発プロセスを簡素化し、イテレーションを高速化することもできます。
- KSP に注力: Java アノテーション処理(AP)と KAPT のサポートも終了します。Room 3.0 は KSP(Kotlin Symbol Processing)プロセッサのみで、Java 言語の制約を受けずに Kotlin コードベースをより適切に処理できます。
- コルーチン優先: Room 3.0 は Kotlin コルーチンを採用し、API をコルーチン優先にしています。コルーチンは KMP 互換の非同期フレームワークであり、Room を本質的に非同期にすることは、ウェブ プラットフォームをサポートするための重要な要件です。
新しいパッケージ
既存の Room 2.x 実装との互換性の問題を防ぎ、Room への推移的依存関係を持つライブラリ(WorkManager など)に対応するため、Room 3.0 は新しいパッケージに存在します。つまり、新しい Maven グループとアーティファクト ID もあります。たとえば、androidx.room:room-runtime は androidx.room3:room3-runtime になり、androidx.room.RoomDatabase などのクラスは androidx.room3.RoomDatabase に配置されるようになります。
Kotlin とコルーチンを優先
Java コードの生成がなくなったため、Room 3.0 では、Room とやり取りするコードベースが Java であっても、KSP と Kotlin コンパイラが必要になります。Room の使用が集中し、Kotlin Gradle プラグインと KSP をコードベースの残りの部分に影響を与えることなく適用できるマルチモジュール プロジェクトを作成することをおすすめします。
Room 3.0 では、コルーチンも必要です。具体的には、Flow などのリアクティブ型を返す場合を除き、DAO 関数は suspend 関数である必要があります。Room 3.0 では、DAO 関数のブロックが禁止されています。アプリケーションへのコルーチンの統合を開始する方法については、Android のコルーチンに関するドキュメントをご覧ください。
SQLiteDriver API への移行
SupportSQLite からの移行に伴い、アプリは SQLiteDriver API に移行する必要があります。この移行は、BundledSQLiteDriver を介してバンドルされた SQLite ライブラリの使用を許可するなど、Room 3.0 のメリットを最大限に活用するために不可欠です。Room 2.7.0 以降では、今日からドライバ API への移行を開始できます。SupportSQLite の使用は今後避けることを強くおすすめします。Room 統合を SQLiteDriver API に移行すると、パッケージの変更は主にシンボル参照(インポート)の更新を伴い、呼び出しサイトの変更は最小限で済む可能性があるため、Room 3.0 への移行が容易になります。
SQLiteDriver API の概要については、SQLiteDriver API のドキュメントをご覧ください。
Room を移行して SQLiteDriver API を使用する方法について詳しくは、SupportSQLite から移行するための公式ドキュメントをご覧ください。
Room SupportSQLite ラッパー
SupportSQLite を完全に削除することは、すべてのプロジェクトで直ちに実現できるとは限りません。この移行を容易にするため、Room 2.0 シリーズの最新バージョンである Room 2.8.0 では、androidx.room:room-sqlite-wrapper という新しいアーティファクトが導入されました。このアーティファクトは、データベースの SupportSQLite API が SQLiteDriver のインストールにより無効になっている場合でも、RoomDatabase を SupportSQLiteDatabase に変換できる互換性 API を提供します。これにより、コードベースの完全な移行に時間がかかるデベロッパーに一時的なブリッジが提供されます。このアーティファクトは、重要な SupportSQLite の使用をサポートしながら Room 3.0 への移行を可能にするため、Room 3.0 では androidx.room3:room3-sqlite-wrapper として引き続き存在します。
たとえば、roomDatabase.openHelper.writableDatabase の呼び出しは roomDatabase.getSupportWrapper() に置き換えることができ、setDriver() が Room のビルダーで呼び出された場合でもラッパーが提供されます。
詳しくは、room-sqlite-wrapper のドキュメントをご覧ください。
Room と SQLite のウェブ サポート
Kotlin Multiplatform のターゲットとして JS と WasmJS がサポートされ、API にいくつかの大きな変更が加えられます。特に、Room 3.0 の多くの API は、ウェブ ストレージの適切なサポートが非同期であるため、一時停止関数です。SQLiteDriver API も更新され、ウェブをサポートするようになりました。新しいウェブ非同期ドライバは androidx.sqlite:sqlite-web で利用できます。これは、Origin Private File System(OPFS)にデータベースを永続化できる Web Worker ベースのドライバです。
Room for the Web の設定方法について詳しくは、Room 3.0 リリースノートをご覧ください。
カスタム DAO の戻り値の型
Room 3.0 では、RxJava や Paging と同様に、カスタム統合を Room に追加する機能が導入されています。@DaoReturnTypeConverter という新しいアノテーション API を使用すると、Room の生成コードが実行時にアクセス可能になる独自の統合を作成できます。これにより、Room チームがサポートを追加するのを待たずに、カスタムの戻り値の型を持つ @Dao 関数を有効にできます。既存のインテグレーションは、この機能を使用するように移行されるため、この機能に依存しているユーザーは、コンバータを @Database または @Dao の定義に追加する必要があります。
たとえば、ページング コンバータは androidx.room3:room3-paging アーティファクトにあり、PagingSourceDaoReturnTypeConverter と呼ばれます。一方、LiveData の場合、コンバータは androidx.room3:room3-livedata にあり、LiveDataDaoReturnTypeConverter と呼ばれます。
詳しくは、Room 3.0 リリースノートの DAO 戻り値の型コンバータのセクションをご覧ください。
Room 2.x のメンテナンス モード
Room の開発は Room 3 に重点が置かれるため、現在の Room 2.x バージョンはメンテナンス モードに入ります。つまり、主要な機能は開発されませんが、バグの修正と依存関係の更新を含むパッチ リリース(2.8.1、2.8.2 など)は引き続き行われます。チームは、Room 3 が安定するまでこの作業に取り組んでいます。
まとめ
Google は Room 3.0 の可能性と、Kotlin エコシステムにもたらされる機会に大きな期待を寄せています。この取り組みの最新情報にご期待ください。
続きを読む
-
プロダクト ニュース
デベロッパーの AI ワークフローとニーズはそれぞれ異なるため、AI が開発にどのように役立つかを選択できることが重要です。1 月には、Android Studio の AI 機能にローカルまたはリモートの AI モデルを選択できる機能を導入しました。
Matthew Warner • 所要時間: 2 分
-
プロダクト ニュース
Android Studio Panda 3 が安定版となり、本番環境で使用できる準備が整いました。このリリースでは、AI を活用したワークフローをさらに細かく制御してカスタマイズできるようになり、高品質の Android アプリをこれまで以上に簡単に構築できるようになります。
Matt Dyor • 所要時間: 3 分
-
プロダクト ニュース
Google は、最も高性能な AI モデルを直接 Android デバイスに搭載することに取り組んでいます。本日、Google の最新の最先端オープンモデルである Gemma 4 のリリースを発表いたします。
Caren Chang, David Chou • 所要時間: 3 分
メールを受け取る
Android 開発に関する最新の分析情報を毎週メールでお届けします。