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して…

Throwableでtry catchしてしまっているのをNonFatalに書き換えるscalafixのrule

この程度の単純なものならば、正規表現の置換だけで可能な気がしますが、書いたので置いておきます。 NonFatalのimport加えるあたりは、そういう低レベルなやつでやると、適切な位置に追加するのは多少面倒かもしれないですね。 細かいところが多少雑なので…

sbt 1.3.0以降 % Test でライブラリ追加してもcompileの依存が変わる場合がある件

以下再現コード

ScalazをDotty対応した知見

少し前に、こっそりと、かなりひさしぶりな(互換壊す)メジャーリリース?となる、7.3.0 finalをリリースしたけど全然リリースノート書いたり宣伝もしていないScalazですが、 もう最近自分しか開発していない感があり、猫のほうが明らかに流行っています。 が…

JDK11でGraalを有効にするとScalaのコンパイルが13%くらい速くなった

Graalについて全然詳しくないので、Graal自体の説明はしません、というかできませんが、JDK10以降で -XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler というオプションを付与すると有効にできるらしいですね。 というわけで、以下のような条件で計…

Scalaのcompiler pluginをCrossVersion.fullにするかCrossVersion.binaryにするか

昨日のwartremoverのやつの続き、というか、Scalaのcompiler pluginに関する別の話。 いきなり雑に説明に入りますが

wartremover-contribをどうやって依存させるかという問題

以前こういうのを書きましたが xuwei-k.hatenablog.com

play-wsのstandalone版に自動書き換えするscalafixのruleを書いた

https://t.co/2G7DXbQ369play-ws-#scalafix 0.1.0 released.non standalone play-ws => play-ws-standalone 😃 pic.twitter.com/Y4JTqiIMRQ— Kenji Yoshida (@xuwei_k) 2020年3月25日 https://github.com/xuwei-k/play-ws-scalafix github.com 歴史とともに、…

CircleCIにおけるsbtプロジェクトの依存ライブラリの最適なキャッシュ方法の考察

CircleCIにおけるキャッシュの仕組みというか仕様は、他のCIサービスと比べると、少し変わった特徴がある気がします。 といっても、自分は他にはTravisCIくらいしか詳しくないので、実はCircleCIのように色々工夫している方がむしろ最近は主流な可能性もあり…

sbtにおけるテストの並列実行の設定詳細解説

いきなり本題というか、一番言いたいことを書くと、まず テストの fork の設定によってぜんぜん違う。 という点があまり知られていない気がします。 *1 というか、自分も今回調べるまで、微妙に古い知識のままで完璧に知らなかったので、今一度理解した現時…

CircleCI上でsbtのインクリメンタルコンパイラのキャッシュが効かなくて再コンパイルされる問題

結論としては以下のissueに大体全部書いてあります。 Incremental compilation inside docker container broken since SBT 1.1.0 · Issue #4168 · sbt/sbt · GitHub 依存ライブラリのjarのキャッシュではなく、あくまでインクリメンタルコンパイラのキャッシ…

wartremoverを使ってscalapbのapplyのデフォルト引数を禁止する

というのを作りました。 scalapbというのは、scala向けのprotocol buffersやgRPCのためのライブラリですが、protobufのmessageに対応するcase classのコンパニオンオブジェクトのapplyには、すべて(protobuf上のデフォルト値と同様の)デフォルト引数が設定さ…