Skip to content
Latchkey

sbt vs Maven: Scala CIに適したbuildツールはどちら?

sbtは高速なインクリメンタルコンパイルを備えたScalaネイティブのbuildツールで、Mavenは規約駆動のJVM標準です。

sbt (the Scala Build Tool) はScala DSL、対話的なshell、Scala向けにチューニングされたZincベースのインクリメンタルコンパイルを提供します。Mavenは宣言的なXMLと規約を用い、広範なJVMエコシステムサポートとScala向けpluginを備えています。

sbtMaven
設定Scala DSL (build.sbt)XML (pom.xml)、宣言的
インクリメンタルコンパイル強力 (Zinc)限定的 (plugin経由)
Scalaへの焦点ネイティブscala-maven-plugin経由
対話的shellあり (sbt console)なし
学習曲線高い (Scala以外のdev向け)低い

CIにおいて

sbtのZincインクリメンタルコンパイラとScalaを意識したtoolingは、Scalaの多いプロジェクトにとって自然な選択であり、温まったインクリメンタル状態はローカルのループを高速化できます。使い捨てのCI runnerでは、インクリメンタルの利点の多くは、実行間でコンパイラ出力をcacheすることに依存します。Mavenはよりシンプルで予測しやすく、複数言語のJVMスタックとクリーンに統合され、既に知っているチームにとって扱いやすいです。

CIでcacheする

sbtではIvy/Coursierのcacheとtarget/のbuild出力を、Mavenでは~/.m2/repositoryを、build定義をキーにしてcacheしましょう。CI実行間でインクリメンタルコンパイル状態を維持することが、sbtが速度の優位性を取り戻す場所です。

結論

ネイティブなtoolingと高速なインクリメンタルコンパイルを求めるScala優先のプロジェクト: sbt。混在したJVMスタック、またはMavenの規約とシンプルさを重視するチーム: Maven。どちらでも依存関係とbuild状態をcacheしてCIを高速に保ちましょう。

関連ガイド