2025-01-01から1年間の記事一覧

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…

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

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

implicitの名前が衝突しているとScala 2.13では対消滅して優先度低いものが採用されることがある

「対消滅」って、何言ってるかよくわからないと思いますが、実際にある意味でその言葉がピッタリというか・・・。 以下のコードの実行結果は、Scala 2.13.16においてどうなるでしょうか?

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消すだけなら…

自作scalafix ruleの説明その5

以下の続き 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

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

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

Scalaでimplicitを名前でimportしていたら怒るscalafix

というのを https://github.com/xuwei-k/scalafix-rules に入れたいが、現実問題としては、特定のライブラリなどがそれを全く考慮してない場合などがあり、個別にカスタマイズした方がいい場合が多いので、一旦ここに貼り付けつつ、説明を書くことにします。

sbt 1.11.0からの新しい方式でmaven centralにpublishしてみた

やってみた記録であって、公式の記述と比較して、あまり新しい話はありません。しっかりした情報を知りたい人は、以下の公式情報などを読みましょう https://github.com/sbt/sbt/releases/tag/v1.11.0 https://central.sonatype.org/news/20250326_ossrh_sun…

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

自作scalafix ruleの説明その4

以下の続き 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

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

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

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

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

sbt-scalafixでUnusedScalafixSuppressionを無視する方法

scalafixでは、特定のアノテーションやコメントをコード内部に書くことで、個々のruleに応じて、違反していたとしてもその部分だけ抑制することが可能です。 それはそれで便利なのですが、さらに、それらについて、親切なのか、余計なおせっかいなのか?が微…

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