sbt
開発元 | Scala Center |
---|---|
最新版 |
1.9.4
/ 2023年8月25日 [1] |
リポジトリ | |
プログラミング 言語 | Scala |
対応OS | Cross-platform |
プラットフォーム | Java |
種別 | ビルド自動化 |
ライセンス | BSD License |
公式サイト |
www |
sbtは、ScalaおよびJavaのためのオープンソースのビルドツールである。JavaのMavenやAntに相当するツールである。
主な機能は以下の通りである。
- Scalaのコードのネイティブサポートと、さまざまなScalaのテストフレームワークとの統合機能
- 継続的コンパイル、継続的テスト、継続的開発の機能
- インクリメンタルなテストとコンパイルの機能(変更を加えたソースコードのみが再コンパイルされる、コードの変更の影響を受けるテストのみが再実行されるなど)
- ビルドの設定は、ScalaのDSLを用いて記述する
- Apache Maven および Apache Ivy 形式のリポジトリをサポートする Coursier[2] を使用した依存管理。かつては Coursier ではなく Apache Ivy だった[3]。
- 高速なイテレーションとデバッグのためにScalaインタプリタと統合されている
- Java/Scalaプロジェクトの混在をサポート
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 がサポートされている。
関連項目
[編集]出典
[編集]- ^ Releases · sbt/sbt
- ^ Overview · Coursier
- ^ sbt Reference Manual — sbt 1.3.x releases
- ^ Public repositories hosted on github which mention sbt
- ^ Getting started for Lift
- ^ a b “Zinc and Incremental Compilation”. typesafe's blog (13 August 2012). 22 August 2012閲覧。
- ^ Goldin. “sbt Scala Build Tool”. 7 May 2012閲覧。
- ^ “Scala 2.9.0 final” (12 May 2011). 22 August 2012閲覧。
- ^ “Lightbend transfers ownership of sbt to the Scala Center”. scala-lang.org. 4 September 2023閲覧。
- ^ “sbt Reference Manual — Frequently Asked Questions”. www.scala-sbt.org. 2019年6月8日閲覧。
- ^ sbt: .sbt build definition
- ^ “Plugins”. sbt. 17 October 2014閲覧。
- ^ “sbt Community Plugins”. 17 October 2014閲覧。