lazy valの簡単な歴史やScala 3.8からの実装変更と今後

アドベントカレンダーあいてたのでまた書くぞ! https://qiita.com/advent-calendar/2025/scala

今までScala 3に送ってmergeされたpull reqまとめ

https://qiita.com/advent-calendar/2025/scala アドベントカレンダーが空いてるのでついでに書いて振り返ってみる記事

最近自分がsbtに報告したbugまとめ

sbt

最近というか、1年数ヶ月前にsbt 2に関してblogを書いた後に報告したものをざっくり振り返ってみます xuwei-k.hatenablog.com これは2025のScalaアドベントカレンダーの記事です。 qiita.com sbt 1も2も両方含みます。25個もありますね。 bug扱いではなかっ…

ScalaにおけるStringConcatFactoryの説明とベンチマーク

JDKには9からStringConcatFactoryというclassが追加されています。 2025年12月現在の最新はJDK 25なので、9なんて今更な話なので、特に新しい話でもないのですが、個人的に真面目にベンチマーク取ったことなかったので、アドベントカレンダーついでにベンチ…

自作scalafix ruleの説明その6

以下の続き https://xuwei-k.hatenablog.com/entry/2022/02/11/160802 https://xuwei-k.hatenablog.com/entry/2022/09/03/110341 https://xuwei-k.hatenablog.com/entry/2024/03/17/112342 https://xuwei-k.hatenablog.com/entry/2025/04/29/094201 https://…

sbtで警告を全部再度表示するprintWarningsというtask

sbt

アドベントカレンダー空いてたのと、以前tweetしたけど便利な割にあまり知られてない気がするので、blogにも書いておきます。 qiita.com

wartremoverのOrTypeLeastUpperBoundとscalacOptionsの-Wconfを組み合わせる例

数年前に作った以下のwartremoverの話 xuwei-k.hatenablog.com

Scalaわいわい勉強会でsbt 2の発表をした

https://xuwei-k.github.io/slides/sbt-2-waiwai-2025/#1 https://scala-tokyo.connpass.com/event/371493/ speakerdeck.com

Scala 3のIArrayはJavaから見たらただの配列なのでArrayStoreException発生させることが可能

タイトルでほぼ全部言い切ってるシリーズ。 以下、それ用のコード

Scala 3のopaque typeとgeneralized type constraints

これを組み合わせてる例を雑にググっても見つけられなかったのですが、よく考えたら組み合わせたらそれなりに便利というか、劣化版HaskellのCoercibleと言えなくもないのでは???と今更気がついたので、それについて書きます。

GitHub Actionsにおけるsbtでの依存ライブラリの最適なcache方法

5年半前(!?)にCircleCIで書いたことがあるのですが、それのGitHub Actions版として書き直す的なもの。 xuwei-k.hatenablog.com

IntelliJ IDEAでScala 3を開発する時の設定

普段は割とデフォルトの設定で十分なのですが、Scala 3の開発かつ特に大きめのprojectの場合、設定を変えないと厳しい場合があるので、それの話を書きます。 versionは 2025.2.4 (Community Edition) としますが、割と最近のversionならあまり変わらないと思…

java.lang.StableValueはScalaのlazy valより10万倍くらい速い場合がある

以下の話 https://openjdk.org/jeps/526 https://openjdk.org/jeps/502 xuwei-k.hatenablog.com

mavenにおけるRELEASEやLATESTという特別なversionとsbt

以下の話 https://cwiki.apache.org/confluence/display/MAVEN/Maven+3.x+Compatibility+Notes#Maven3.xCompatibilityNotes-PluginMetaversionResolution Internally, Maven 2.x used the special version markers RELEASE and LATEST to support automatic …

sbt-jol pluginをforkしてメンテしていくぞ

10年以上前(!?)に以下のようなものを書いたことがあり xuwei-k.hatenablog.com jolはその後何度か自分のblog記事に登場してるはずです。 そして、おそらく自分のその記事のほうが先ですが、同じようなものをsbt pluginにした人がいたのですが https://github…

json4sのserializeとdeserializeのbenchmark

Scala 3部分でserializeとdeserializeに対応したけれど、全然仕組みが違うので速度大幅に劣化してるのか、思ったより変わらないのか?を調べた https://xuwei-k.hatenablog.com/entry/2025/11/01/100903 https://xuwei-k.hatenablog.com/entry/2024/06/17/09…

playframeworkのdeferBodyParsing

おそらく、あまり知られていないというか、雑にググっても日本語で書かれた情報が引っかからないのですが、自分も少し前まで知らなかったのですが、諸事情により調査する機会があったので解説のようなものを書いておきます。

json4sの4.1リリースと今後の開発

何度も書いてますが 「デメリット多いので個人的に絶対使いたくない」 のですが、ここ数年なぜかほぼ自分がメンテしているjson4sというScala向けのjsonライブラリがあります。 それの4.1.0リリースしました

mockitoでScala 3のcontext functionをmockする方法

以下のように一旦structural type使ってreflection経由にする以外に思いついてないんですが、他の良い方法あります???

sbt-dao-generatorの互換壊したversion 2リリース

以下のsbt pluginの話 https://github.com/sbt-dao-generator/sbt-dao-generator

java.util.Base64でのencodeはapache commons codecより50倍以上速い

タイトルで言いたいことをほぼ言い切っているし、Base64かつJavaならよくある話なので、ググったらいくらでも出てくるのですが、2025年時点の最新でそれなりに自分で計測してみた。 というだけの話。

scala.collection.immutable.LongMapのメモリ効率

Scalaの標準ライブラリにはLongMapやIntMapという、keyが特定の型に特化したMapがあります。 特化しているなら、それらの型の場合にはこれを使った方が効率いいのでは???と思うかもしれません。 しかし、先に結論を書いておくと、2025年時点のScalaにおい…

sbtが出力するchrome traceをいい感じに加工してgithub actionsで自動出力するものを作った

JSとyamlを数十行書いただけです https://github.com/xuwei-k/sbt-trace-action/commit/a61c1633f8b84caf33a500931ae47ffb583ac6df 以前書いた以下

フリーランスになって半年経った感想

以前も書きましたが、ちょうど半年経ったので xuwei-k.hatenablog.com

MySQLの公式java client使用時はprotobuf-javaの依存をexcludeしましょう

以下を読めばわかる人、読んだことある人は、この先読む必要ありません。 github.com

sbtでそれぞれのsub projectで同じライブラリの異なるversionに依存しているのを検知する方法

昨日のこれ xuwei-k.hatenablog.com の続きのような、関連するような話です。

build.sbt上で依存ライブラリが依存してるライブラリのversionを取得する

タイトルがややこしくて何言ってるかわかりづらいと思うので、ひとまず具体的な例で説明します。 例えば以下のようなbuild.sbtだったときに

JEP 502のStable ValuesとScalaのlazy valの比較表

これ https://openjdk.org/jeps/502

Scala 3のinline paramとラムダ内return

それ scala.util.boundary 使えば良くない???という話である気もするのですが、とりあえずググっても簡単には見つからなかったので書いておきます。

Scala 3でsealedからenumにするとcompile速度何倍も速くなるぞ

以前こういうことをtweetしたのですが caes object 何か extends sealedの親を大量に作るScala 2形式より、Scala 3のenumの方が、それぞれ別の型にならない(classファイル作らない)ので、生成されるjar sizeが大抵(?)小さくなるというメリットがあるぞぃ— Ke…