注意事項
- 2020/01/06 時点での話です
- 単一実行時のキャッシュの話です
状況
GitHub Actions で bundle install した gem のキャッシュが保存できるようになったので喜んで使っていたのですが、とある日にログを見たところ、以下のような表示が出ていました。キャッシュ容量の上限の 400MB を超えている、との警告です。
[warning]Cache size of ~526 MB (551997667 B) is over the 400MB limit, not saving cache.
何がそんなに容量を喰っているのか
gem の総容量が 400MB を超えるなんて普通ではどう考えてもありえません。何がそんなに容量を喰っているのかを以下のように調べました。
$ sudo du -sh vendor/bundle/ruby/2.6.0/gems/* (一部省略しています) 2.3M vendor/bundle/ruby/2.6.0/gems/capybara-3.29.0 6.8M vendor/bundle/ruby/2.6.0/gems/ffi-1.11.3 1.0M vendor/bundle/ruby/2.6.0/gems/json-2.3.0 3.8M vendor/bundle/ruby/2.6.0/gems/mail-2.7.1 2.4M vendor/bundle/ruby/2.6.0/gems/mimemagic-0.3.3 5.5M vendor/bundle/ruby/2.6.0/gems/nokogiri-1.10.7 239M vendor/bundle/ruby/2.6.0/gems/wkhtmltopdf-binary-0.12.5
wkhtmltopdf-binary が 239MB も喰っていた
なんと wkhtmltopdf-binary
が 239MB も喰っていました。0.12.5
が 239MB であり、0.12.4
が 125MB です。この 2つ が入っているだけで 364MB を喰います。
wkhtmltopdf-binary
が具体的にどのような構成になっているかは次のとおりです。リポジトリを直接見ても分かります。
$ cd vendor/bundle/ruby/2.7.0/gems/wkhtmltopdf-binary-0.12.5/bin $ ls -la .rwxr-xr-x 1.4k foobar 2 1 23:46 wkhtmltopdf .rw-r--r-- 0 foobar 2 1 23:46 wkhtmltopdf-binary.rb .rwxr-xr-x 14M foobar 2 1 23:46 wkhtmltopdf_centos_6_amd64.gz .rwxr-xr-x 14M foobar 2 1 23:46 wkhtmltopdf_centos_6_i386.gz .rwxr-xr-x 14M foobar 2 1 23:46 wkhtmltopdf_centos_7_amd64.gz .rwxr-xr-x 15M foobar 2 1 23:46 wkhtmltopdf_centos_7_i386.gz .rwxr-xr-x 15M foobar 2 1 23:46 wkhtmltopdf_debian_8_amd64.gz .rwxr-xr-x 16M foobar 2 1 23:46 wkhtmltopdf_debian_8_i386.gz .rwxr-xr-x 15M foobar 2 1 23:46 wkhtmltopdf_debian_9_amd64.gz .rwxr-xr-x 16M foobar 2 1 23:46 wkhtmltopdf_debian_9_i386.gz .rwxr-xr-x 15M foobar 2 1 23:46 wkhtmltopdf_macos_carbon.gz .rwxr-xr-x 16M foobar 2 1 23:46 wkhtmltopdf_macos_cocoa.gz .rwxr-xr-x 14M foobar 2 1 23:46 wkhtmltopdf_ubuntu_14.04_amd64.gz .rwxr-xr-x 15M foobar 2 1 23:46 wkhtmltopdf_ubuntu_14.04_i386.gz .rwxr-xr-x 15M foobar 2 1 23:46 wkhtmltopdf_ubuntu_16.04_amd64.gz .rwxr-xr-x 16M foobar 2 1 23:46 wkhtmltopdf_ubuntu_16.04_i386.gz .rwxr-xr-x 16M foobar 2 1 23:46 wkhtmltopdf_ubuntu_18.04_amd64.gz .rwxr-xr-x 17M foobar 2 1 23:46 wkhtmltopdf_ubuntu_18.04_i386.gz
なんと、各種プラットフォームおよびバージョンを網羅したバイナリが入っていました。
wkhtmltopdf-binary gem を使わないようにする
さすがにここまでだとつらいので、wkhtmltopdf-binary
gem を使わない方向で行きたいです。そのためにはもちろん、各々の環境に対して適切な wkhtmltopdf のバイナリをインストールすればよいことになります。
あるいは、wkhtmltopdf-binary を使うこと前提でなんとかする
とはいえ、wkhtmltopdf-binary
を Gemfile
に書いてあとはそれを bundle install
するだけで良いという環境は魅惑的です。「GitHub Actions のキャッシュ容量上限に引っかかるから」という理由だけで wkhtmltopdf-binary
を使わなというのも考えものです。なので、wkhtmltopdf-binary
を使いつつ GitHub Actions のキャッシュ容量上限に引っかからないようにすることを考えてみます。
方法の一つとしては、GitHub Actions 上では wkhtmltopdf-binary
のキャッシュを保存しないようにするという方法があります。キャッシュ保存前に $ rm -rf vendor/bundle/ruby/2.7.0/gems/wkhtmltopdf-binary-0.12.5
などと該当ディレクトリを削除します。
別の方法としては、GitHub Actions 上では wkhtmltopdf-binary
をインストールしない、という方法があります。しかしながらこの方法は、Gemfile.lock
の整合性の維持が難しいと思いますので*1、現実的ではないと思います。
他にも方法はあるかもしれません。
*1:不可能ではないと思いますが