自分が出したpull reqがconflictしていたら通知するGitHub Action君

というのを作った。 仕事で自分が関わっている特定のリポジトリでは、以前からそういうの作ってbotがpull reqに直接コメントするようにしている。(自分のものだけではなく、そのリポジトリのpull req全てに対して) そうではなく、自分が出したOSS含めた任意…

2021年の最新技術を使った場合のScalaのコンパイル速度

ここでいう最新技術とは以下です。 JDK8や11よりも、17の方が速い? M1 Macが速い?(2021年最新のM1 Maxではなく、2020のMacbook Pro 13インチのM1です・・・。M1 Max欲しい!!! => 最後に追記したぞ) Scala 2より3の方が速い? 自分の最近の経験上、それ…

Scala 2のJDK17対応状況

最新情報は以下の公式の情報をご覧ください。で終わるのですが、これ書いている2021年9月現在の情報を簡単にまとめておきます(ただのtweet貼り付け) https://github.com/scala/bug/issues?q=label%3Ajdk17 公式のJDK17関連のbug https://docs.scala-lang.org…

sbtでtaskAllという独自コマンドを作った

sbt

仕事でsbtのsub projectが100個以上あるので、こういう指定だけでもダルいので

Scala 3でMatchableに推論されたら警告かエラーにするcompiler plugin

scala.Matchable自体の解説はしませんが、AnyValやAnyやAnyRefや Product with Serializable と同様に、それに推論されたら、わりとミスなことが多い気がするので、作ってみました。

MockitoのwhenとScala 3の型推論

Scala 2ではcompile errorなのにScala 3では実行時にClassCastExceptionやその他変なエラーになる。 なるほど・・・Scala 3のcompilerはあまり悪くない気がするから、よけいに辛い・・・

Scala 3のmacroによる型安全かつ実行時にリフレクションにならないClose型クラス(ローンパターン)の実装

というのがおそらく作成できたけれど、もっと書き方改善可能なところあったら教えて下さい。 このくらいすでに、Scala 3でも前例が存在する気もするけど、とりあえず(あまり前例は調査はせずに)自作しました。 テスト書いてあるとおり、指定されたcloseメソ…

Scala 3でcase classのcompanionがFunctionNを継承しなくなっていて互換がないことへの対策

数日前の記事と、対になる(?)もの xuwei-k.hatenablog.com

Scala 2と3でcase classのコンパニオンのunapply(Tupleへの変換)が互換がないことの解決案

まずは以下をご覧ください github.com

2021年5月時点のScala 3.0.0と2.13.5のコンパイル速度比較

結論: Scala 3.0.0はScala 2.13.5の半分以下(4割)の時間でコンパイル終わる!!! (scalazでのベンチマーク) 半年前のDotty 0.27の時点でやった方法とだいたい同じ方法で計測し直した結果です。

sbt 1.4以降でgraphviz使ったsvgなどのdependency graphの出力

sbt

sbt 1.4から標準にdependency graphが取り込まれた https://github.com/sbt/sbt/pull/5883 https://github.com/sbt/sbt/pull/5880 標準で(拡張子的にはhtmlだが)svgで出力するやつがある https://github.com/sbt/sbt/blob/7969a155b0978a925d3bd4aeefcb2ace1…

GitHub Actionsで祝日だったらcron実行をskipする

https://gist.github.com/xuwei-k/3fd8d9bdc9ecde473244de40da2fecf0

Google Cloud Functionsをunfiltered scalaで書く

Google Cloud Functionsに関しては詳しくないので、各自ググってください。 cloud.google.com 最近は、原理上、任意のJVM言語で書けるらしいです。 www.publickey1.jp 言いたいことを凝縮すると、以下の1 tweetなわけですが

packageとdirectoryに整合性がなかったら強制的にファイル移動するscalafixのrule作った

以前、チェックする君だけ作ったのですが、それを雑に改造して、強制移動する君に改良しました。 細かい部分が雑なので、読みにくいし、バグってる可能性もありますが、ご自由にお使いください。 既知の問題として、packageが2行にわかれて書かれていると、…

sbt-sonatypeでsonatypeProfileNameとorganizationに異なる値を設定するパターン

というのが実質あり得ないかと思っていたのだけれど、どういうときにそうなるか?というのに気がついたのでメモ。

Scala 3のMatch Typesを使って型レベルsort

今までのScala 2だとAux Patternやimplicit色々使って書くようなやつが、3だとこうやって書けるよ、という話。 https://gist.github.com/xuwei-k/924c69482c972d7bac496922ed725f79 でもこれだと、型は生成出来ても、valueOfなどで実際の値が生成できないん…

