📚
【Android】ライブラリ管理に version catalog を導入する
version catalog について
ライブラリのバージョンを一元管理する方法としてext
ブロックに記述したり外部ファイルに書き出す方法がありましたが、標準的な方法がなかったためGradle 7.0
で実験的に導入された機能。
settings.gradle
やToml
ファイルでライブラリを管理します。
開発環境
Android Studio Flamingo | 2022.2.1 Beta 5
Kotlin: 1.6.21
Gradle: 7.2.0
初期設定
settings.gradle に実装する方法もありますが、今回はToml
ファイルを使う方法で実装したいと思います。
1. version catalog を有効にする
settings.gradle
に以下を追記して、version catalog
を使用できるようにします。
settings.gradle
enableFeaturePreview('VERSION_CATALOGS')
2. Toml ファイルを作成する
プロジェクト直下のgradle
ディレクトリにlibs.versions.toml
を作成します。
これでlibs.versions.toml
に記述したバージョンやライブラリをGradle
が読み取るようになります。
libs.versions.toml について
セクション
libs.versions.toml
で使用するセクションは以下の4つ
-
[versions]
: バージョンを定義 -
[libraries]
: ライブラリを定義 -
[bundles]
:[libraries]
で定義したライブラリをまとめて1つの Alias にする -
[plugins]
: プラグインを定義
Alias の命名
-
-
_
.
のどれかで区切られた識別子で構成する - Alias を参照するとき、
-
_
.
は.
に変換される(android-material > android.material
) - セットできる値は文字列のみ
Aliases and their mapping to type safe accessors
使い方
libs.versions.toml
に定義した Alias を参照するときは、プレフィックスにlibs
をつける必要があります。
(今回[plugins]
は使用していないので、割愛します!)
Versions
Int
にする必要がある値はget().toInteger()
で変換します。
[versions]
compileSdk = "32"
buildTools = "30.0.3"
android {
compileSdkVersion libs.versions.compileSdk.get().toInteger()
buildToolsVersion libs.versions.buildTools.get()
}
libraries
[libraries]
android-material = "com.google.android.material:material:1.8.0"
dependencies {
implementation(libs.android.material)
}
バージョンを共有する場合
[versions]
compose = "1.1.1"
[libraries]
androidx-compose-ui = { module = "androidx.compose.ui:ui", version.ref = "compose" }
androidx-compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview", version.ref = "compose" }
Firebase の bom を使用する場合
[libraries]
firebase-bom = "com.google.firebase:firebase-bom:26.2.0"
firebase-analytics-ktx = { module = "com.google.firebase:firebase-analytics-ktx" }
dependencies {
implementation platform(libs.firebase.bom)
implementation(libs.firebase.analytics.ktx)
}
bundles
bundles
セクションでは、セットで使うライブラリをまとめて1つの Alias にすることができます。
[versions]
compose = "1.1.1"
[libraries]
androidx-compose-ui = { module = "androidx.compose.ui:ui", version.ref = "compose" }
androidx-compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview", version.ref = "compose" }
[bundles]
compose-ui = ["androidx-compose-ui", "androidx-compose-ui-tooling-preview"]
dependencies {
implementation(libs.bundles.compose.ui)
}
使ってみた感想
良かったところ
- バージョン/ライブラリをまとめて管理できていい。
Toml
も簡単なので理解しやすい。 -
bundles
でライブラリをまとめれるので、必要なライブラリを都度気にする必要がなくなって良さそう -
dependencies
がスッキリする
悩んだ/気になったところ
- Alias 名をどうしようか悩んだ
-
versionCode
orversion-code
-
androidx-compose-ui
orcompose-ui
orandroidx-composeUi
-
leakcanary
ordebug-leakcanary
(プレフィックスに用途/機能を付けるか)
-
- バージョンのアップデートが必要な時に
Toml
ファイル上で Warning が出ないので気づきにくそう?- Renovate を使うとバージョンのアップデートを検知してくれるので大丈夫そう
Discussion