Gradle vs sbt: CIにはどちらのJVM/Scalaビルドツールか?
Gradleはリモートcacheを備えた汎用のJVMビルドツール。sbtはScalaコンパイラ向けに調整されたインクリメンタルコンパイルを持つScalaネイティブなツールである。
Gradleは柔軟なJVMビルドツール (Groovy/Kotlin DSL) で、taskレベルのインクリメンタルビルドとローカル/リモートのbuild cacheを持ち、Java、Kotlin、Scalaで使える。sbtはScalaネイティブのビルドツールで、強力なインクリメンタルコンパイルとインタラクティブなシェルを持つ。
| Gradle | sbt | |
|---|---|---|
| 主要言語 | Java/Kotlin/Scala | Scala優先 |
| Config | Groovy/Kotlin DSL | Scala DSL (build.sbt) |
| インクリメンタルビルド | taskレベル | 強力 (Zincコンパイラ) |
| Build cache | ローカル + リモート | ローカル (インクリメンタル) |
| 最適な用途 | 混在JVM、ポリグロット | Scalaプロジェクト |
CIにおいて
Scala中心のプロジェクトでは、sbtのZincベースのインクリメンタルコンパイルは精密に調整されており、エコシステムもそれを前提とする。Gradleは混在JVM/ポリグロットビルドにより広く適した選択肢で、CI jobをまたいで共有されるリモートbuild cacheを提供する。これは大規模なマルチモジュールrepoで大きな高速化になる。Scala優先のコードベースにはsbt、リモートcacheで言語をまたいで1つのツールが欲しいならGradleを選ぶ。
cacheする
ビルドファイルをキーにして依存関係とビルドのcacheをcacheし、Gradleではリモートbuild cacheをCI jobをまたいで配線する。両方ともCI runnerで動く。cache missで依然として実行される手順を、高速なマネージドrunnerが短縮する。Scalaのコンパイルは重い。
結論
Scala優先のプロジェクト: 調整されたインクリメンタルコンパイルのためsbt。リモートcacheが欲しい混在JVM/ポリグロットビルド: Gradle。どちらでも依存関係とビルドをcacheする。Scalaのコンパイルは高速なrunnerから最も恩恵を受ける。