scala

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…

Scalaで基本的には警告をエラーにしたいが、特定の警告を警告のままにしたい

というパターンがScala標準で不可能な気がするので、build.sbtで頑張るサンプルを作ってみたのですが、Scala標準で不可能ですよね??? どういうパターンか?をもう少し詳細に説明すると

kantan.csvをforkしてscala-nativeとScala 3対応してリリースした

これ https://github.com/nrinaudo/kantan.csv を以下にforkして、0.9.0をpublishしました https://github.com/kantan-scala/kantan-csv https://repo1.maven.org/maven2/io/github/kantan-scala/

"META-INF/services/scalafix.v1.Rule" を生成するだけのコードをsbt pluginにしてpublishした

3年以上前に書いたこれ https://t.co/ozAxha1yfSresources/META-INF/services/scalafix.v1.Ruleの生成が面倒だからsbt側で自動生成するやつ作った— Kenji Yoshida (@xuwei_k) February 5, 2022

Scala 3になって効率よくimplicitを撲滅させる時の準備や手順やコツ

OSSではまだまだScala 2と3でcross buildしているものも多いですが、 2025年4月からフリーランスになってひたすらScalaやっていて、他の社でもScala 3移行進んで、場合によってはimplicit消す作業なども多少やり始めています。 とにかくimplicit消すだけなら…

"scalafixAll --check" するだけのsbt pluginを作った

正確にはそれをするだけのつもりで作りはじめたら、微妙に思い出して追加のtask入れたのでそれだけではないのですが、とりあえず scalafixAll --check するだけの scalafixCheckAll taskの話をします。

import scala.language.2.13によってScala 2と3のunapply非互換問題を無理やり解決する

以下を試してみたという話 github.com

Scala 2の場合のscalikejdbc.autoConstructのバグの説明

以下の解説 github.com

value classは素のmockitoとすごく相性が悪いがScala 3のopaque typeなら割と動くかも、という話

mockitoとは以下のJavaのライブラリです。 github.com Javaのライブラリなので、当然Scalaでも使えます。*1しかし、 *1:scala-jsやscala-native除く

slickのScala 3でのTableQueryのmacroを無理やり直した

以下の続き xuwei-k.hatenablog.com

大規模Scala開発でコンフリクトを減らすコツ

ここでいう「コンフリクト」とは、 「GitHubでpull req自分が出した変更箇所に対して、他の人のpull reqが先にmergeされてコンフリクトしてそのままmerge出来なくなったぁ〜」 というようなものですね。*1 GitHubでもgitでなくてもなんでもよいというか、現…

Scalaでフリーランスはじめた感想

以前書いた通り xuwei-k.hatenablog.com 予定通り2025年3月末で某社を退職して、2025年4月からフリーランスをしてます。 ソフトウェアエンジニアでフリーランスやってる人なんて世の中に大量にいると思いますし、 ある程度当たり前の感想などしか書かないか…

slickのTableQueryのmacroがScala 3で動かない場合があると思ったらおそらくScala 3自体のバグ?

以下のこれ https://github.com/slick/slick/blob/v3.6.0/slick/src/main/scala-3/slick/lifted/TableQuery.scala#L37-L55

今更Scala 2と3でcase classのunapplyの非互換をどうにかするものをライブラリにした

4年近く前に以下のような記事を書きましたが、それを微妙に改変してライブラリにしてpublishした、という話 xuwei-k.hatenablog.com

scalatestの全部入りを使うのはやめましょう、という話

build.sbtに以下のように書くのはやめましょう、という話です libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.19" % "test"

kantan.csvのshapeless 2によるtype class自動生成のcompile速度が遅くて11倍高速化の余地がある

この人またcompile速度の話してる・・・

shapeless.Genericをmacro annoationでcompanion objectに自動生成するライブラリ作った

これ ↓ 作りました。 https://github.com/xuwei-k/shapeless-annotation 以下の記事の続きでもあります

Scala 2におけるshapeless.Genericの導出を数える君を作った

https://github.com/xuwei-k/shapeless-generic-counter shapeless.Generic というのは、case classなどをHListなどと相互変換し、それによってgeneric programmingを実現するためのするためのものです。 結構昔に作られて以来、色々なライブラリの裏側で使…

shapeless.Lazyは本当にby name implicitで置き換え可能なのか?

shapeless.Lazy という、とにかくすごいもの(語集力皆無)があるのですが、それの話をします。 内部実装まで含めるとだいぶ難しく、自分も本当のshapeless.Lazyの力や使い方を完璧に把握してないことに今更ながら気がついたので、この記事を書いているわけで…

Scala 2を切り捨ててScala 3のみにした場合にやることの例としてのatnos-org/eff

以下のライブラリの以下のコミットの解説 github.com

Scalaでcats.syntax.allは個別にimportするのと比較してどの程度compile速度に影響があるのか

この人またcompile速度の話してる・・・

Scalaでcirceのautoのような再帰的に全自動で導出するものはcompile速度が爆発するので絶対に使うな作るな、という話

前回に引き続いて、なぜかcompile速度関連の話題を詳細に解説する回。

sbtでのsub project分割とcompile速度の具体的な解説

2024年のScala祭でbuild速度の話をしましたが https://xuwei-k.github.io/slides/matsuri-2024/#1 その中の一部を多少詳細に解説する、というものです。

独自scalafixのruleを同じsbt project内部に置く際の設定方法の説明その2

以前に以下のような記事を書いたのですが xuwei-k.hatenablog.com scalaのversionの関連の解説やsbt-projectmatrixの紹介をして、それはそれで現状では一番わかりづらいと思われる箇所なのですごく重要なのですが、 sbt詳しくない人にとってはよく考えたら上…

Scala 3でimplicitlyとsummonのcompile速度の違いを調べてみた

Scala 2の標準ライブラリには、大昔から以下のようなimplicitlyという、初心者にとっては一見謎なメソッドが存在します。 def implicitly[T](implicit e: T): T = e https://github.com/scala/scala/blob/3548afcd51d3a60365f8c068d54a8d95c2e45b04/src/libr…

Scala 3.8くらいからJDK 17以上が必須になるぞ!

ほぼ中身がないですが、すごく重大ニュースなので、日本語で検索したときに引っかかりやすい的な理由により、雑に書いておくだけのエントリ。 www.scala-lang.org