sbtn 便利かも

sbt 1.4.0 から sbtn という機能が追加されました。

https://eed3si9n.com/sbt-1.4.0-beta

Native thin client sbt 1.4.0 adds an official native thin client called sbtn that supports all tasks. > https://github.com/sbt/sbtn-dist/releases/tag/v1.4.0-RC2

This lets you run sbt tasks from the system shell as:

$ sbtn compile

$ sbtn shutdown

The native thin client will run sbt (server) as a daemon, which avoids the JVM > spinup and loading time for the second call onwards. This could an option if you > would like to use sbt from the system shell such as Zsh and Fish.

Remember to call sbtn shutdown when you're done!

Later on, sbt script will also support --client option to run the native thin client:

$ sbt --client compile

$ sbt --client shutdown

#5620 by @eatkins

sbtn 一度起動すると sbt をデーモンとして常駐させ、以降は sbt を起動するのではなくすでに起動している sbt に接続しに行くため起動時間が短縮されます。

emacs 使ってる人には emacsclient ですって言えば通じそう。あと sbt と同じ Scala のビルドツールである mill も似たようなことやってますよね。mill 最近使い始めたばかりでよく知らないけど。

sbt は起動が遅いので対話シェルを起動させておいてそれを利用するのが普通でしたが、sbtn によってシェルを起動しっぱなしにする必要がなくなります。私は気づくと tmux のウィンドウが無限に開いていて、sbt 起動してるのはどこのウィンドウだっけ??と探して回るのを毎日やっているのですが、sbtn を使うと今いる window でコマンド打てばいいのでそれがなくなりそうです。

あと他のシェルスクリプトとの連携がしやすくなるのも良いですね。今までは

#!/bin/sh
sbt compile
set_up_database
sbt test
tear_down_database

みたいなスクリプトを書くのは sbt の起動が遅いので辛く、シェルスクリプト側の処理を sbt の方に組み込むことになり、sbt 職人が build.sbt に

lazy val setUpDatabase = taskKey[Unit]("setup_database...")
lazy val tearDownDatabase = taskKey[Unit]("teardown_database...")
...

とか書いてドヤッって感じだったんですが、sbtn を使えば

#!/bin/sh
sbtn compile
set_up_database
sbtn test
tear_down_database

でもう十分ですね。build.sbtのダイエットができそうです。

追記

  • project/build.properties のバージョンを上げるのに加えてsbtコマンドのバージョンも 1.4 に上げましょう。
  • sbtnでPlayのプロジェクトをrunするとプロジェクトは起動するけれどsbtn側で標準入力を受け取れないっぽい。(Playプロジェクトのログを受け取る前にデタッチされてそう?)