Magnolia Tech

いつもコードのことばかり考えている人のために。

sbt 1.4からサポートされたBSP(Build Server Protocol)について

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 CenterJetBrainsが策定した、IDEやエディタからビルドツールをコントロールし、ビルドやテスト、デバッグなどを実行するためのプロトコル

このプロトコルの標準化により、共通のインタフェースに基づいて相互に実装すれば相互運用性が高まる、ということを目標にしている。IDEやエディタが個別にビルドツールごとの機能を個別にサポートしているとできることに差異が生まれたり、サポートの進捗が違ったりしてしまうが、この仕組みであればそのようなことが起こりにくくなる(起きないとは言えない)。

ちょうどマイクロソフトプログラミング言語と、IDE/エディタを繋ぐためにLSP(Language Server Protocol)というプロトコルを策定したのと同じような関係にあり、LSPが主にコーディング時のサポートを目的としていたのに対し、BSPはビルドやテストをサポートする、という違いがある(上記のサイトにも、BSPは、'LSP-inspired'だと書かれている)。

sbt以外では、bloopというツールがBSPをサポートしている。

https://scalacenter.github.io/bloop/

使い方

詳しくはそれぞれの公式サイトを見た方がいいので、割愛する。

いずれにしても先にsbtをbsp用に立ち上げておく(sbt -bsp)という手順が必要になるので、注意。 metalsの場合は事前に起動していなくても大丈夫とコメントで指摘いただきました。

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だけど、ひょっとしたらビルドツールを超えて普及していくかもしれない。