sbtを1.4にアップグレードすると、.bspという見慣れないディレクトリが作成されるようになったことに気づいた。
今更だけど、なんだっけ?と思って、sbt 1.4.0のリリースノートを見たらちゃんと書かれていた。
https://github.com/sbt/sbt/releases/tag/v1.4.0
このバージョンからBSP(Build Server Protocol)がサポートされ、sbtを起動すると.bsp/sbt.jsonというファイルが作られると書かれている。
なるほど
BSP(Build Server Protocol)とは?
https://build-server-protocol.github.io/
BSPは、Scala CenterとJetBrainsが策定した、IDEやエディタからビルドツールをコントロールし、ビルドやテスト、デバッグなどを実行するためのプロトコル。
このプロトコルの標準化により、共通のインタフェースに基づいて相互に実装すれば相互運用性が高まる、ということを目標にしている。IDEやエディタが個別にビルドツールごとの機能を個別にサポートしているとできることに差異が生まれたり、サポートの進捗が違ったりしてしまうが、この仕組みであればそのようなことが起こりにくくなる(起きないとは言えない)。
ちょうどマイクロソフトがプログラミング言語と、IDE/エディタを繋ぐためにLSP(Language Server Protocol)というプロトコルを策定したのと同じような関係にあり、LSPが主にコーディング時のサポートを目的としていたのに対し、BSPはビルドやテストをサポートする、という違いがある(上記のサイトにも、BSPは、'LSP-inspired'だと書かれている)。
sbt以外では、bloopというツールがBSPをサポートしている。
https://scalacenter.github.io/bloop/
使い方
詳しくはそれぞれの公式サイトを見た方がいいので、割愛する。
いずれにしても先にsbtをbsp用に立ち上げておく(
metalsの場合は事前に起動していなくても大丈夫とコメントで指摘いただきました。sbt -bsp)という手順が必要になるので、注意。
metals
https://scalameta.org/metals/blog/2020/11/06/sbt-BSP-support.html
IntelliJ
https://www.jetbrains.com/help/idea/bsp-support.html
バージョン管理の注意点
バージョン管理時の注意点として、.bsp/sbt.jsonはマシン固有のパス情報が入っているファイルなので、バージョン管理の対象するべきではない。しかし、sbt 1.4以降ではBSPを使うか否かに関わらず必ず作成される。
今後は、sbtを使うプロジェクトでは、.gitignoreに「.bsp/」を追加しておいた方が良い。
おわりに
まだScala界隈でしか使われていないBSPだけど、ひょっとしたらビルドツールを超えて普及していくかもしれない。