Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

sbt 2

sbt 2

Scalaわいわい勉強会で発表したsbt 2のスライド
https://scala-tokyo.connpass.com/event/371493

Avatar for kenji yoshida

kenji yoshida

November 27, 2025
Tweet

More Decks by kenji yoshida

Other Decks in Programming

Transcript

  1. Scala Days 2025 での @eed3si9n さんの発表スライド Skip to next slide

    You can skip to the next slide in 3 Ad Skip to next slide You can skip to the next slide in 3 Ad Skip to next slide You can skip to the next slide in 3 Ad Skip to next slide You can skip to the next slide in 3 Ad 4 / 57
  2. sbt とは それなりにデファクトスタンダード 使っているScala のライブラリのGitHub 見にいくと、体感8 〜9 割sbt でbuild されてる

    eed3si9n さんの発表資料にもあるが、2023 や2024 年の調査でも 大体そのくらい "Scala CLI" や Mill などの他のツールもある https://scala-cli.virtuslab.org/ https://mill-build.org/mill/index.html 9 / 57
  3. 歴史 2009 年8 月 GitHub で辿れる最初のコミット? 途中省略 2011 年6 月

    0.10.0 リリース 2011 年9 月 0.11.0 リリース 2012 年8 月 0.12.0 リリース 2013 年8 月 0.13.0 リリース 2017 年8 月 1.0.0 リリース 2025 年11 月の2 系の最新は2.0.0-RC7 12 / 57
  4. 重要な前提知識 sbt 自体は大半のライブラリと異なり複数のscala version でcross build されていない sbt 1 はScala

    2.12 言い換えるとsbt 1 のbuild ファイルはScala 2.13 や3 で書けな い 16 / 57
  5. 重要な前提知識 あくまでsbt 自体やplugin を作る時のversion で あって、sbt 1 自体はScala 3 や2.13

    のbuild が可 能 初心者にとってややこしいポイント sbt 2 がずっとリリースされないからScala 2.12 のメンテがずっと続けられてる側面がある? 17 / 57
  6. sbt 2 の主な変更点 Scala 2.12 から3 plugin をbuild し直さないと互換ない test

    のtask の変更 デフォルトでtask がcache される task のcache のための変更 common settings などの新機能 18 / 57
  7. Scala 2.12 から3 おそらく一番重要な変更の1 つ 基本的にbuild ファイルを全てScala 3 で書く必要 がある

    build ファイルとは " なんとか.sbt" と "project/ なんとか.scala" の全部 新機能でワイワイする前に、これとplugin の件含 めて頑張って移行しないといけない 19 / 57
  8. plugin をbuild し直さないと 互換ない 1.0.0 が出た2017 年8 月頃にpublish され、その後 8

    年以上放置されたplugin でも、今も使えていた場 合があった メンテされてないsbt plugin に依存してないか? sbt 2 向けにpublish されてるか?されそうか?を チェック 20 / 57
  9. 2025 年11 月現在で 未対応なpluign 例 頑張ってる、あるいはpull req 出てるのでそのうち対 応されそう playframework

    本体はまだだけど、関連plugin は既に対応済なもの多数 mima sbt-javaagent 23 / 57
  10. test のcache test 結果もcompile 結果と同様にremote cache 可能になった gRPC 対応、Bazel 互換

    test 結果というか、testQuick で実行するか判断するための情 報、のcache もちろんremote cache で共有するには追加の設定 が必要 remote ではなく同じマシン上で複数同じproject をgit checkout しても共有される可能性 28 / 57
  11. test のcache うまく設定すればCI で影響あるtest だけ実行にな ってCI 時間短縮??? どの程度うまくいくのかは未知 雑にやるなら "HOME/.cache/sbt"

    を保存するだ けでもいけるが、それはアリなのか良くわかってな い このpath はLinux の場合でOS 毎に異なる 29 / 57
  12. VirtualFile 関連 sbt 1 から存在していたがsbt 2 で使われる箇所が 増えた fileConverter でjava.nio.file.Path

    と相互 変換可能 sbt.Keys 内部のfileConverter 定義 FileConverter の型定義 34 / 57
  13. clean タスクで全てが clean されなくなる!? デフォルトでproject 毎のtarget 以外の場所に cache されるため Mac

    なら $HOME/Library/Caches/sbt Linux なら $HOME/.cache/sbt それ含めて全部をclean したい場合はcleanFull つい数日前に実装された 35 / 57
  14. commons settings multi project の場合のみ関係ある話 project 2 つ以上、ということ top level

    に設定を書いた場合の挙動が変わる build file 自体のcompile error にはならない ので注意 36 / 57
  15. commons settings top level に設定を書いた場合 sbt 1 まで: root に対する設定

    sbt 2 から: 全てのsub project に読み込まれる 設定 37 / 57
  16. sbtn がデフォルトに Graal で作られていてJVM より起動がはやい scala-native ではない JVM のclient というか今までのlauncher

    のjar も 引き続き提供される sbt 自体が全部Graal になるのではなくclient 詳細割愛するがsbt にはserver とclient という概念がある 38 / 57
  17. ivy での依存解決機能が完全に 消えてcoursier のみに 結構前から既にデフォルトでcoursier だった sbt 1 の途中 なぜかivy

    自体の依存はsbt 自体に少し残ってるが ivy の方が遅いなど色々微妙で、あえてivy 使ってる 人ほぼいないはずで影響少ないはず 40 / 57
  18. その他色々な変更や非互換 js やnative の %%% は %% で済むらしい? まだjs やnative

    のplugin がリリースされてなくて実質試せない が build ファイル変更した時のデフォルトの挙動が reload になる sbt query という新機能 44 / 57
  19. sbt 自体のbuild に使う Scala 3 のversion とJDK lazy val 実装でsun.misc.Unsafe

    使っててJDK 25 以降警告出る Scala 3.0 から3.7 Scala 2 はlazy val 実装にはUnsafe 使ってない sbt は一旦無理やり抑制する引数渡すようにしたっぽいが JDK 25 での警告は他にも JEP472 unix domain socket 使うためのコード部分 49 / 57
  20. sbt 自体のbuild に使う Scala 3 のversion とJDK もうすぐScala 3.8 出るが?

    いま3.8.0-RC2 Scala 3.8 はJDK 17 以上必須になる予定 50 / 57
  21. RC と今後の互換 sbt 2 のRC 使ってpublish したplugin はRC ではな いsbt

    2 でも互換を保つ予定 bug 修正したり新機能は入るが、もう大幅な互換壊 す変更は入らないはず 53 / 57