Bundlerのグループ

グループの使用

依存性をグループ化する事で、グループ全体でオペレーションが実行出来るようになります。

# これらのGemは:defaultグループになります。
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を除いた、全てのGemをインストールします。 除外されないグループのいずれか1つに属しているGemであれば、そのGemはインストールされます。

$ bundle install --without test development

下記は、特定のグループと名前が付けられたグループの範囲外にある:default(デフォルト)グループをrequireしています。

Bundler.require(:default, :development)

下記は、デフォルトのGemに加え、現在のRails環境と同じ名前のグループのGemをrequireしています。

Bundler.require(:default, Rails.env)

下記は、読み込みパスに追加したいGemのグループを制限しています。 それらのグループのGemのみが、require可能になります。

require 'rubygems'
require 'bundler'
Bundler.setup(:default, :ci)
require 'nokogiri'
Bundler.setupの詳細

依存性をグループ化

あるケースでは、特定の環境でのみ有効にしたいGemのグループを持ちたいといった事かもしれません。 例えば、アプリケーション開発時(初期段階)にはSQLiteを使用し、 デプロイ時にはmysql2またはpgを使用するかもしれません。 この場合、あなたの開発マシン上にはMySQLまたはPostgresがインストールされる必要が無いため、 Bundlerにはこれをスキップして欲しいと考えるかもしれません。 これを行うために、依存性をグループ化します。

source 'http://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

下記のようにすることで、開発環境でproductionのグループをスキップするように、 Bundlerに指示をすることが可能になります。

$ bundle install --without production

Bundlerは、--without productionを使用してインストールしたGemを覚えています。 もしそれを知りたいのであれば、 APP_ROOT/.bundle/config(APP_ROOTはアプリケーションのルートのパス)内でBundlerが可能したフラグを確認してみてください。 bundle configを実行することで、Bundlerがそこに保存した全ての設定を確認することが可能で、 これはグローバル設定(~/.bundle/config内に格納)と、環境変数を通して設定された設定も出力してくれます。 詳細を知りたければ、Bundlerの設定情報を確認してみてください。

bundle config

もし、後でbundle installを何のフラグも無しに実行した場合、 Bundlerは最後のbundle install --without productionを覚えており、 再びそのフラグを使用します。 require 'bundler/setup'した際には、 Bundlerはこれらのグループを無視します。

Bundler.requireへのパラメーターを通して、 自動的にrequireするグループを指定することも可能です。 :defaultグループは、いずれのグループにも属さない全てのGemを含みます。 もし、Bundler.require(:default, :development)を呼び出した場合は、 Bundlerは:developmentグループ内のGemと同様に、 :defaultグループの全てのGemをrequireします。

デフォルトでは、Railsによって生成されたアプリケーションは、 application.rb内でBundler.require(:default, Rails.env)を呼び出し、 Gemfile内のRails環境のグループにリンクします。 もし、他のグループ(Rails環境にリンクしない)を使用している場合、 自動的にそれをrequireしたいのであれば、Bundler.require呼び出しへ追加することが可能です。

Bundler.require外のGemのグループにすることで、いつでも取り払う事が可能であり、 また、アプリケーション内の適切な場所でRubyのrequireを使用して手動でそれをrequire可能であることを忘れないでください。 これは特定のGemをrequireする必要が稀にあるかもしれず、 その場合には、それをするために必ずしもアプリケーションの起動が必要では無いという事です。

 Back to top

© 2010 - 2017 STUDIO KINGDOM