BUNDLE_ONLY を使った bundle install で余計な gem がインストールされないようにする
はじめに
Gemfile で厄介なのは、開発やテスト環境でのみ必要な gem をインストールしたいときに、bundle install を実行するとすべての gem がインストールされてしまうことです。これを防ぐために、Bundler 2.3 以降では BUNDLE_ONLY 環境変数を使用して、特定のグループの gem のみをインストールすることができます。
例えば、BUNDLE_ONLY=rubocop と設定して bundle install を実行すると、rubocop グループに属する gem のみがインストールされます。
同様に、 bundle config set --local only 'rubocop' としても同様の効果が得られます。
主な使い所は、CI 環境でテストを実行する際に、テストに必要な gem のみをインストールする場合などです。
Gemfile のグループ分け
rubocop を例にすると、Gemfile で以下のようにグループ分けをしておくと便利です。
# Gemfile
group :development, :test, :rubocop do
gem 'rubocop', require: false
gem 'rubocop-performance', require: false
gem 'rubocop-rails', require: false
gem 'rubocop-rspec', require: false
end
他にも、Gemfile でグループ分けをしておくと、bundle install --without オプションを使って特定のグループをインストールから除外することができます。例えば、開発やテスト環境でのみ必要な gem を :development や :test グループにまとめることができます。
おわりに
Bundler の BUNDLE_ONLY 環境変数や bundle config を活用することで、必要な gem のみをインストールすることができ、プロジェクトの依存関係をより効率的に管理することができます。これにより、開発環境と本番環境で異なる gem を使用する場合でも、適切な gem をインストールすることができます。