コマンド

コマンドは、システム・レベルでの sbt の構成要素で、ユーザや IDE とのやり取りを捕捉する。

便宜的に、各コマンドは State => State への関数だと考えることができる。 sbt において状態 (state) は以下を表す。

  1. ビルド構造 (build.sbt など)
  2. ディスク (ソースコード、JAR 成果物など)

そのため、コマンドは通常ビルド構造もしくはディスクを変更する。例えば、set コマンドはセッティングを適用してビルド構造を変更する。

> set name := "foo"

act コマンドは、compile のようなタスクをコマンドに持ち上げる:

> compile

コンパイルはディスクからの読み込みを行い、アウトプットをディスクに書き込むか画面にエラーメッセージを表示する。

コマンドは逐次処理される

状態は 1つしか存在しないものなので、コマンドは 1つづつ実行されるという特徴がある。

command

一部例外もあるが、基本的にコマンドは逐次実行される。メンタルモデルとしては、コマンドはカフェで注文を受け取るレジ係で、注文の順番に処理が行われると考えることができる。

タスクは並列実行される

前述の通り、act コマンドはタスクをコマンドのレベルに持ち上げる。その際に act コマンドは、集約されたサブプロジェクトにタスクを転送して、独立したタスクを並列実装する。

同様に、セッション起動時に実行される reload コマンドはセッティングを並列に初期化する。

act

sbt server の役割

sbt server は、コマンドラインもしくは Build Server Protocol と呼ばれるネットワーク API 経由からコマンドを受け取ることができるサービスだ。この機構によって、ビルドユーザと IDE が同一の sbt セッションを共有することができる。