最近というか、1年数ヶ月前にsbt 2に関してblogを書いた後に報告したものをざっくり振り返ってみます
これは2025のScalaアドベントカレンダーの記事です。
sbt 1も2も両方含みます。25個もありますね。
bug扱いではなかったものも含めて、一応報告したもの全部書きます。
https://github.com/sbt/sbt/issues/7774
sbt 2でbuild.sbt内部でinline def定義してそれを以下のように呼び出すとエラー。
特に重要じゃない扱いで修正予定なしでclose
inline def inlineDef: Int = 2 TaskKey[Int]("x") := inlineDef
https://github.com/sbt/sbt/issues/7777
sbt 2でファイル名によってbuildファイルのcompile成功するかどうか変わる、というだいぶ不思議エラー。
このblog書いてる時点でまだ未解決。
https://github.com/sbt/sbt/issues/7873
sbt 2のどこか?がスレッドセーフではなくて確率的に死ぬ。
実はsbt自体というよりScala 3自体のbugだったらしい?修正済。
https://github.com/sbt/sbt/issues/8017
sbtにはChrome Traceのjson吐き出す機能があるが、他のリファクタのタイミングでバグっていた問題。修正済。
https://github.com/sbt/sbt/issues/8150
sbt 1で、何かパフォーマンス改善しようとして明らかなbug入れたらしくNullPointerException出る。
すぐ実質revertして修正された。
https://github.com/sbt/sbt/issues/8198
sbt 2で、他に特別なことを何もしてないのに、reloadするだけでpluginのloadに失敗する問題。修正済
https://github.com/sbt/sbt/issues/8220
「 @nowarn アノテーションついてるけど、このアノテーションなんの警告も抑制してないから意味ないぞ!」
と、特定のパターンで怒られるというもの。
ユーザーが書いた @nowarn アノテーションではなく、sbtがmacroで生成するTreeに関して発生するパターンで、またsbt 1と2のcross buildが関係したり、状況がややこしかった。修正済
https://github.com/sbt/sbt/issues/8241
Flag -classpath set repeatedly という警告がsbtで出る。Scala 3側のbug扱いということでsbt側では何もせずclose
https://github.com/sbt/sbt/issues/8242
sbt 2での set コマンドのbug。
sbtのshellは set key := value のように、任意のsettingやtaskの値の設定や変更(つまりbuild.sbtの settings( に渡すようなものほぼ全部)、を動的に設定できる。
一度setでエラーだった時に、次の関係ない場合にもエラーが間違って引き継がれて表示されてしまうbug。
修正済。
https://github.com/sbt/sbt/issues/8248
sbt 2において、複数のsub projectでnameが同じだとload時点でエラーになる。
「仕様として禁止でいいのでは?」
という話が出ていて、それはそう、という気もするし、とはいえじゃあなんでnameとは別にidがあるんだろう、idを使えばいいのでは?という気もするが、どうするか・・・
https://github.com/sbt/sbt/issues/8255
sbt 2において --= や -= だけ微妙にバグっていた。修正済
https://github.com/sbt/sbt/issues/8262
sbt 2から、今まで外部のpluginだったProjectMatrixが組み込まれた。
組み込んだのが割と昔だったので、sbt 1用のpluginに追加されてる機能が、sbt 2側に含まれてない。
bugというよりは、機能追加要求的なもの。
https://github.com/sbt/sbt/issues/8263
sbt 2において、forkをtrueにした場合で、特定のJDKのversionの場合に、test失敗したのにsbtのtask自体が失敗にならない、というbug。
sbt 2からfork時の通信のシリアライズにgoogleのgson使うようになったらしいが、Throwableのシリアライズを独自に調整しないといけなかったらしい。
修正済
https://github.com/sbt/sbt/issues/8278
特定のversionのsbt 1.xのlauncherでsbt 0.13.xを立ち上げようとするとエラーになるbug。
sbt本体というよりsbtのlauncherを色々とリファクタやupdateした影響でバグったらしい。
修正済
https://github.com/sbt/sbt/issues/8294
Scala 2.13.17が出る前に、最新のScala 2.13.17のnightlyでsbt consoleが動かなくなる、というbug報告。
sbtとscala本体のREPLは、両方ともjlineを使っているが、特にforkなどがされてないので、実質互換あるversionに揃えないといけない、という残念制約がある。
直接的なきっかけはScala 2本体がjlineのversionをあげたこと。
sbt側に報告したが、結局Scala本体側のjline updateがrevertされた。
https://github.com/sbt/sbt/issues/8297
sbt new がsbt 2で動かないというもの。
そもそもgiter8側の対応が必要だったり(ある程度それ自分がやった)、さらに新しいgiter8を参照する変更がsbt 2側に必要だった。
修正済
https://github.com/sbt/sbt/issues/8307
sbtのpluginのcross build時のエラー。単に1行matchのcaseが足りてなかった。
似たような変更箇所が複数あるというか、sbt 1側と2側の両方必要でややこしい。
https://github.com/sbt/sbt/issues/8326
main側のbugではなく、sbt自体のproperty based testの一部がまれに失敗する。という報告。
適切な直し方がよくわからないのでひとまずbug報告だけした。
main側直すべきなのかtest側直すべきなのか、両方か・・・?
これ書いてる時点でまだ未解決
https://github.com/sbt/sbt/issues/8328
sbt 2において、微妙に依存してるsbt自体やScalaの細かいversionの違いによってerrorが出る、というbug報告。
sbt自体のClassLoaderやclasspath関連の問題か・・・?
https://github.com/sbt/sbt/issues/8334
sbt 2の問題。
これもsbt自体のClassLoaderやclasspath関連の問題?
sbt 2自体が直接依存してるライブラリ(例えばgsonとか)、の一部?の別のversionを libraryDependencies に追加しても、forkしたtest時に、 libraryDependencies の方ではなくsbtが依存してるversionのものが使われてしまう、というもの
https://github.com/sbt/sbt/issues/8335
sbt 2において
Test / fork := true
の時に標準出力、つまり println しても何も表示されない
https://github.com/sbt/sbt/issues/8337
sbt 2において以下のようにTask定義内部にcase class定義して使うとエラーになる。というもの。
こんなことできなくても別の場所に定義すればいいでしょ???という話になって、まぁそれはそう、とも思うが、一応sbt 1ではエラーではなかったので、報告するだけした。
val a = taskKey[Int]("") a := { case class B(c: Int) B(2).c }
https://github.com/sbt/sbt/issues/8340
sbt 2で(testのfork時に) java.util.ServiceLoader が動かなかった。修正済
https://github.com/sbt/sbt/issues/8380
sbt 2で、shellの履歴を保存するファイルの場所が、Scala versionを切り替えただけで変わってしまって履歴が共有されないというもの。
(履歴保存してるのは、それを活用出来る機能がsbtには色々あるのだが、その説明は省略)
修正済。
https://github.com/sbt/sbt/issues/8414
2025年10月に
「今までの最小よりさらにスペックが若干低かったり制約多いけれど、単位時間あたりの料金が安い」
ubuntu-slimというものがgithub actionsに追加された。
それでsbtが動かない。
報告してから見つけて追記したが、どうやらgithub actions側のbugっぽい雰囲気。
sbt側は何もしなくてもそのうち直るかも?