コマンド
コマンドは、システム・レベルでの sbt の構成要素で、ユーザや IDE とのやり取りを捕捉する。
便宜的に、各コマンドは State => State への関数だと考えることができる。 sbt において状態 (state) は以下を表す。
- ビルド構造 (
build.sbtなど) - ディスク (ソースコード、JAR 成果物など)
そのため、コマンドは通常ビルド構造もしくはディスクを変更する。例えば、set コマンドはセッティングを適用してビルド構造を変更する。
> set name := "foo"
act コマンドは、compile のようなタスクをコマンドに持ち上げる:
> compile
コンパイルはディスクからの読み込みを行い、アウトプットをディスクに書き込むか画面にエラーメッセージを表示する。
コマンドは逐次処理される
状態は 1つしか存在しないものなので、コマンドは 1つづつ実行されるという特徴がある。
一部例外もあるが、基本的にコマンドは逐次実行される。メンタルモデルとしては、コマンドはカフェで注文を受け取るレジ係で、注文の順番に処理が行われると考えることができる。
タスクは並列実行される
前述の通り、act コマンドはタスクをコマンドのレベルに持ち上げる。その際に act コマンドは、集約されたサブプロジェクトにタスクを転送して、独立したタスクを並列実装する。
同様に、セッション起動時に実行される reload コマンドはセッティングを並列に初期化する。
sbt server の役割
sbt server は、コマンドラインもしくは Build Server Protocol と呼ばれるネットワーク API 経由からコマンドを受け取ることができるサービスだ。この機構によって、ビルドユーザと IDE が同一の sbt セッションを共有することができる。