最近自分がsbtに報告したbugまとめ

最近というか、1年数ヶ月前にsbt 2に関してblogを書いた後に報告したものをざっくり振り返ってみます

xuwei-k.hatenablog.com

これは2025のScalaアドベントカレンダーの記事です。

qiita.com

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側は何もしなくてもそのうち直るかも?

github.blog

https://github.com/actions/runner-images/issues/13401