Room 3.0 の最初のアルファ版がリリースされました。Room 3.0 は、ライブラリのメジャーな破壊的変更バージョンです。Kotlin マルチプラットフォーム(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 関数は一時停止する必要があります。Room 3.0 では、DAO 関数のブロッキングは許可されません。コルーチンをアプリケーションに統合する方法については、Android でのコルーチンのドキュメントをご覧ください。
SQLiteDriver API への移行
SupportSQLite から移行するため、アプリは SQLiteDriver API に移行する必要があります。この移行は、Room 3.0 のメリットを最大限に活用するために不可欠です。たとえば、BundledSQLiteDriver を使用してバンドルされた SQLite ライブラリを使用できます。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 という新しいアーティファクトが導入されました。このアーティファクトは、データベースに SQLiteDriver がインストールされているためにデータベースの SupportSQLite API が無効になっている場合でも、RoomDatabase を SupportSQLiteDatabase に変換できる互換性 API を提供します。これにより、コードベースを完全に移行するまでに時間がかかるデベロッパーに一時的なブリッジが提供されます。このアーティファクトは、重要な SupportSQLite の使用をサポートしながら Room 3.0 への移行を可能にするため、Room 3.0 でも androidx.room3:room3-sqlite-wrapper として引き続き存在します。
たとえば、roomDatabase.openHelper.writableDatabase の呼び出しを roomDatabase.getSupportWrapper() に置き換えることができます。Room のビルダーで setDriver() が呼び出された場合でも、ラッパーが提供されます。
詳細については、room-sqlite-wrapper のドキュメントをご覧ください。
Room と SQLite のウェブ サポート
Kotlin マルチプラットフォーム ターゲット JS と WasmJS のサポートにより、API が大幅に変更されます。具体的には、ウェブ ストレージの適切なサポートは非同期であるため、Room 3.0 の多くの API は一時停止関数です。SQLiteDriver API もウェブをサポートするように更新され、新しいウェブ非同期ドライバが androidx.sqlite:sqlite-web で利用できるようになりました。これは、_Web Worker_ ベースのドライバで、オリジン プライベート ファイル システム(OPFS)にデータベースを永続化できます。
ウェブ用に Room を設定する方法の詳細については、 Room 3.0 リリースノートをご覧ください。
カスタム DAO 戻り値の型
Room 3.0 では、RxJava や Paging と同様に、カスタム統合を Room に追加できます。@DaoReturnTypeConverter という新しいアノテーション API を使用すると、Room の生成コードが実行時にアクセスできるようになる独自の統合を作成できます。これにより、Room チームがサポートを追加するのを待たずに、カスタムの戻り値の型を持つ @Dao 関数を使用できます。既存の統合は、この機能を使用するように移行されます。そのため、この機能を使用している場合は、コンバータを @Database または @Dao 定義に追加する必要があります。
たとえば、Paging コンバータは 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 エコシステムに提供される機会に大きな期待を寄せています。この取り組みの最新情報にご期待ください。
続きを読む
-
プロダクト ニュース
この基盤に基づいて、Jetpack Telecom v1.1.0 では、サードパーティの VoIP アプリにネイティブ レベルの可視性と利便性を提供します。
Nataraj K R • 2 分で読了
-
プロダクト ニュース
本日 The Android Show で発表されたように、Android はオペレーティング システムからインテリジェンス システムに移行し、アプリとのエンゲージメントを深める機会を増やしています。
Matthew McCullough • 4 分で読了
-
プロダクト ニュース
モバイル エコシステムは常に進化しており、新たな機会と新たな脅威をもたらしています。これらの変更を通じて、Android と Google Play は、数十億のユーザーが安心してアプリを楽しめるように、またデベロッパーのイノベーションが促進されるように取り組んでいます。
Vijaya Kaza • 3 分で読了
最新情報の入手
Android 開発に関する最新の分析情報を毎週メールでお届けします。