MetalsプロジェクトでBloopのCLIを活用する

以前Metalsユーザ向けのBloopの紹介記事を見かけたのですが、確かにVS CodeなどでMetalsを使っている場合、BloopやMetalsサーバが常にVS Codeの背後で起動しているのでターミナルでのコンパイルやテストの実行にもBloopのCLIを活用するには理に適っているかもしれません。

chris-kipp.io

というわけで少し試してみました。BloopのCLI自体はMacであればHomebrewでインストールできます。

$ brew install scalacenter/bloop/bloop

コンパイルしてみます。sbtと違って必ずプロジェクト名を指定しないといけないという点に注意してください(マルチプロジェクトでない場合でも)。プロジェクトの一覧は bloop projects で表示できます。テストコードをコンパイルする場合は プロジェクト名-test を指定します。また、-wオプションを付けるとソースディレクトリを監視してファイルの変更時に自動的に再コンパイル結果を表示してくれます。

# プロジェクトの一覧
$ bloop projects
sample
sample-test

# ソースコードのコンパイル
$ bloop compile sample

# テストコードのコンパイル
$ bloop compile sample-test

# 自動再コンパイル
$ bloop compile sample -w

テストを実行する場合は以下のようにします。特定のテストケースのみ実行することももちろん可能です。

# テストを実行
$ bloop test sample

# 特定のテストケースのみ実行
$ bloop test sample -o com.github.takezoe.sample.SampleTest

# ワイルドカードも使用可能
$ bloop test sample -o *SampleTest

同様にプログラムの実行も可能です。プロジェクト内に起動クラスが複数存在する場合は -m で実行するクラス名を指定します。また、引数を渡したい場合は -- に続けて指定します。

# プログラムを実行
$ bloop run sample

# 起動クラスを指定して実行
$ bloop run sample -m com.github.takezoe.sample.SampleApp

# 引数を指定
$ bloop run sample -- arg1 arg2
$ bloop run sample -m com.github.takezoe.sample.SampleApp -- arg1 arg2

より詳細な使い方やオプションについては以下のBloopのドキュメントを参照してください。

実際に試してみたところ、当たり前と言えば当たり前なのですが確かに速いです。ただ、これはそもそもMetalsでも同様ですが、ビルド時にsbtでコード生成している場合などは事前に一度sbtを走らせてからでないとビルドが通らなかったりなど、bloopコマンドで完全にsbtを置き換えることはできません。また、プログラムの実行やテストなどはMetalsのUI上で行うことでエディタ上でのデバッグも可能になるといったメリットもあります。BloopのCLIはあくまで補助ツールとして使うと良い感じだと思います。