1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Android]GroovyからKTSに移行によるメリデメを調査

Posted at

##はじめに
Gradle Plugin4.0からKTSのサポートがあります。
KTSに移行してみて、個人的に調べたり感じたりしたメリデメのお話です。

##メリット
###1. コンパイルエラーを吐いてくれる
これが、一番のメリットな気はします。
書いていて感動しました。
Groovyは動的型付けであるのに対して、みんな大好きKotlinは静的型付けなので実現できます。
今までは、Syncして初めて文法ミスなどに気づけていましたが、これで書きながらミスに気づくことが出来るように。
image.png

###2. メソッド引数の補完が効く。
途中まで気づかなかったが、地味にありがたい。

↓Groovyの時はなかった。
image.png

###3. 良く分からんGroovyの文法を調べなくても良い
正直、Groovyは適当に貼り付けたら動く感じだと思ってます。
なので、そこまで文法で困ることはないもののKotlinの方がなじみがあってよいことはあるかなと。

実際、Groovyは ()(=メソッド呼び出し)や = (代入)の省略が多いですし、対してKotlinはメソッド呼び出しなので可読性は移行したほうが高くなりますね。

groovy
task clean(type: Delete) {
    delete rootProject.buildDir
}
kts
tasks.create("clean", type = Delete::class) {
     delete(rootProject.buildDir)
}

###4. Groovyのファイルとの共存が可能なので、移行が段階的に出来る
これは、KTS自体のメリットではないのですが、もし移行する決定をした時、全ファイルを一気にビルド通すみたいな面倒なことをしなくて済みます。

###5. IDEとの相性が良い
Ctr + speceでブロック内で書けるプロパティのサジェスチョンを出すことが出来ます。
image.png

###6. コードジャンプできる
Groovyでは、extで定義したプロパティにコードジャンプできませんでしたよね。

方法としては、ルート直下にbuildSrcディレクトリを作成します。
この中に書かれたスクリプトは、projectスコープで参照可能になります。

空のsettings.gradle.kts と KotlinDSLを使えるようにした build.gradle.ktsをその中に定義します。

build.gradle.kts
plugins {
   "kotlin-dsl"
}

repositories {
   jcenter()
}

buildSrc/src/main/kotlin/Dep.kt となるようにディレクトリとファイルを作成します。

Deps.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"
    }
}
build.gradle.kts
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. 型がある
エラーが少なくなる!

###8. 色鮮やかに!
全体的に見やすくなってますね。
image.png

##デメリット
特にないかなと思っていますが、挙げるとすれば・・・

###1. コード補完とコンパイルチェックが遅いかも
(手元の環境限定かもしれないが)
###2. ビルドが遅くなる場合がある
(らしい)
###3. Kotlinでどうかけばいいのか結局調べる・・
少しの手間ですが、プロパティ名が変わってなどGroovyで書いてたものをKotlinで書く場合どうするんだろう・・となります。

まぁ、ドキュメントを見れば済む話ですが。
最初はやや大変かなと思います。

##おわりに
おまけとして今回使うであろうショートカットを添えておきます。

ファイル名の変更は、shift + F6
置換は、Ctr + R

##参考
https://www.youtube.com/watch?v=_s-0MbA5Gvw&t=1543s

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?