依存関係をグループ化することで、グループ全体に対して操作を実行できます。
# These gems are in the :default group
gem 'nokogiri'
gem 'sinatra'
gem 'wirble', group: :development
group :test do
gem 'faker'
gem 'rspec'
end
group :test, :development do
gem 'capybara'
gem 'rspec-rails'
end
gem 'cucumber', group: [:cucumber, :test]
リストされたグループ以外のすべてのGemをインストールするようにBundlerを設定します。少なくとも1つの除外されていないグループ内のGemはインストールされます。
$ bundle config set --local without test development
特定のグループのGemをrequireします。名前付きグループ外のGemは`:default`グループに含まれることに注意してください。
Bundler.require(:default, :development)
デフォルトのGemと、現在のRails環境と同じ名前のグループのGemをrequireします。
Bundler.require(:default, Rails.env)
ロードパスに追加するGemのグループを制限します。これらのグループ内のGemのみがrequire可能です。ただし、`Bundler.setup`は一度しか呼び出せないことに注意してください。後続の呼び出しはすべてno-opです。特に、`bundle exec`を通してスクリプトを実行すると`Bundler.setup`が既に呼び出されるため、ユーザーコード内のそれ以降の呼び出しは無視されます。`bundle exec`によってロードされるグループを制御するには、`BUNDLE_WITH`と`BUNDLE_WITHOUT`の設定を使用できます。
require 'bundler'
Bundler.setup(:default, :ci)
require 'nokogiri'
`group :name, optional: true do`を使用してグループをオプションとしてマークし、`bundle config set --local with name`を使用してオプショングループのインストールを選択できます。
特定の環境でのみ意味のあるGemのグループがいくつかある場合があります。たとえば、アプリケーションを(初期段階では)SQLiteを使用して開発し、`mysql2`または`pg`を使用してデプロイする場合があります。この例では、開発マシンにMySQLまたはPostgresがインストールされていない可能性があり、Bundlerにスキップさせたい場合があります。
これを行うには、依存関係をグループ化できます。
source 'https://rubygems.org'
gem 'rails', '3.2.2'
gem 'rack-cache', require: 'rack/cache'
gem 'nokogiri', '~> 1.4.2'
group :development do
gem 'sqlite3'
end
group :production do
gem 'pg'
end
開発では、Bundlerに`production`グループをスキップするように指示できます。
$ bundle config set --local without production
Bundlerはフラグを`APP_ROOT/.bundle/config`に保存し、次回`bundle install`を実行すると、production Gemをスキップします。同様に、`bundler/setup`をrequireすると、BundlerはこれらのグループのGemを無視します。Bundlerによって保存されたすべての設定は`bundle config`を実行することで確認できます。これにより、グローバル設定(`~/.bundle/config`に保存)と環境変数で設定された設定も出力されます。Bundlerの設定に関する詳細については、以下を参照してください:bundle_config
`Bundler.require`のパラメータを通じて、自動的にrequireするグループを指定することもできます。`:default`グループには、どのグループにもリストされていないすべてのGemが含まれます。`Bundler.require(:default, :development)`を呼び出すと、Bundlerは`:default`グループのすべてのGemと`:development`グループのGemを`require`します。
デフォルトで、Railsで生成されたアプリケーションは`application.rb`で`Bundler.require(:default, Rails.env)`を呼び出します。これにより、`Gemfile`のグループがRails環境にリンクされます。Rails環境にリンクされていない他のグループを使用する場合は、自動的にrequireする場合は`Bundler.require`の呼び出しに追加できます。
いつでもGemのグループを`Bundler.require`から除外して、アプリケーションの適切な場所でRubyの`require`を使用して手動でrequireできます。特定のGemをrequireするのに時間がかかり、アプリケーションの起動時に毎回必要ない場合に、この方法をとる場合があります。