##はじめに
Gradle Plugin4.0からKTSのサポートがあります。
KTSに移行してみて、個人的に調べたり感じたりしたメリデメのお話です。
##メリット
###1. コンパイルエラーを吐いてくれる
これが、一番のメリットな気はします。
書いていて感動しました。
Groovyは動的型付けであるのに対して、みんな大好きKotlinは静的型付けなので実現できます。
今までは、Syncして初めて文法ミスなどに気づけていましたが、これで書きながらミスに気づくことが出来るように。
###2. メソッド引数の補完が効く。
途中まで気づかなかったが、地味にありがたい。
###3. 良く分からんGroovyの文法を調べなくても良い
正直、Groovyは適当に貼り付けたら動く感じだと思ってます。
なので、そこまで文法で困ることはないもののKotlinの方がなじみがあってよいことはあるかなと。
実際、Groovyは ()
(=メソッド呼び出し)や =
(代入)の省略が多いですし、対してKotlinはメソッド呼び出しなので可読性は移行したほうが高くなりますね。
task clean(type: Delete) {
delete rootProject.buildDir
}
tasks.create("clean", type = Delete::class) {
delete(rootProject.buildDir)
}
###4. Groovyのファイルとの共存が可能なので、移行が段階的に出来る
これは、KTS自体のメリットではないのですが、もし移行する決定をした時、全ファイルを一気にビルド通すみたいな面倒なことをしなくて済みます。
###5. IDEとの相性が良い
Ctr + speceでブロック内で書けるプロパティのサジェスチョンを出すことが出来ます。
###6. コードジャンプできる
Groovyでは、extで定義したプロパティにコードジャンプできませんでしたよね。
方法としては、ルート直下にbuildSrc
ディレクトリを作成します。
この中に書かれたスクリプトは、projectスコープで参照可能になります。
空のsettings.gradle.kts
と KotlinDSLを使えるようにした build.gradle.kts
をその中に定義します。
plugins {
"kotlin-dsl"
}
repositories {
jcenter()
}
buildSrc/src/main/kotlin/Dep.kt
となるようにディレクトリとファイルを作成します。
object Deps {
object AndroidX {
val core = "AndroidX.core:core-ktx:1.7.0"
val compat = "AndroidX.appcompat:appcompat:1.4.1"
val junit = "AndroidX.test.ext:junit:junit:junit:1.1.3"
val constraintLayout = "AndroidX.constraintlayout:2.1.3"
}
object Test {
val espresso = "AndroidX.test.espresso:espresso-core:3.4.0"
}
object Google {
val material = "com.google.android.material:material:1.5.0"
}
object Junit {
val junit = "junit:junit:4.13.2"
}
}
dependencies {
implementation(Deps.AndroidX.core)
implementation(Deps.AndroidX.compat)
implementation(Deps.Google.material)
implementation(Deps.AndroidX.constraintLayout)
testImplementation(Deps.Junit.junit)
androidTestImplementation(Deps.AndroidX.junit)
androidTestImplementation(Deps.Test.espresso)
}
###7. 型がある
エラーが少なくなる!
##デメリット
特にないかなと思っていますが、挙げるとすれば・・・
###1. コード補完とコンパイルチェックが遅いかも
(手元の環境限定かもしれないが)
###2. ビルドが遅くなる場合がある
(らしい)
###3. Kotlinでどうかけばいいのか結局調べる・・
少しの手間ですが、プロパティ名が変わってなどGroovyで書いてたものをKotlinで書く場合どうするんだろう・・となります。
まぁ、ドキュメントを見れば済む話ですが。
最初はやや大変かなと思います。
##おわりに
おまけとして今回使うであろうショートカットを添えておきます。
ファイル名の変更は、shift + F6
置換は、Ctr + R
##参考
https://www.youtube.com/watch?v=_s-0MbA5Gvw&t=1543s