Scala 3でマクロで特定のsealed trait, classを継承したobjectを全て取得する

というのを書いたので貼っておきます。 Listで返す版と、Tupleで返す版。 https://gist.github.com/xuwei-k/7c3f662a78fdd39ce00db43900470848 https://gist.github.com/xuwei-k/c798d8faa3f4f163be0aad150b327d07:

scalafixを使ってclass名とfile名が異なっているものを自動修正したり警告を出す

というのを作ったので貼っておきます。 細かいところが雑ですが・・・。 Javaだとpublicなclassだと強制的に揃えないといけないですが、良くも悪くもScalaだと自由なので、揃えたい場合には、わざわざこういうのを作らないといけなくて不便。 file名ではなく…

scala-stewardの使い方や動かし方の方法一覧

今までいくつかblog書いたが、どういうときに、どの方法使えば良いのか?が明らかにわかりにくいと思ったので、現状のまとめ あと https://tarao.hatenablog.com/entry/scala-renovate scala-stewardを自分でホストするのは面倒だし, かと言ってGitHub Actio…

scala-stewardを独自に作ったGitHub App(bot)で動かす方法

結局、デフォルトのGITHUB_TOKENで別のGitHub Actions起動できない問題があるから使いづらい(実質、他のCI併用する場合じゃないと有用じゃない?)けど、これhttps://t.co/uo7COyP2xo本体に取り込まれてリリースされてた— Kenji Yoshida (@xuwei_k) 2020年11…

今までありがとうTravis CI、さよならTravis CI

しっかり調査してないですが、こういったCIサービスがほぼ存在しない時期にほぼほぼ最初に登場して、一時期明らかにデファクトスタンダードだったと思うので、昔からOSS活動している人ほど、とても多く利用してお世話になっていたと思うので、そういう人であ…

2020年11月現在のScala 3(Dotty)とScala 2のコンパイル速度比較

最初に結論 Scala 2.13.3 と 3.0.0-M2-bin-20201031-1ab76c1-NIGHTLY をscalaz最新版でベンチマークしたところ、 Scala 2.13.3は平均約57秒、Scala 3の最新版は平均約31秒で 約45%短縮!!! めでたいなぁ。 他の条件で計測した場合にどうなるのかわからない…

sbtのremote cacheのidにcommitの日付を入れる

sbt

という小ネタ。 sbt 1.4.1時点のデフォルトでは、単にgitのcommitのhashのみだが、日付が入っていたほうが、例えばローカルのキャッシュを手動で削除したりする際などに便利そうなので。 https://github.com/sbt/sbt/blob/4a2aaabb9b41a9e016e/main/src/main…

sbt 1.4のremote cacheを試してbug報告やpull reqした記録

だいぶ色々やっているので、とりあえず雑にまとめておく

sbt 1.4からのpipeline機能を試したら3割compile時間短縮された

3割というのは、もちろんprojectの構成だったり、計測方法やその他色々によるわけですが、とにかく自分が計測した場合には3割短縮されました。114秒が80秒になりました。

GitHub Actionsとscala-stewardを組み合わせてtokenやbot accountの用意すらせずにpull reqを送ってもらう方法

scala-stewardという、全自動でScala projectのlibrary update pull requestを送ってくれるやつが数年前からある https://github.com/scala-steward-org/scala-steward しばらくは、OSSなpublicなものは、普通、公式のリポジトリ一覧が書いてあるファイルに…

JDK14のRecordsに対するshapeless.Generic自動生成マクロを書いた

TODO: あとでLabelledGenericとかその他色々も作りたい LabelledGenericは実装した 実装が雑なので細かい部分バグがあるかもしれない ライブラリにしてpublishする・・・? リリースした

DottyのMatch Typeを使ってコンパイル時にFibonacciを計算する

見た目通りで、あまり難しくないので、特に説明することがない。 macroさえ使わずに書けますね。 shapelessにあったような色々な機能が標準で装備されています。 みなさん、Match Type使ってもっと複雑な色々な計算書いてみましょう。 ちなみに、この単純な…

Scala 2.13.4からのTASTy読み取り機能

というものが追加されるらしいです。

Scala 2.13で-Xsource:3を指定すると変更される挙動一覧

Scalaコンパイラには、ある程度最近のversionから -Xsource:バージョン という、少し将来のversionの挙動に近づけるオプションがあります。 Scala 2.13.3時点で -Xsource:3 を指定できるわけですが、その場合の挙動の変更一覧を、scala/scalaをgit grepして…