VersionCatalogはGradleビルドシステムで使用される依存関係とバージョンを一括管理ができる仕組みです。
Grade 7.6から正式に導入されました
- 依存関係、バージョンを一括管理できる
- 関係のあるライブラリを1つにまとめることができる
- 使い方が簡単
もちろん、モジュールによって依存するライブラリやプラグインのバージョンを変えたい場合にも対応できます。
versions.catalog.tomlファイルはどこでリンクしているのかと思ったら、自動で探して使えるようにしてくれるらしい
従来の依存関係の書き方では、各モジュールのbuild.gradle.kts
に直接記述していましたが、VersionCatalogを使用すると、libs.versions.toml
に依存関係をまとめて記述できます。
今回は、以下のbuild.gradle.kts
をlibs.versions.toml
を使った方式に変換していくことでVersionCatalogの有用性を解説していこうと思います。
従来の書き方
plugins {
id("com.android.application") version "7.2.0" apply false
id("org.jetbrains.kotlin.android") version "1.6.10" apply false
}
// 省略.....
dependencies {
implementation("androidx.core:core-ktx:1.9.0")
implementation("androidx.appcompat:appcompat:1.4.1")
implementation("androidx.recyclerview:recyclerview:1.2.1")
implementation("androidx.room:room-runtime:2.4.2")
kapt("androidx.room:room-compiler:2.4.2")
implementation("androidx.room:room-ktx:2.4.2")
// その他の依存関係...
}
VersionCatalogでは、以下の4つのを定義できるので、順番に使い方を解説していきます。(versionsについては、単純な定義だけなので省略します)
- [versions] : ライブラリ、プラグインのバージョンを定義する(文字列)
- [libraries] : ライブラリの依存関係を定義する
- [bundle] :
[libraries]
で定義したライブラリをまとめて1つの Alias にする - [plugins] : プラグインの依存関係を定義する
最初に記載した、従来のbuild.gradle.kts
を使用した方法から、VersionCatalogを使った方法に「ライブラリ依存関係」部分を書き換えると、libs.versions.toml
ファイルに以下のように記述します。
[versions]
ktx = "1.9.0"
[libraries]
androidx-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "ktx" }
書き換えたバージョンをbuild.gradle.kts
で使うと以下のように、「libs.」内に自動的にVersionCatalog側で定義した変数が生成されるので、libs.定義した変数名
のように宣言します。
dependencies {
implementation(libs.androidx.ktx)
}
この機能はVersionCatalogから追加された機能で、「ライブラリのセット」を定義できる機能です。
今回の例だと、「Room」の機能がセットにしたほうが定義しやすそうなので、セットにするためにlibs.versions.toml
ファイルに以下のように記述します。
[libraries]
// ....
androidx-room-runtime = { group = "androidx.room", name = "room-runtime", version.ref = "room" }
androidx-room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "room" }
androidx-room-ktx = { group = "androidx.room", name = "room-ktx", version.ref = "room" }
[bundles]
androidx-room-bundle = ["androidx-room-runtime", "androidx-room-ktx"]
compilerについては、kpat
で使用するのでセットにしていません。
書き換えたバージョンをbuild.gradle.kts
で使うと以下のように、「libs.bundles」内に自動的にVersionCatalog側で定義した変数が生成されるので、libs.bundles.定義した変数名
のように宣言します。
dependencies {
implementation(libs.bundles.androidx.room.bundle)
kapt(libs.androidx.room.compiler)
// その他の依存関係...
}
最初に記載した、従来のbuild.gradle.kts
を使用した方法から、VersionCatalogを使った方法に「プラグイン依存関係」部分を書き換えると、libs.versions.toml
ファイルに以下のように記述します。
[versions]
android = "7.2.0"
kotlin = "1.6.10"
[plugins]
android = { id = "com.android.application", version = "android" }
kotlin = { id = "org.jetbrains.kotlin.android",version = "kotlin" }
書き換えたバージョンをbuild.gradle.kts
で使うと以下のように、「libs.plugins」内に自動的にVersionCatalog側で定義した変数が生成されるので、libs.plugins.定義した変数名
のように宣言します。
plugins {
id(libs.plugins.android)
id(libs.plugins.kotlin)
}
「-」を含む変数を定義した場合は、build.gradle.kts内で使用するときに、「-」の部分が「.」に置き換わります。
「androidx-ktx」の場合は、「androidx.ktx」となります。
「libs.」と入力した時点でVersionCatalogに定義した変数が補完候補に出てこない場合、コンパイルができていない可能性があるので、libs.versions.tomlを記述した時点で一度Syncをしてみてください
従来の書き方では、各モジュールでプラグインやライブラリのバージョンを個別に管理する必要がありましたが、VersionCatalogを使用することで、これらを一元管理でき、プロジェクト全体の管理が簡素化されます。
特に、複数のライブラリをバンドルにまとめることで、依存関係の追加や管理がより効率的になります。