search term:

sbt-salad-days を用いた scaladoc ファイルサイズの縮小

数日前に Maven Central Repository が Maven Central 公開制限を導入した。この背景は Brian Fox さんの Open Publishing, Commercial Scale にまとめられている:

オープンソースなプロジェクトのメンテナが普通にリリースをしているのは問題無い。しかし、大規模な商用団体が Maven Central を SDK、エージェント、自動生成クライアント、統合モジュール、その他の商用ソフトのコンポーネントの末端分配チャンネルとして使っているのは別問題だ。

ということで、高容量を必要とする商用団体は Maven Central Publisher Pro に移行、オープンソースのプロジェクトはリリースのサイズを削減するか、例外審査の申請をしてくれということらしい。

今これを書いている時点では、ファイルサイズの仮制限は月あたり 80 MB となっている。

これを発端として、Scala ライブラリメンテナの多くが同時に気付かされたのが Scala 3 が生成する Scaladoc のファイルのサイズが異様に大きく、バイトコードの JAR より大きい。unzip -l で覗いてみると、Scaladoc JAR の中にフォントとか VirtusLab/Inkuire 検索エンジンみたいなものが入っていて、ファイルサイズが都合 2.5 MB 以上となっている:

   203030  01-01-2010 00:00   webfonts/fa-solid-900.eot
   309828  01-01-2010 00:00   fonts/Inter-Regular.ttf
   314712  01-01-2010 00:00   fonts/Inter-Medium.ttf
   315756  01-01-2010 00:00   fonts/Inter-SemiBold.ttf
   316100  01-01-2010 00:00   fonts/Inter-Bold.ttf
   370523  01-01-2010 00:00   scripts/scaladoc-scalajs.js
   747545  01-01-2010 00:00   webfonts/fa-brands-400.svg
   918991  01-01-2010 00:00   webfonts/fa-solid-900.svg
   939517  01-01-2010 00:00   scripts/inkuire.js

当座のしのぎとして、全部のフォントと scripts/inkuire.js を削除するプラグインを sbt 1.x と 2.x系の両方で作った:

addSbtPlugin("com.eed3si9n" % "sbt-salad-days" % "0.1.0")

これで、小さい Scaladoc なら 420 KB まで削減した:

$ ls -lh /private/tmp/aaa/target/scala-3.3.8/aaa_3-0.1.0-SNAPSHOT-javadoc.jar
420K /private/tmp/aaa/target/scala-3.3.8/aaa_3-0.1.0-SNAPSHOT-javadoc.jar

https://repo1.maven.org/maven2/com/eed3si9n/sbt-salad-days_sbt2_3/0.1.0/ 自身の Scaladoc も 420 KB だ。

訳註

salad days というのは、古くからある英語の言い回しで、野菜と青かったというのをかけて「青春時代」という意味だが、アメリカ英語では「振り返って見ればあの頃が全盛期だった」みたいなポジティブな意味でも使われることも多い。毎日サラダを食べればダイエットになるという意味じゃないが、誤用で敢えて付けた名前。

参考文献