Gradle KTS で Room データベースを使用する際の kapt および ksp 未解決参照エラーの解決方法
問題の説明
Android Studio で ROOM データベースのセットアップ中、build.gradle.kts
(Module:app)ファイル内で以下のエラーが発生します:
Unresolved reference: kapt
Unresolved reference: ksp
これらのエラーは Kotlin アノテーションプロセッシングツール(kapt
)と Kotlin シンボルプロセッシング(ksp
)の参照が解決できない状態です。主な原因は:
- 必要なプラグインがプロジェクトに正しく追加されていない
kapt
とksp
を同時に使用している(Room ではどちらか一方のみ必要)- Gradle プラグインのバージョン互換性問題
注意
公式ドキュメント記載の設定をそのままコピーしても動作しない場合、Gradle KTS(Kotlin DSL)特有の設定が必要です。
解決方法
以下いずれかの方法で修正可能です。KSP が推奨(高速なコード生成)ですが、環境によっては KAPT も選択可能です。
方法 1: KAPT を使用する場合
- モジュールレベルの
build.gradle.kts
(app)にkotlin-kapt
プラグインを追加:kotlinplugins { id("com.android.application") id("org.jetbrains.kotlin.android") id("kotlin-kapt") // 追加 }
- 依存関係から
ksp
を削除しkapt
のみ保持:kotlindependencies { val room_version = "2.6.1" implementation("androidx.room:room-runtime:$room_version") kapt("androidx.room:room-compiler:$room_version") // kapt を使用 // ksp(...) は削除する }
方法 2: KSP を使用する場合(推奨)
- プロジェクトレベルの
build.gradle.kts
に KSP プラグインを追加:kotlinplugins { // 既存のプラグインに追加 id("com.google.devtools.ksp") version "1.9.21-1.0.15" apply false }
- モジュールレベルの
build.gradle.kts
(app)で KSP プラグインを適用:kotlinplugins { id("com.android.application") id("org.jetbrains.kotlin.android") id("com.google.devtools.ksp") // 追加 }
- 依存関係から
kapt
を削除しksp
のみ保持:kotlindependencies { val room_version = "2.6.1" implementation("androidx.room:room-runtime:$room_version") ksp("androidx.room:room-compiler:$room_version") // ksp を使用 }
重要
kapt
と ksp
を同時に使用すると競合が発生します。Room コンパイラ依存関係は どちらか一方のみ を選択してください。
補足説明
KAPT と KSP の違い
ツール | 特徴 | 推奨状況 |
---|---|---|
KAPT | Kotlin Annotation Processing Tool ・Java アノテーションプロセッサと互換性あり ・ビルド速度が遅い | レガシーコードで使用 KSP がサポートしていないライブラリの場合 |
KSP | Kotlin Symbol Processing ・Kotlin ネイティブのコード生成 ・ビルド速度が最大2倍高速 | 新規プロジェクトで推奨 Room や Hilt 等の最新ライブラリ対応 |
ビルド設定の確認ポイント
- Gradle プラグインのバージョン整合性
com.android.tools.build:gradle
と KSP バージョンの互換性を公式ドキュメントで確認 - 同期の実行
設定変更後は必ず Sync Project with Gradle Files を実行 - キャッシュクリア
解決しない場合:File > Invalidate Caches / Restart