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に関する別の話。 いきなり雑に説明に入りますが Scalaの普通のlibraryは、scala-libraryのjarのみに依存する scala-libraryのjarは、たとえば基本的に2.13.xなら、xの部分が変わっても、99…

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上のデフォルト値と同様の)デフォルト引数が設定さ…

scalapropsをdotty対応してみた知見

まだ継続してメンテナンスするかどうかわからないけど、以下のようなニュースが飛び込んで来たので、そろそろ試すか、と試した結果をメモ。 結果としては数十分から数時間書き換えた程度で、それなりに動きました。 最初scalazをやろうかとおもったけど、kin…

sbtで依存しているprojectのみにcleanなどの特定のタスクを実行する

以下のような質問を某所で受けたので 書きました gist.github.com 既にあるとか、もっといい感じに書ける、みたいなのがあればお知らせください。 ちなみに、デフォルトでは単体のprojectしかcleanしないのは、完全にsbt的には意図した挙動のはずです。 デフ…

sbtですべてのsub projectの特定のtaskを直列に実行するtaskを自動でつくる

要点をまとめると TaskではなくCommandでやってしまうなら少し簡単だが、(stateなどの他のkeyに依存して)taskからtaskを生成するには多少コツがいる(Def.taskDynを使う) なおかつ、sub projectの列挙を全自動でやりつつtaskを生成するのが多少コツがいる( Pr…

mockitoとscalatestについて

以下の投稿について、編集リクエストするレベルではないし、コメントするにも論点が多すぎてすごく長くなるため、別記事として自分のblogに書くことにしました qiita.com

scalafixのSymbol literal自動書き換えruleを作った

github.com

GuiceのTypeLiteralをScalaのmacroを使って生成する

ウォ〜〜scalaでguice使う時に injector.getInstance(Key.get(new TypeLiteral[Foo[Bar]]{}))って書くの面倒くさいにゃんよ〜〜!! 単に injector.instanceOf[Foo[Bar]]って書けて欲しい〜〜!!— にゃおきゃっと (@nyaocat) July 29, 2019

travis-ciでwindowsを使ってsbtでScalaプロジェクトのテストをする

2018年10月くらいからWindows使えるようになってたんですね。まだexperimentalな扱いみたいですが。 blog.travis-ci.com

scala-libraryはなぜ後方バイナリ互換のみならず前方バイナリ互換も維持しないといけないか

そういえば、はっきり書かれたドキュメントが思い当たらない(or 存在していたとしても、改めて日本語で書くことに意味はあるだろうと思う)、ので、書いてみることにする。 自分が知ってる理由の1つとしては、以下のようなことをすると、普通にNoClassDefFoun…

ScalaMatsuri 2019に参加して発表した

アンカンファレンスで発表した資料貼っておきます

Scalaコンパイラがアノテーションの引数の型チェックを一部やってくれない

バグなのか仕様なのか迷ったので、一旦blogにメモしておきます。

Phil Bagwell Awardを受賞しました

Phil Bagwell Awardって何?という人は、まず以下を読んでください。 www.scala-lang.org (このblog書いてる時点ではまだ上記ページに自分の名前載ってないですが、そのうち載るはず?) 簡単にまとめると Scalaコミュニティに対して貢献した人に送られる賞 2…

mockito + jdk11 + sbtでforkの設定をしない、という組み合わせでjava.sqlのclassをmockしようとすると動かない

タイトルでほぼ言い尽くしてますが、いちおう条件改めて詳細に書くと

community buildのjenkinsのログを見てライブラリを最新のScalaに対応させるという貢献をする方法

最近以下の自分のtweetきっかけで大炎上発生などがありましたが 🤔https://t.co/PVGVv3RY5o"remove Scala-CoC-incompatible projects"— Kenji Yoshida (@xuwei_k) April 28, 2019 https://contributors.scala-lang.org/t/coc-compatible-community-builds/3097…

sbtで指定されたプロジェクトのtaskのみを並列に実行する

(sbt標準にあったらしい?ので)下の方に追記したよ! すごく簡単に説明すると、以下のような定義があったときに lazy val a = project lazy val b = project lazy val c = project "a"と"b"の"compile"だけを"並列に"実行したい、みたいな。(cのcompileは実…

リクルートマーケティングパートナーズに入社しました

前回↓ "2月になったくらいのタイミングでまた別途書きます" と言っていたやつです。

ドワンゴを退職しました

4年11ヶ月勤めたドワンゴを退職しました。2019年1月17日が最終出社日で、1月中は有給休暇消化期間で、2月から新しいところで働きます。

2018年振り返り

これ書いている時点で

jsonやprotobufのtextformatからScalaPBのcase classに変換するマクロ

作りました。 実際に最初に作ったのは1年以上前で、仕事のコードの一部に入れていたのですが、いろいろ整理したり機能加えて、OSSにして公開しました。 以下関連コミット

半年間育児休暇を取った

以下、普段と違いプログラミングの話題があまり出てこない、あくまで個人が育児休暇取った話を書くだけなのでご注意(?)ください。 最後の方に少しだけプログラミングの話出てきます。

Scalaのコミット権限をもらった

ここでいうScalaとは https://github.com/scala/scala のScala programming language本体のことです。 以前、以下のようなblogを書きましたが

新しいMacBook Proを買ったのでScalaのコンパイラのベンチマークをした

4年以上前に買ったものを買い替えました。計測条件は後で書くとして、雑な結論を先に書いておくと