scala 2.13でコンパイルが遅いときにprofileを取る方法

Scalaコンパイルが遅くなった場合にprofileを取る方法について検索すると Speeding Up Compilation Time with scalac-profiling | The Scala Programming Language という記事がでてきたり、 https://github.com/scalacenter/scalac-profiling を利用した方法がヒットしますが、ここにでてくるpluginはscala 2.13では(そのままでは)使えなかったり、もう少し楽な別の方法があったりするのでまとめました。

出力イメージ

こんな感じのグラフの生成を目指します。(といってもほぼ公式が提供してるツールだけで出来る)

出力方法

1. profile-trace というコンパイラオプションを利用することでprofile情報が出力されたjsonを取得する

以下を指定してビルドすれば出力されます

Compile / compile / scalacOptions ++= Seq("-Yprofile-trace",  name.value + "-main.json"),
Test / compile / scalacOptions ++= Seq("-Yprofile-trace", name.value + "-test.json"),

2. chromeのtrace機能に読み込ませる

Chromeを起動し、 chrome://tracing/ をURL欄に入力して遷移 > Loadボタンから先程のファイルを読み込む ことで上記のツイートのような解析結果が見られます

備考

jdk9以降を使っている場合は問題が出てしまう( 参考 のでjdk8でビルドするか以下のようにscala 2.13.11のsnapshotを利用するかなどの工夫が必要になります。

resolvers += "scala-snapshot" at "https://scala-ci.typesafe.com/artifactory/scala-pr-validation-snapshots/",
ThisBuild / scalaVersion := "2.13.11-bin-7e2671b-SNAPSHOT"

おまけ

謝辞

全面的に https://mobile.twitter.com/xuwei_k さんに助けて頂きました。ありがとうございます🙏🙏🙏🙏🙏🙏🙏🙏