もし、あなたのアプリケーションが特定のRubyのバージョン、またはエンジンを必要とするのであれば、
下記の引数とRubyのメソッドを使用して必要とするものを指定します。
特に指定が無い引数は、任意(OPTIONAL)になります。
- 名前 (必須)
-
必要とする各Gemを、単一のgem
行として指定します。
gem "nokogiri"
- バージョン
-
各Gemには、1つまたは複数のバージョンを指定することも可能です。
gem "nokogiri", ">= 1.4.2"
gem "RedCloth", ">= 4.1.0", "< 4.2.0"
- 必要とするファイル (
:require
)
-
各GemがBundler.require
を通して自動的にrequireされる際に、
使用されるべきファイルを指定することが可能です。
複数のファイルを指定したファイルの配列、
必要とするファイルがGemと同じ名前を持つ場合はtrue
、
自動的にrequireされることを防ぎたい場合はfalse
を渡すことが可能です。
gem "redis", :require => ["redis/connection/hiredis", "redis"]
gem "webmock", :require => false
gem "debugger", :require => true
この引数のデフォルトは、Gemの名前になります。
例えば、下記の3つは全て同じ意味になります。
gem "nokogiri"
gem "nokogiri", :require => "nokogiri"
gem "nokogiri", :require => true
- グループ(
:group
または :groups
)
-
各Gemは、1つまたは複数のグループに属することが可能です。
どのグループにも属さないGemは、default
グループに属することになります。
gem "rspec", :group => :test
gem "wirble", :groups => [:development, :test]
Bundler実行時に、Bundler.setup
とBundler.require
の2つの主メソッドに対し、
特定のグループがそれらに及ぼす影響を制限することが出来ます。
# setupは、Rubyの読み込みパス(load path)へGemを追加します
Bundler.setup # デフォルトでは、全てのグループがセットアップされます。
require "bundler/setup" # Bundler.setupと同様です。
Bundler.setup(:default) # defaultグループだけがセットアップされます。
Bundler.setup(:test) # testグループ(defaultは含まれない)だけがセットアップされます。
Bundler.setup(:default, :test) # defaultとtestグループがセットアップされます。
# 指定されたグループ内の全てのGemをrequireします。
Bundler.require # デフォルトは、defaultグループだけがrequireされます。
Bundler.require(:default) # 上記と同様です。
Bundler.require(:default, :test) # defaultとtestグループをrequireします。
Bundler.require(:test) # testグループだけをrequireします。
BundlerのCLIは、--without
オプションを付けることで、
bundle install
でインストールすべきでは無いGemのグループのリストを指定することが可能です。
複数のグループを無視するには、空白でそれらのグループを区切ります。
bundle install --without test
bundle install --without development test
bundle install --without test
の実行後に、
Bundlerは最後のインストールで除外したtestグループを記憶します。
次のbundle install
の実行時に--without
オプションが無くても、
Bundlerは同じ呼び出しを行います。
また、引数無しのBundler.setup
の呼び出し、
またはrequire "bundler/setup"
の呼び出しは、
--without
によって除外されたものを除く全てのグループのsetupを行います。
(言うまでもありませんが、それらを利用することは出来ません)
bundle install
の際に、
Bundlerは必要とされるGemとそれらの依存性の全ての正統な単一のリストを作成するために、
全てのGemのダウンロードと評価を行うことに注意してください。
これは、異なるグループで、同じGemの異なるリストを作成することが出来ないことを意味します。
詳細については、Bundlerの原理を参照してください。
- プラットフォーム (
:platforms
)
-
もし、Gemが特定のプラットフォーム、または特定のプラットフォームの集まりでのみ使用されるべきなのであれば、
それを指定することが可能です。
他のプラットフォームのために、Gemのグループを除外するインストール時の--without
を必要としない点を除いて、
本質的にはグループと同じです。(翻訳に自信なし)
Gemfile
には多数のプラットフォームが存在します。
ruby | C Ruby (MRI) or Rubinius, but NOT Windows |
ruby_18 | ruby AND version 1.8 |
ruby_19 | ruby AND version 1.9 |
ruby_20 | ruby AND version 2.0 |
ruby_21 | ruby AND version 2.1 |
ruby_22 | ruby AND version 2.2 |
mri | Same as ruby, but not Rubinius |
mri_18 | mri AND version 1.8 |
mri_19 | mri AND version 1.9 |
mri_20 | mri AND version 2.0 |
mri_21 | mri AND version 2.1 |
mri_22 | mri AND version 2.2 |
rbx | Same as ruby, but only Rubinius (not MRI) |
jruby | JRuby |
mswin | Windows |
mingw | Windows 32 bit 'mingw32' platform (aka RubyInstaller) |
mingw_18 | mingw AND version 1.8 |
mingw_19 | mingw AND version 1.9 |
mingw_20 | mingw AND version 2.0 |
mingw_21 | mingw AND version 2.1 |
mingw_22 | mingw AND version 2.2 |
x64_mingw | Windows 64 bit 'mingw32' platform (aka RubyInstaller x64) |
x64_mingw_20 | x64_mingw AND version 2.0 |
x64_mingw_21 | x64_mingw AND version 2.1 |
x64_mingw_22 | x64_mingw AND version 2.2 |
グループと同様、1つ以上のプラットフォームを指定することが可能です。
gem "weakling", :platforms => :jruby
gem "ruby-debug", :platforms => :mri_18
gem "nokogiri", :platforms => [:mri_18, :jruby]
グループを伴う全ての操作(bundle install
、Bundler.setup
、Bundler.require
)は、
現在のプラットフォームと一致しない全グループが、明示的に除外された場合と全く同じ挙動をします。
- Gem供給元 (
:source
)
-
:source
オプションを使用して、Rubygemsの代わりにGem用のリポジトリを選択することが出来ます。
gem "some_internal_gem", :source => "https://gems.example.com"
これは、このsourceからGemを読み込むことを強制させて、
ファイルの先頭で宣言されるグローバルなsourceを無視します。
もし、このsourceにGemが存在しなければ、インストールは行われません。
Bunlderは最初に選択されたsource内で親を探すことで、そのGemの子の依存性を検索しますが、
もしそれらが見つからなかった場合は、sourceの優先度に記述された順番に従って、
グローバルのsourceをフォールバックします。
この方法で特定のsourceリポジトリを選択する方法は、
前述したグローバルな供給元 (#source)で説明した不明確なGemを抑制することにも繋がります。
- GIT (
:git
)
-
必要であれば、特定のGitリポジトリに置かれているGemを指定することが可能です。
リポジトリは、公開(public - http://github.com/rails/rails.git
)、
またはプライベート(private - [email protected]:rails/rails.git
)のどちらかになります。
もし、リポジトリがプライベートであれば、bunlde install
を行うユーザーは、
$HOME/.ssh
内で利用可能な適切なキーを持たなければいけません。
Gitリポジトリは、:git
パラメーターで指定します。
group
、platforms
、require
オプションが利用可能で、
通常のGemと同じように使用することが出来ます。
gem "rails", :git => "git://github.com/rails/rails.git"
Gitリポジトリは、gemが含まれるディレクトリのルートに拡張子が.gemspec
のファイルを、
少なくとも1つは持つべきです。
このファイルには、gem build
コマンドに必要とされる正しいGemの仕様が含まれていなければなりません。
もしGitリポジトリが.gemspec
を持たなければ、
Bundlerはそれを作成しようと試みますが、
依存性、実行ファイル、C拡張のコンパイル手順が含まれないものになります。
その結果、あなたのアプリケーションへ正しく統合出来ない可能性があります。
Gitリポジトリが、あなたが添付したGem用の.gemspec
ファイルを持ち、バージョン指定子が提供されている場合、
Gitリポジトリは.gemspec
が指定するバージョン指定子にマッチする場合にのみ有効になることを意味します。(翻訳に自信なし)
そうでなければ、Bundlerは警告を出力します。
gem "rails", "2.3.8", :git => "git://github.com/rails/rails.git"
# bundle install will fail, because the .gemspec in the rails
# repository's master branch specifies version 3.0.0
もしGitリポジトリが、あなたが添付するGemのための.gemspec
を持たない場合、
バージョン指定子は提供されなければいけません。
Bundlerは単純に.gemspec
そのバージョンを使用し、それを作成します。
Gitリポジトリは多くの追加オプションをサポートします。
オプション |
説明 |
branch、 tag、 ref |
これらのオプションのいずれか1つが指定しなければいけません。
デフォルトは、:branch => "master" です。
|
submodules |
:submodules => true の指定は、
Bundlerに対して、Gitリポジトリに含まれるサブモジュールの拡張が行われます。
|
もし、Gitリポジトリが複数の.gemspecを含む場合、
各.gemspec
は、ファイルシステム内の同じ場所に配置されているgemの.gemspec
になります。
|~rails [git root]
| |-rails.gemspec [rails gem located here]
|~actionpack
| |-actionpack.gemspec [actionpack gem located here]
|~activesupport
| |-activesupport.gemspec [activesupport gem located here]
|...
Gitリポジトリ内に置かれているGemをインストールするために、
Bundlerはgemspecを含むディレクトリへの変更、gem build name.gemspec
の実行、
そしてその結果のGemのインストールを行います。
Rubygemsに標準で付属するgem build
コマンドは、
それが置かれているディレクトリのコンテキスト内で.gemspec
を評価します。
- GitHub (
:github
)
-
もし、GitHubにホストされ公開されているGitリポジトリを使用したいのであれば、
:github
の略記を使用して、
GitHubのユーザー名とリポジトリ名(末尾の".git"無しで)だけをスラッシュ区切りで指定して使用することが出来ます。
もし、ユーザー名とリポジトリ名が同じであれば、片方を省くことが出来ます。
gem "rails", :github => "rails/rails"
gem "rails", :github => "rails"
上記のどちらも、下記と同じように評価されます。
gem "rails", :git => "git://github.com/rails/rails.git"
更に必要とするのであれば、特定のブランチを選択することも可能です。
gem "rails", :github => "rails/rails", :branch => "branch_name"
- パス (:path)
-
ファイルシステム上の特定の場所に置かれたGemを指定することが可能です。
相対パスは、Gemfile
に含まれるディレクトリから相対的に解決されます。
:git
オプションの意味付けと同様、
:path
オプションは、そのディレクトリにGemのための.gemspec
が含まれるか、
またはBundlerが使用するべき明確なバージョンが指定されているか、どちらかの問いを必要とします。
:git
とは異なり、Bundlerはパスとして指定されたGemのために、C拡張をコンパイルしません。
gem "rails", :path => "vendor/rails"