Skip to content
Latchkey

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ネイティブのビルドツールで、強力なインクリメンタルコンパイルとインタラクティブなシェルを持つ。

Gradlesbt
主要言語Java/Kotlin/ScalaScala優先
ConfigGroovy/Kotlin DSLScala 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から最も恩恵を受ける。

関連ガイド