開発元 | Scala Center |
---|---|
最新版 |
1.9.4
/ 2023年8月25日 [1] |
リポジトリ | |
プログラミング 言語 | Scala |
対応OS | Cross-platform |
プラットフォーム | Java |
種別 | ビルド自動化 |
ライセンス | BSD License |
公式サイト |
www |
sbtは、ScalaおよびJavaのためのオープンソースのビルドツールである。JavaのMavenやAntに相当するツールである。
主な機能は以下の通りである。
sbtはScalaコミュニティにおけるデファクトなビルドツールであり[4]、Lift web framework[5]やPlay Frameworkでも使用されている。
かつてsbtを開発していたLightbend, Inc.は、sbtを「Scalaのプロジェクトを構築するのに間違いなく最適なツールであり、インクリメンタル・コンパイルとインタラクティブ・シェルが最も優れたツールである」と述べている[6]。インクリメンタル・コンパイルモードに入ると、Scalaコンパイラは1回だけ初期化され、その後のスタートアップのコストを削減してくれ、ソースファイルの変更を追跡することで、その変更が影響する依存関係のみが再コンパイルされる。インタラクティブ・シェルは、ビルドの設定をその場で修正することを可能にし、プロジェクトに関係するすべてのクラスファイルとScala REPLに読み込んでくれる[7]。インクリメンタル・コンパイルが人気になったことで、Typesafeはこの機能をZincという独立したコンポーネントの形で抽出するようになった[6]。
sbtのプロセスAPIがScala 2.9で採用されたとき、すでにScala標準ライブラリにフィードバックされていた[8]。
sbtは2008年12月18日に初めて、オリジナルの作者Mark Harrahによって公式に発表された。2011年~2023年6月は Lightbend, Inc. が管理していた。それ以降は Scala Center が管理している[9]。
当初は"Simple Build Tool"の略であるとされていたが、現在は単に"sbt"であって略称とは考えられていない[10]。
sbtのビルドは.sbt
ファイルを用いて定義される[11]。以下は、build.sbt
のビルド定義の一例である。
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の機能はプラグインアーキテクチャを利用して拡張することができる[12]。コミュニティによるコントリビューションを受け入れるためのウェブサイトがセットアップされており、署名、パッケージング、高階、アーティファクトのリリース、ブログらデータベースなどの他のサービスへの接続、Androidプラットフォームへのデプロイなどの他の技術との統合といったさまざまな機能を提供している[13]。
プロジェクトファイルを自動的に生成するプラグインが Eclipse 向けに提供されている。IntelliJ IDEA では、JetBrains 公式の Scala プラグインで sbt がサポートされている。