はじめに
sbt に再入門すべく、sbt に関して思い出した・調べた内容についてをまとめます。
内容についてはバージョン sbt-1.5.5 時点のものとなります。
sbt
sbt について
sbt は Scala のビルドツールです。
(Scala はJVM系のプログラミング言語です)
sbt は Scala のビルドツールではデファクトスタンダードなものだと思っています。1
他に Scala をビルドする手段としては以下があります。
- Mill を使う
- Java のビルドツール(gradle など)にプラグインを入れてビルドする
以上のような代替手段があり、それぞれメリット・デメリットはもありますが、
利用者目線からの sbt のもつ良いところは以下のような点だと思います。2
- Scala のビルドツールなのでサポートも厚く、
- OSSを含む多くのプロジェクトで利用されているので知識が豊富、
インストール
インストールには公式サイトからのファイルダウンロードや、パッケージマネージャーによるインストールが可能です。3
mac
sdkman を使う、もしくは homebrew からインストールして使うことができます。
brew install sbt
Windows
公式サイトからダウンロードすることが可能です。
https://www.scala-sbt.org/download.html
インストーラー(msi)形式、ZIP・TGZ 形式など複数あるのでお好みの方法で設定できます。
もしくは、Scoop や Chocolatey といったパッケージマネージャーからもインストールする方法もあります。
Linux
こちらも sdkman からのインストールが可能です。
もしくはパッケージマネージャーからもインストールすることができます。
(RedHat系の rpm や yum、debian/Ubuntu の apt など)
使い方
sbt の実行
sbt の実行方法について。
sbt を実行するには、以下の方法があります。
- sbt シェルで実行
- バッチモードで実行
sbt シェルで実行するとインタラクティブモードで実行し、
バッチモードは渡したサブコマンドを実行し、結果は標準出力で表示してくれるモードになります。
sbt シェルで実行するには sbt コマンドを引数なしで実行します。
この時に CLI 操作の形で sbt を実行していきます。
バッチモードは sbt コマンド実行時の引数に渡したサブコマンドを実行してくれます。
空白行区切りで複数のサブコマンドを渡すことも可能です。
サブコマンドの実行例は以下のようになります。
- コンパイル:
sbt compile
- 成果物の削除:
sbt clean
- テストの実行:
sbt test
- 特定のテストのみを実行:
sbt "testOnly package.Test"
- Main の実行:
sbt run
サブプロジェクトのタスクを実行したい場合は、以下のどちらかを実行します。
- タスクの前にプロジェクト名を指定
-
project
サブコマンドでサブプロジェクトに入ってからタスクを実行する
サブプロジェクトの指定するばあい
sbt <サブプロジェクト名>/test
sbt "project <サブプロジェクト名>" test
ビルド定義ファイル
sbt によるビルドを実行する際に、ビルド定義ファイルにプロジェクトビルドの設定を定義することができます。
使用する Scala のバージョン、ライブラリの依存関係や ビルド時の設定を定義することができます。
ビルド定義ファイルは build.sbt
というファイル名でプロジェクトに配置します。
build.sbt
の設定内容・設定項目は多くなるので今回は省略させてください。
ファイルの実装例としては以下のようなイメージになります。
name := "sbt15-sample"
version := "0.1"
scalaVersion := "3.0.0"
lazy val root = project
.in(file("."))
.settings(
name := "main",
scalaVersion := "3.0.0",
semanticdbEnabled := true,
scalacOptions ++= Seq("-explaintypes", "-Wunused"),
libraryDependencies ++= Seq(
// test
"org.scalatest" %% "scalatest" % "3.2.9" % Test,
// mockito
"org.mockito" % "mockito-core" % "3.9.0" % Test
)
)
コマンドエイリアスの定義
自分で sbt のサブコマンドを定義することも可能です。
build.sbt
に実行したいコマンドをまとめて、エイリアスコマンドから実行できるように設定できます。
私はフォーマットプラグインの scalafmt
で「すべてのファイルへのフォーマット」を一括で行いたいので、
以下のような定義を設定しています。
addCommandAlias(
"fmt",
"all scalafmtSbt scalafmt test:scalafmt"
)
sbt plugin
sbt に plugin を設定することができます。
plugin を設定することで、コマンドなどの機能拡張を行うことが可能になります。
project/plugin.sbt
に追加する plugin を追記し、読み込むことで plugin を使えるようになります。
例えば、Scala のソースファイル、設定ファイル build.sbt
をフォーマットしてくれる plugin である
scalafmt
を追加する場合は以下のようになります。
addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.4.3")