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
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
競馬で学ぶ機械学習の基本と実践 / Machine Learning with Horse Racing
shoheimitani
14
14k
Combinatorial Interview Problems with Backtracking Solutions - From Imperative Procedural Programming to Declarative Functional Programming - Part 1
philipschwarz
PRO
0
110
Module Harmony
petamoriken
2
580
All(?) About Point Sets
hole
0
230
FlutterKaigi 2025 システム裏側
yumnumm
0
1.2k
Atomics APIを知る / Understanding Atomics API
ssssota
1
220
30分でDoctrineの仕組みと使い方を完全にマスターする / phpconkagawa 2025 Doctrine
ttskch
3
620
仕様がそのままテストになる!Javaで始める振る舞い駆動開発
ohmori_yusuke
8
4.7k
Honoを技術選定したAI要件定義プラットフォームAcsimでの意思決定
codenote
0
280
20251127_ぼっちのための懇親会対策会議
kokamoto01_metaps
2
220
ZOZOにおけるAI活用の現在 ~モバイルアプリ開発でのAI活用状況と事例~
zozotech
PRO
2
2.1k
WebRTC と Rust と8K 60fps
tnoho
2
900
Featured
See All Featured
A Tale of Four Properties
chriscoyier
162
23k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
34
2.3k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Agile that works and the tools we love
rasmusluckow
331
21k
Facilitating Awesome Meetings
lara
57
6.6k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Done Done
chrislema
186
16k
Code Reviewing Like a Champion
maltzj
527
40k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Raft: Consensus for Rubyists
vanstee
140
7.2k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.8k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.5k
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