libs.versions.toml への Hilt 依存関係の追加方法
問題点
Android Studio で libs.versions.toml
を使用するプロジェクトに Hilt を追加すると、implementation(libs.hilt)
で「未解決の参照」エラーが発生します。これは以下の原因によります:
- TOML ファイルでの Hilt 依存関係の定義方法が不適切
- KSP プラグインの未設定
- プロジェクト依存関係の連携不足
解決策:Hilt と KSP を TOML で正しく設定する方法
ステップ 1: libs.versions.toml
の更新
gradle/libs.versions.toml
ファイルに以下を追加:
toml
[versions]
hilt = "2.50" # Hiltの最新バージョンに更新
ksp = "1.9.20-1.0.14" # KSPの最新バージョンに更新
[libraries]
# Hilt本体ライブラリ
hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" }
# KSP用コンパイラ
hilt-compiler = { group = "com.google.dagger", name = "hilt-compiler", version.ref = "hilt" }
[plugins]
# Hilt Gradle プラグイン
hilt-android = { id = "com.google.dagger.hilt.android", version.ref = "hilt" }
# Kotlin Symbol Processing プラグイン
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
ステップ 2: プロジェクトレベルの設定 build.gradle.kts
プロジェクトルートの build.gradle.kts
に以下を追加:
kotlin
// 最上部のプラグイン管理ブロック内
plugins {
alias(libs.plugins.hilt.android) apply false
alias(libs.plugins.ksp) apply false
}
注意
apply false
はプロジェクト全体でプラグインを使用可能にするだけで個別モジュールには適用しません
ステップ 3: アプリモジュールの設定 build.gradle.kts
kotlin
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
// Hilt & KSP プラグインを適用
alias(libs.plugins.hilt.android)
alias(libs.plugins.ksp)
}
dependencies {
// Hilt 本体の依存関係
implementation(libs.hilt.android)
// KSP プロセッサ(kaptではなくkspを使用)
ksp(libs.hilt.compiler)
}
kapt ではなく ksp を使用
Kotlin プロジェクトでは kapt
ではなく KSP(Kotlin Symbol Processing) が推奨されます:
- ビルド速度が向上
- Kotlin 固有の機能をフルサポート
完全同期とクリーンビルド
- Sync Now で Gradle 同期を実行
- エラーが残る場合 Build > Clean Project を実行
- Build > Rebuild Project で完全再ビルド
::: success 確認ポイント 同期後、以下のインポートが解決されていることを確認:
kotlin
import libs.plugins.hilt.android
import libs.hilt.android
:::
よくあるエラーと対処法
エラー: Unresolved reference: hilt
- TOML ファイル定義ミス:ライブラリ名が
hilt-android
であればlibs.hilt.android
で参照 - 同期不足:クリーンビルドを実行
エラー: Hilt Android plugin was applied but no com.google.dagger:hilt-android...
- TOML ファイルでの
[plugins]
定義漏れ - アプリモジュールでのプラグイン適用漏れ
エラー: kspPlugins not found
- KSP バージョンが古い:
ksp = "..."
を最新版に更新 - アプリモジュールの
plugins
ブロックにksp
追加漏れ
ベストプラクティス
- バージョン管理:
versions
ブロックで全依存関係を集中管理 - 依存関係アルファベット順:
[libraries]
内で定義をソート可視性向上 - バージョン定数化:同一バージョンで使用する依存関係は
version.ref
で共有
toml
[versions]
retrofit = "2.11.0"
[libraries]
retrofit-core = { group = "com.squareup.retrofit2", name = "retrofit", version.ref = "retrofit" }
retrofit-gson = { group = "com.squareup.retrofit2", name = "retrofit-converter-gson", version.ref = "retrofit" }