Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
数十万行のプロジェクトを Scala 2から3に完全移行した
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
kenji yoshida
December 13, 2024
Programming
1.6k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
数十万行のプロジェクトを Scala 2から3に完全移行した
2024年12月のScalaわいわい勉強会での発表資料
https://scala-tokyo.connpass.com/event/335477/
kenji yoshida
December 13, 2024
More Decks by kenji yoshida
See All by kenji yoshida
sbt 2
xuwei_k
0
420
Scalaプロジェクトの ビルド速度改善
xuwei_k
0
540
Scala-Matsuri-2023.pdf
xuwei_k
0
1.6k
WartremoverのScala 3対応
xuwei_k
0
210
アルプでのScala 3移⾏
xuwei_k
1
1.7k
ScalaでgRPC
xuwei_k
0
1.7k
scalaprops
xuwei_k
0
160
Other Decks in Programming
See All in Programming
3Dシーンの圧縮
fadis
1
760
Contextとはなにか
chiroruxx
1
310
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
wagyu
0
230
さぁV100、メモリをお食べ・・・
nilpe
0
140
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
120
「エンジニアインターン、どうやって取った?」準備のリアルを語るLT会 Progate BAR
akiomatic
0
130
AIとASP.NET Coreで雑Webアプリを作った話
mayuki
0
520
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
13
3.7k
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
130
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
190
ユニットテストの先へ:テスト技法で要求・仕様を整理するJava開発実践 / Beyond_Unit_Testing_Practical_Java_Development_Techniques_for_Organizing_Requirements_and_Specifications
shimashima35
0
400
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.5k
Featured
See All Featured
The Mindset for Success: Future Career Progression
greggifford
PRO
0
360
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
970
The SEO Collaboration Effect
kristinabergwall1
1
480
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
160
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
Ruling the World: When Life Gets Gamed
codingconduct
0
250
The Cult of Friendly URLs
andyhume
79
6.9k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
290
How GitHub (no longer) Works
holman
316
150k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
44k
Transcript
数十万行のプロジェクトを Scala 2 から3 に完全移行した Scala わいわい勉強会 4 2024-12-13 1
/ 30
X( 旧twitter) @xuwei_k github @xuwei-k blog https://xuwei-k.hatenablog.com 2 / 30
数年前の発表 アルプでのScala 3 移行 ずっと副業で関わってます 3 / 30
がくぞ @gakuzzzz·Follow そういえばアルプのプロダクト、しばし前から Scala 3 で 本番環境も動いてましたが、いつでも戻せるように Scala 2.13 でもクロスビルドしてました。
それを先日 2.13ドロップして Scala 3 のみにしたので 諸々便利な機能も使えるようになりましたヤッター 7:34 PM · Oct 31, 2024 30 Reply Copy link Read more on X 4 / 30
アルプのScala コード 数十万行 ほぼmonorepo サーバーとフロントは分かれてる 2024 年後半に無事Scala 3 移行完了 5
/ 30
詳細な時期忘れたけど、既に2022 年時点でScala 3 のTest/compile はほぼ通せていた Apache Spark 部分除く CrossVersion.for3Use2_13 が複数残っていた
状態 その状態が2 年以上?継続 6 / 30
残ってた主な課題 Apache Spark 古いsttp akka 関連どうする?pekko 移行? refined のScala 3
対応macro その他独自macro の対応 3 だけtest 落ちる箇所修正 7 / 30
Apache Spark これ書いてる2024 年12 月現在でもSpark 公式は Scala 3 非対応 非公式で無理やり頑張るツールはある
そもそもAWS のEMR 使っていた影響でSpark 関連部分 のコードだけScala 2.13 ですらなく2.12 だった 8 / 30
Apache Spark kory さんが一晩で脱却してくれました 詳細知らないけど、見直したらSpark ではないとダ メな処理ではなかったらしい?ので、別のもので書 き換え 9 /
30
古いsttp https://github.com/softwaremill/sttp http client ライブラリ Scala 3 非対応なversion 使ってた 10
/ 30
sttp メジャーバージョン間で非互換が大量で辛い よほどしっかりテスト書くか動作確認しないと怖い 11 / 30
sttp 真面目にやるとライブラリそのもののテストを書く くらいな勢いになってしまう 外部にリクエストするために使うので、それ自体の mock server を実際にhttp 通信する形でテス ト??? 12
/ 30
sttp kory さんが一晩で最新に上げてくれました 移行途中で少しだけ後から気がついてなかった挙動 の違い見つかったが修正し、最終的にはそこまで大 きな問題なく成功 13 / 30
akka どうする? 詳細割愛するが、アルプではakka-http その他割と 多くakka 関連使っていた ライセンス変更で実質有料化 規模によっては、お金免除されるらしいが、脱却し てしまった方が楽 14
/ 30
akka どうする? 結論としては無事pekko 移行完了 主に自分がやった 実質これに起因するトラブルなし! 15 / 30
akka からpekko 基本的に公式ガイド通りにやっただけ config やpackage をakka からpekko にひたすら変 える 万が一の時に戻しやすいように、コンフリクトしな
いように、多少工夫したり 書き換えにscalafix 大活躍 16 / 30
refined のScala 3 対応macro https://github.com/fthomas/refined Scala 2 なら大きな不満ないが・・・ compile 遅くなる罠はある
公式がScala 3 のmacro ほぼ未対応 そもそも開発活発ではないのでは? 17 / 30
refined のScala 3 対応macro 公式とは別に独自に対応してるものが見つかる https://github.com/gemini-hlsw/lucuma- refined 18 / 30
refined のScala 3 対応macro gemini-hlsw/lucuma-refined に多少pull req したりしたが、結局完璧でもないし、これを一 部参考にしつつ完全独自対応して組み込んだ 主に自分とkory
さん 細かい実装方法の選択肢が色々あって議論したの面 白かったけど今回は割愛 19 / 30
refined のScala 3 対応macro compile error のmessage にScala 2 と互換無く
なったが基本的に動くので許容範囲なものが完成 まだ中途半端にfthomas/refined に依存したまま だが、今後iron に移行するか、そもそも全部独自に してしまうか何かしたいかも? https://github.com/Iltotore/iron 20 / 30
その他独自macro 自分やkory さんなどがScala 3 に慣れていたので、 いくつかあったがあまり大きな問題ではなかった? 細かい実行時の挙動が全く同じになるように工夫す るのに多少は苦労したが 21 /
30
Mockito 辛い問題 これ読んで https://xuwei- k.hatenablog.com/entry/2021/06/01/233628 自作のwartremover でほぼ検知出来た https://xuwei- k.hatenablog.com/entry/2023/03/04/114947 22
/ 30
その他? 細かい何か色々他にもあった気がするが、印象に残 ってないので、自分にとってはあまり大変ではなか ったのかも? 23 / 30
Scala 3 移行後 約1 ヶ月でimplicit をほぼ全部消してgiven や using やextension にしたぞ!
ほぼ自分がやった 確か元々は数千箇所あったはず ここでもscalafix 大活躍 数十個は書いた 24 / 30
Scala 3 移行後 given やusing は出来るだけ明示的に名前をつけな い定義に https://xuwei- k.hatenablog.com/entry/2024/11/16/102039 25
/ 30
Scala 3 移行後 scalafix だけScala 2 で書かないといけないの で、はやく対応してくれ〜 PolyFunction やexport
使ったりenum に一部書き 換えたり、その他色々やってる最中 26 / 30
extension の衝突が辛い問題 implicit class を単純に書き換えるとよく衝突し て、そのままcompile 通らないことが多い 色々と残念な回避策というかコツ?があるが、今回 は割愛? 27
/ 30
coverage 有効化した場合のバグ 書き方変えることで回避 28 / 30
unused import の誤検知がまだ多い 29 / 30
おわり 30 / 30