Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
sbt 2
Search
kenji yoshida
November 27, 2025
Programming
0
300
sbt 2
Scalaわいわい勉強会で発表したsbt 2のスライド
https://scala-tokyo.connpass.com/event/371493
kenji yoshida
November 27, 2025
Tweet
Share
More Decks by kenji yoshida
See All by kenji yoshida
数十万行のプロジェクトを Scala 2から3に完全移行した
xuwei_k
0
1.5k
Scalaプロジェクトの ビルド速度改善
xuwei_k
0
460
Scala-Matsuri-2023.pdf
xuwei_k
0
1.5k
WartremoverのScala 3対応
xuwei_k
0
190
アルプでのScala 3移⾏
xuwei_k
1
1.7k
ScalaでgRPC
xuwei_k
0
1.7k
scalaprops
xuwei_k
0
150
Other Decks in Programming
See All in Programming
Graviton と Nitro と私
maroon1st
0
110
令和最新版Android Studioで化石デバイス向けアプリを作る
arkw
0
410
Go コードベースの構成と AI コンテキスト定義
andpad
0
130
まだ間に合う!Claude Code元年をふりかえる
nogu66
5
850
Python札幌 LT資料
t3tra
3
450
エディターってAIで操作できるんだぜ
kis9a
0
740
Cap'n Webについて
yusukebe
0
140
ローターアクトEクラブ アメリカンナイト:川端 柚菜 氏(Japan O.K. ローターアクトEクラブ 会長):2720 Japan O.K. ロータリーEクラブ2025年12月1日卓話
2720japanoke
0
730
Integrating WordPress and Symfony
alexandresalome
0
160
愛される翻訳の秘訣
kishikawakatsumi
3
330
AIコーディングエージェント(Gemini)
kondai24
0
240
Tinkerbellから学ぶ、Podで DHCPをリッスンする手法
tomokon
0
130
Featured
See All Featured
Done Done
chrislema
186
16k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.3k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
70k
Six Lessons from altMBA
skipperchong
29
4.1k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.3k
Bash Introduction
62gerente
615
210k
GitHub's CSS Performance
jonrohan
1032
470k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Navigating Team Friction
lara
191
16k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Embracing the Ebb and Flow
colly
88
4.9k
Transcript
2 Scala わいわい勉強会 6 2025-11-27 1 / 57
X( 旧twitter) @xuwei_k GitHub @xuwei-k blog https://xuwei-k.hatenablog.com sbt のコミッターでもある おそらく2009
年くらいからScala やってる 2 / 57
sbt 公式ドキュメント まだ随時更新中でそこまで完璧ではない(?) sbt 2 変更一覧 1 から2 へのマイグレーション方法 3
/ 57
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
Scala Days 2025 での @eed3si9n さんの発表 https://www.youtube.com/watch? v=GM2ywMb4z7A 5 /
57
最近の自分の貢献 2024 年に書いたblog これ書いてから、同じような種類の貢献おそらく数 倍やってる 今日もpull req とbug 報告してた 6
/ 57
sbt とは https://github.com/sbt/sbt https://www.scala-sbt.org/ Scala 界隈で大昔からあるbuild tool 7 / 57
sbt とは 2025 年11 月現在、2 系の安定版のリリースはまだ 1 系が主流 8 /
57
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
sbt の開発 https://github.com/sbt/sbt/graphs/contributo @eed3si9n さんがずっと主要開発者 アメリカ住んでる日本人の方 最初の原作者は別の人 もう関わってない 10 /
57
sbt の開発 その他scalacenter の人など 自分はおそらく全体の総合コミット数だと10 位には 入ってる 直近頑張った期間に絞ると2 〜3 位になる
そもそもrepository 複数あって正確な集計難しい 11 / 57
歴史 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
実は最初は2008 年では? https://code.google.com/archive/p/simple- build-tool/source/default/commits?page=14
1.x の間は大体互換を保っている 1.0.0 が2017 年8 月 今は2025 年11 月 14
/ 57
1.0.0 のリリースから 8 年以上経過!? 15 / 57
重要な前提知識 sbt 自体は大半のライブラリと異なり複数のscala version でcross build されていない sbt 1 はScala
2.12 言い換えるとsbt 1 のbuild ファイルはScala 2.13 や3 で書けな い 16 / 57
重要な前提知識 あくまでsbt 自体やplugin を作る時のversion で あって、sbt 1 自体はScala 3 や2.13
のbuild が可 能 初心者にとってややこしいポイント sbt 2 がずっとリリースされないからScala 2.12 のメンテがずっと続けられてる側面がある? 17 / 57
sbt 2 の主な変更点 Scala 2.12 から3 plugin をbuild し直さないと互換ない test
のtask の変更 デフォルトでtask がcache される task のcache のための変更 common settings などの新機能 18 / 57
Scala 2.12 から3 おそらく一番重要な変更の1 つ 基本的にbuild ファイルを全てScala 3 で書く必要 がある
build ファイルとは " なんとか.sbt" と "project/ なんとか.scala" の全部 新機能でワイワイする前に、これとplugin の件含 めて頑張って移行しないといけない 19 / 57
plugin をbuild し直さないと 互換ない 1.0.0 が出た2017 年8 月頃にpublish され、その後 8
年以上放置されたplugin でも、今も使えていた場 合があった メンテされてないsbt plugin に依存してないか? sbt 2 向けにpublish されてるか?されそうか?を チェック 20 / 57
sbt 2 のplugin https://www.scala- sbt.org/2.x/docs/en/community- plugins.html https://github.com/sbt/sbt/wiki/sbt- 2.x-plugin-migration 21 /
57
sbt 2 のplugin 発表時点の2025 年11 月末でpublish されてるもの が60 個くらい https://github.com/xuwei-k/sbt-2-
plugins/blob/main/project/plugins.sbt xuwei-k が勝手に集めてる 22 / 57
2025 年11 月現在で 未対応なpluign 例 頑張ってる、あるいはpull req 出てるのでそのうち対 応されそう playframework
本体はまだだけど、関連plugin は既に対応済なもの多数 mima sbt-javaagent 23 / 57
まだあまり進んでない? scala-js scala-native scalapb 関連 sbt-updates 個人的にpull req 出してるが反応遅い 24
/ 57
test のtask の変更 test はtestQuick のalias になりました! 25 / 57
testQuick とは? sbt 1 以前から存在 前回失敗したか、新しく追加や変更してまだtest し てないものだけ実行 前回成功し、かつ変更されてないものはskip 26
/ 57
test のtask の変更 今まで通り必ず全部実行するにはtest ではなく testFull sbt 1 ではUnit だったのが値を返すようになった
テスト結果を使って何かする独自task 作るときに便利? 27 / 57
test のcache test 結果もcompile 結果と同様にremote cache 可能になった gRPC 対応、Bazel 互換
test 結果というか、testQuick で実行するか判断するための情 報、のcache もちろんremote cache で共有するには追加の設定 が必要 remote ではなく同じマシン上で複数同じproject をgit checkout しても共有される可能性 28 / 57
test のcache うまく設定すればCI で影響あるtest だけ実行にな ってCI 時間短縮??? どの程度うまくいくのかは未知 雑にやるなら "HOME/.cache/sbt"
を保存するだ けでもいけるが、それはアリなのか良くわかってな い このpath はLinux の場合でOS 毎に異なる 29 / 57
task のcache 任意のtask がデフォルトでcache される cache されていいのか?はtask 定義側の人間が考え る必要がある 言い換えるとtask
定義に副作用があるか? cache されたくない場合の記述方法が複数あり 30 / 57
任意のtask がデフォルトで cache される 結構攻めた変更だと思うので、慣れるまで、sbt 自 体やplugin が安定するまで、cache 関連の問題に遭 遇する可能性高い?
cache をclear する方法やcache 使わないで実行す る最低限の方法を把握しておく必要 31 / 57
cache されたくない 場合の記述方法 project/plugins.sbt にscalacOptions 指定で 一括無効化 taskKey 定義時にアノテーション アノテーションも複数ある
task の定義時に "Def.uncached" で囲う 32 / 57
task のcache のための変更 java.io.File の型がVirtualFile, VirtualFileRef, HashedVirtualFileRef な どになってる場合がよくある それらを使ってる場合は非互換変更
task 定義時にtype class のinstance 要求される 場合がある 33 / 57
VirtualFile 関連 sbt 1 から存在していたがsbt 2 で使われる箇所が 増えた fileConverter でjava.nio.file.Path
と相互 変換可能 sbt.Keys 内部のfileConverter 定義 FileConverter の型定義 34 / 57
clean タスクで全てが clean されなくなる!? デフォルトでproject 毎のtarget 以外の場所に cache されるため Mac
なら $HOME/Library/Caches/sbt Linux なら $HOME/.cache/sbt それ含めて全部をclean したい場合はcleanFull つい数日前に実装された 35 / 57
commons settings multi project の場合のみ関係ある話 project 2 つ以上、ということ top level
に設定を書いた場合の挙動が変わる build file 自体のcompile error にはならない ので注意 36 / 57
commons settings top level に設定を書いた場合 sbt 1 まで: root に対する設定
sbt 2 から: 全てのsub project に読み込まれる 設定 37 / 57
sbtn がデフォルトに Graal で作られていてJVM より起動がはやい scala-native ではない JVM のclient というか今までのlauncher
のjar も 引き続き提供される sbt 自体が全部Graal になるのではなくclient 詳細割愛するがsbt にはserver とclient という概念がある 38 / 57
sbtn がデフォルトに sbt 1 の時代から存在はしている 使われるかどうか?はある意味インストール方法や 起動方法によるが 引数の渡し方に微妙に制約があるので注意 39 /
57
ivy での依存解決機能が完全に 消えてcoursier のみに 結構前から既にデフォルトでcoursier だった sbt 1 の途中 なぜかivy
自体の依存はsbt 自体に少し残ってるが ivy の方が遅いなど色々微妙で、あえてivy 使ってる 人ほぼいないはずで影響少ないはず 40 / 57
その他色々な変更や非互換 target ディレクトリの場所の変更 成果物の場所が変わるので、jar などを生成した後にsbt 以外から 処理してる場合変更が必要 IntegrationTest 削除 古いスラッシュの記法削除
41 / 57
projectmatrix plugin 外部のplugin だったが組み込みになった https://github.com/sbt/sbt- projectmatrix scala version 毎にsub project
ほぼ自動で作る 42 / 57
projectmatrix plugin "++ 3.x" などで切り替え不要になってcompile 並列可能などのメリット これを使わないといけないわけではない これを使わない今までの定義も普通に使える 一部機能足りてなくて困ってるので実装されてく れ〜
43 / 57
その他色々な変更や非互換 js やnative の %%% は %% で済むらしい? まだjs やnative
のplugin がリリースされてなくて実質試せない が build ファイル変更した時のデフォルトの挙動が reload になる sbt query という新機能 44 / 57
いつRC ではない 2.0.0 が出るの? わかりません 主要開発者のeed3si9n さん次第? 数ヶ月以内?( 適当根拠無し予想) もうRC
なので数年かかることはないはず 45 / 57
いつRC ではない 2.0.0 が出るの? ある程度bug が直ったら? まだいくつかbug ある 46 /
57
まだあるbug の例 https://github.com/sbt/sbt/issues/7722 https://github.com/sbt/sbt/issues/8340 https://github.com/sbt/sbt/issues/8335 https://github.com/sbt/sbt/issues/8334 自分が報告した and 相対的に多少重要?と思ったも の雑に列挙したが、他にもある
47 / 57
sbt 自体のbuild に使う Scala 3 のversion とJDK 今のところScala 3.7.x 最新
Scala 3.7 までJDK 8 サポートされてる 48 / 57
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
sbt 自体のbuild に使う Scala 3 のversion とJDK もうすぐScala 3.8 出るが?
いま3.8.0-RC2 Scala 3.8 はJDK 17 以上必須になる予定 50 / 57
Scala 公式の発表↓ JDK 17 will be the next minimum version
required by Scala 3 51 / 57
52 / 57
RC と今後の互換 sbt 2 のRC 使ってpublish したplugin はRC ではな いsbt
2 でも互換を保つ予定 bug 修正したり新機能は入るが、もう大幅な互換壊 す変更は入らないはず 53 / 57
RC と今後の互換 本格的な重要なproject のbuild 自体をsbt 2 に切り 替えるのは明らかにはやいが、plugin のbuild 含めて
色々試してもほぼ無駄にならないはず? 54 / 57
sbt 2 のリリースのために 個人的に頑張る活動 だいぶsbt 本体にpull req した 結構試して結構bug 報告もした
手当たり次第に(?)sbt plugin の2 対応やってる scala-steward の対応 55 / 57
sbt 2 を試して貢献しよう 少しでもいいから気が向いたら試してくれ〜 何かあればScala ワイワイのDiscord やTwitter な どで聞いてくれれば可能な範囲でこたえます 56
/ 57
おわり 57 / 57