RailsプロジェクトにCircleCIを導入したがGemキャッシュが効いていない時の対応方法


Railsプロジェクトで使用するCICDツールとしてCircleCIを導入・ドキュメントを参考にして設定ファイルを書いていましたが、キャッシュが効いていない動きを見せていました。

▼キャッシュが効いておらず、毎回bundle installをしているような動き

▶︎この時点のジョブログ
▶︎この時点の設定ファイル

以下、CircleCIでbundle installのキャッシュが効いていない時の対処方法についてです。

解消方法

  • bundle config set --local pathコマンドで、Gemインストール先指定
  • 今までのキャッシュを使用しないよう設定ファイルを書き換え

下記をbundle installの前に追記して、対応しました。

command: bundle config set --local path 'vendor/bundle'

Githubでも見れるようにしてあります。

  • キャッシュの対象をvender/bundleに指定しているが、そこにGemが見つからず毎回インストールが走ってしまっている(キャッシュが効いていない)
  • bundle installコマンドはグローバルにGemをインストールする、プロジェクトローカルにGemたちをインストールしたいときは--path指定を入れる

以上から、CircleCI上でキャッシュがあるかどうかを確認しに行く先であるvender/bundleにGemたちがインストールされるようbundle config set --local path 'vendor/bundle'を追記。

ここまでの対応でキャッシュは効くかなと思いましたが、効きませんでした。理由としては、CircleCIの方で「すでにキャッシュファイルあるので、キャッシュ保存スキップしますわ」となってしまうから。

▼キャッシュ保存がスキップされる様子

▶︎この時点のCircleCIログ

キャッシュ保存が実行されるよう、今までのキャッシュを使用しないように設定ファイルを書き換える対応をしました。

▼修正箇所

p
▶︎この時点のコミット


以上の対応を行った結果、キャッシュはちゃんと効くようになりました。

▼キャッシュが効いている様子

▶︎この時点のCircleCIログ


参考