はじめに

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 をインストールすることができます。