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 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する必要が稀にあるかもしれず、
その場合には、それをするために必ずしもアプリケーションの起動が必要では無いという事です。
© 2010 - 2017 STUDIO KINGDOM