$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
sbt 2
Search
kenji yoshida
November 27, 2025
Programming
0
100
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
450
Scala-Matsuri-2023.pdf
xuwei_k
0
1.5k
WartremoverのScala 3対応
xuwei_k
0
180
アルプでの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
AWS CDKの推しポイントN選
akihisaikeda
1
210
データファイルをAWSのDWHサービスに格納する / 20251115jawsug-tochigi
kasacchiful
2
100
複数人でのCLI/Infrastructure as Codeの暮らしを良くする
shmokmt
4
1.3k
251126 TestState APIってなんだっけ?Step Functionsテストどう変わる?
east_takumi
0
270
CSC305 Lecture 14
javiergs
PRO
0
330
競馬で学ぶ機械学習の基本と実践 / Machine Learning with Horse Racing
shoheimitani
14
14k
TypeScriptで設計する 堅牢さとUXを両立した非同期ワークフローの実現
moeka__c
5
2.7k
2025 컴포즈 마법사
jisungbin
0
160
AIの弱点、やっぱりプログラミングは人間が(も)勉強しよう / YAPC AI and Programming
kishida
13
5.5k
MAP, Jigsaw, Code Golf 振り返り会 by 関東Kaggler会|Jigsaw 15th Solution
hasibirok0
0
160
知られているようで知られていない JavaScriptの仕様 4選
syumai
0
640
高単価案件で働くための心構え
nullnull
0
170
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.6k
Balancing Empowerment & Direction
lara
5
770
A Tale of Four Properties
chriscoyier
162
23k
RailsConf 2023
tenderlove
30
1.3k
Unsuck your backbone
ammeep
671
58k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Six Lessons from altMBA
skipperchong
29
4.1k
A better future with KSS
kneath
239
18k
Designing for Performance
lara
610
69k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.3k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
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