一流のプログラマーのコードには、それぞれのこだわりや哲学があります。
Gradle Version Catalog で利用される設定ファイルの libs.versions.toml を眺めながら、気になったことがありました。
キー名の形式です。
■ いろんな形式がある
👉 Naming convention (programming) - Wikipedia
■ TOML 的には
Case についてははっきりとしたきまりはないようです。
キーはベア・キー、クォート付きキー、ドット付きキーのいずれかです。
ベア・キーはASCII英数字とアンダースコア、ダッシュのみで構成されます(A-Za-z0-9_-)。 ASCII数字のみでも構いませんが、文字列として解釈されることに注意してください(例: 1234)。
こんなきまりもあります。
インライン・テーブルは一行で表現されるべきです。インライン・テーブルでは、配列と違って、最後の要素のあとにコンマを足すことはできません。波括弧の内側では改行は認められません。ただし、それぞれの値の中で改行することは、それぞれの値型で認められている範囲でできます。ですが、できるとしてもインライン・テーブルを複数行に分割することはなるべく避けるべきです。もしあなたがその必要があるように感じたのならば、普通のテーブルを用いるべきです。
name = { first = "Tom", last = "Preston-Werner" }
point = { x = 1, y = 2 }
animal = { type.name = "pug" }
👉 インライン・テーブル TOML: 日本語 v1.0.0-rc.2
■ GitHub で見てみる
camelCase
[libraries]
androidPlugin = { module = "com.android.tools.build:gradle", version = "4.2.2" }
robovmPlugin = { module = "com.mobidevelop.robovm:robovm-gradle-plugin", version.ref = "robovm" }
kotlinStdLib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" }
kotlinCoroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version = "1.5.1" }
okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" }
👉 retrofit/libs.versions.toml at 5180f481c58b0be80ad81a0c1ec540fe7e91ee81 · square/retrofit
kebab-case
[libraries]
plugin-android = { module = "com.android.tools.build:gradle", version.ref = "plugin-android" }
plugin-kotlin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "plugin-kotlin" }
plugin-kotlin-serialization = { module = "org.jetbrains.kotlin:kotlin-serialization", version.ref = "plugin-kotlin" }
plugin-gver = { module = "com.github.ben-manes:gradle-versions-plugin", version.ref = "plugin-gver" }
👉 kmm-production-sample/libs.versions.toml at aed57893bab7e88a0df50285196e942be6934bf8 · Kotlin/kmm-production-sample
👉 PosterBox/libs.versions.toml at 9e988e7fb62620a6913493aeecc51cb71aba3595 · JakeWharton/PosterBox
👉 awesome-kotlin/libs.versions.toml at ae83263c467da6f81bb1abc7536ab6af7bc5b4d0 · KotlinBy/awesome-kotlin
camelCase - kebab-case
[libraries]
gradlePlugin-android = { module = "com.android.tools.build:gradle", version = "4.2.2" }
gradlePlugin-kotlin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlinCompiler" }
gradlePlugin-dokka = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version = "1.6.20" }
👉 leakcanary/libs.versions.toml at f9462209ab553c76ad77673f7bebbd155fa76fa9 · square/leakcanary
その他
jsoup = { module = "org.jsoup:jsoup", version.ref = "1.15.3" }
でなく
jsoup = "org.jsoup:jsoup:1.15.3"
とも書ける。
👉 okhttp/libs.versions.toml at a94769c31ff18c5c768f790a92eab1de9b27fd83 · square/okhttp
あと、どこを選択するか、という問題もある。
com.google.firebase:firebase-bom
^^^^^^^^^^^^
com.google.firebase:firebase-*
^^^^^^^^^^
com.google.accompanist:accompanist-*
^^^^^^.^^^^^^^^^^^
com.google.accompanist:accompanist-imageloading-core
^^^^^^.^^^^^^^^^^^. ^^^^^^^^^^^^^^^^^
com.google.accompanist:accompanist-glide
^^^^^^.^^^^^^^^^^^. ^^^^^
com.google.android.libraries.places:places
^^^^^^.^^^^^^^. ^^^^^^
com.google.maps.android:*
^^^^^^. ^^^^^^^.^
com.google.maps.android:android-maps-utils
^^^^^^. ^^^^^^^. ^^^^^^^^^^
com.google.maps.android:maps-ktx
^^^^^^. ^^^^^^^.^^^^^^^^
👉 refreshVersions/google-version-alias-rules.txt at main · jmfayard/refreshVersions
■ まとめ
「.(ドット)」に置き換えられて読み込まれる build,gradle 側の考慮も必要になります。
「重複しない直感的に分かりやすい名前」で「kebab-case」にするのがスッキリしていいように思うけどみんなはどうしてますか?
👉 Jetpack Compose Samples でも使われている「Version catalog update plugin」で libs.versions.toml を書き出してみる
👉 Gradle Version Catalog への書き換えツールを作る【python】
👉 「⚠ This project uses Gradle Version Catalogs: this tool may not behave as expected.」→ 今現在、Gradle Version Catalog には gradle-versions-plugin が必須では?