Sbt

sbtは、ScalaおよびJavaのためのオープンソースのビルドツールである。JavaのMavenやAntに相当するツールである。
主な機能は以下の通りである。
sbtはScalaコミュニティにおける"デファクト"なビルドツールであり、Lift web frameworkやPlay Frameworkでも使用されている。
sbtを開発しているは、sbtを「Scalaのプロジェクトを構築するのに間違いなく最適なツールであり、インクリメンタル・コンパイルとインタラクティブ・シェルが最も優れたツールである」と述べている。インクリメンタル・コンパイルモードに入ると、Scalaコンパイラは1回だけ初期化され、その後のスタートアップのコストを削減してくれ、ソースファイルの変更を追跡することで、その変更が影響する依存関係のみが再コンパイルされる。インタラクティブ・シェルは、ビルドの設定をその場で修正することを可能にし、プロジェクトに関係するすべてのクラスファイルとScala REPLに読み込んでくれる。インクリメンタル・コンパイルが人気になったことで、Typesafeはこの機能をZincという独立したコンポーネントの形で抽出するようになった。
sbtのプロセスAPIがScala 2.9で採用されたとき、すでにScala標準ライブラリにフィードバックされていた。
歴史.
sbtは2008年12月18日に初めて、オリジナルの作者Mark Harrahによって公式に発表された。2011年より Lightbend, Inc. が管理している。
当初は"Simple Build Tool"の略であるとされていたが、現在は単に"sbt"であって略称とは考えられていない。
ビルドファイル.
sbtのビルドはcodice_1ファイルを用いて定義される。以下は、codice_2のビルド定義の一例である。
val scalaTest = "org.scalatest" %% "scalatest" % "3.0.5"
val akkaVersion = "2.4.2"
val akkaActor = "com.typesafe.akka" %% "akka-actor" % akkaVersion
val akkaCluster = "com.typesafe.akka" %% "akka-cluster" % akkaVersion
// このビルドで使用する Scala のバージョンを 2.12.8 に設定する
ThisBuild / scalaVersion := "2.12.8"
ThisBuild / version := "0.1.0-SNAPSHOT"
ThisBuild / organization := "com.example"
lazy val root = (project in file("."))
 .aggregate(helloCore)
 .dependsOn(helloCore)
 .settings(
 name := "Hello",
 // テストのために、依存関係を1つ追加する。
 libraryDependencies += scalaTest % Test
lazy val helloCore = (project in file("core"))
 .settings(
 name := "Hello Core",
 libraryDependencies += scalaTest % Test,
 // 複数の依存関係を追加する。
 libraryDependencies ++= Seq(akkaActor, akkaCluster)
使用例.
sbtは各ビルドコマンドごとに起動することもあるが、コマンド無しで実行した場合には、インタラクティブモードで起動することもできる。たとえば、現在のビルドのビルドプロダクトをクリーンするには、以下のコマンドを実行する。
$ sbt clean
複数のコマンドを同じ行で指定することもできる。"Foo"という名前のテストを実行し、その後にエクスポートしたjarを公開するには、以下のコマンドを実行する。
$ sbt "testOnly Foo" publish
拡張性と統合.
sbtの機能はプラグインアーキテクチャを利用して拡張することができる。コミュニティによるコントリビューションを受け入れるためのウェブサイトがセットアップされており、署名、パッケージング、高階、アーティファクトのリリース、ブログらデータベースなどの他のサービスへの接続、Androidプラットフォームへのデプロイなどの他の技術との統合といったさまざまな機能を提供している。
プロジェクトファイルを自動的に生成するプラグインが Eclipse 向けに提供されている。IntelliJ IDEA では、JetBrains 公式の Scala プラグインで sbt がサポートされている。