このガイドは、Bundler v1.12用に書かれています。異なるバージョンを使用している場合は、出力結果が異なる可能性があることに注意してください。Bundlerのバージョンを確認するには、bundle -v
を実行してください。
一部のフレームワークはBundlerを組み込みでサポートしています。例えば、rails new app
を実行すると、Bundlerが自動的に初期化されます。
まず、Bundlerをインストールする必要があります。
$ gem install bundler
このコマンドは、既にインストールされているBundlerも更新します。出力結果は以下のようになります。
$ gem install bundler
Successfully installed bundler-1.12.5
1 gem installed
Bundlerを手動で初期化するには、以下のようにします(bundler_example
はアプリケーションのフォルダになります)。
$ mkdir bundler_example && cd bundler_example
$ bundle init
これにより、bundler_example
フォルダ内にGemfile
が作成されます。
# frozen_string_literal: true
# A sample Gemfile
source "https://rubygems.org"
# gem "rails"
自動生成されたGemfileには、source "https://rubygems.org"
が含まれています。これは、Bundlerがhttps://rubygems.org
でGemを検索することを意味します。独自のRubyGemsサーバーや別のサーバーを使用する場合は、これを変更してください。
source "https://your_ruby_gem_server.url"
複数のGemソースがある場合は、ブロックまたは:source
を使用できます。
source "https://your_ruby_gem_server.url" do
# gems
end
gem "my_gem", source: "https://your_2_ruby_gem_server.url"
ブロック内のGemは、指定されたソースから取得されます。
source
の詳細については、こちらをご覧ください。
次に、プロジェクトにいくつかの依存関係を追加しましょう。
# frozen_string_literal: true
# A sample Gemfile
source "https://rubygems.org"
gem "rails"
上記のGemfileを使用すると、bundler install
は最新バージョンのrails
Gemをインストールします。
特定のバージョンをインストールしたい場合は、カンマの後に指定します。
gem "rails", "3.0.0"
または、この構文を使用します。
gem "rails", "~> 4.0.0" # which is same as gem "rails", ">= 4.0.0", "< 4.1.0"
gem "nokogiri", ">= 1.4.2"
Gemfile内のGemの詳細については、こちらをご覧ください。
Gemfile構文の詳細については、gemfileマニュアルページをご覧ください。
開発用のGemをインストールするには、bundle install
を実行します。
出力結果は次のようになります。
Fetching gem metadata from https://rubygems.org/
Fetching version metadata from https://rubygems.org/
Fetching dependency metadata from https://rubygems.org/
Resolving dependencies...
Using mini_portile2 2.1.0
Using pkg-config 1.1.7
Using bundler 1.12.5
Using nokogiri 1.6.8
Bundle complete! 1 Gemfile dependency, 4 gems now installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.
また、Gemfile.lock
ファイルも作成されます。
GEM
remote: https://rubygems.org/
specs:
mini_portile2 (2.1.0)
nokogiri (1.6.8)
mini_portile2 (~> 2.1.0)
pkg-config (~> 1.1.7)
pkg-config (1.1.7)
PLATFORMS
ruby
DEPENDENCIES
nokogiri (>= 1.4.0)
BUNDLED WITH
1.12.5
このGemfile.lockについては、次の章で説明します。
デプロイには、--deployment
オプションを使用してください。
$ bundle install --deployment
これにより、すべての依存関係が./vendor/bundle
にインストールされます。
このコマンドを実行するには、いくつかの要件があります。
Gemfile.lock
ファイルが必要です。Gemfile.lock
は最新である必要があります。bundle install
コマンドの詳細については、こちらをクリックしてください。
Bundlerはこのファイルを使用して、すべてのGemの名前とバージョンを保存します。これにより、アプリケーションがマシン間を移動する場合でも、常に同じコードを使用することが保証されます。指定されたGemが初めてインストールされると、Bundlerはそのバージョンをロックします。更新するには、bundler update
を使用するか、Gemfile
でバージョンを変更する必要があります。
このファイルは、Bundlerのコマンド(例:bundle install
またはbundle update
)を使用すると自動的に作成/更新され、バージョン管理にチェックインする必要があります。
前の章のGemfile.lockを例として使用します。
GEM
remote: https://rubygems.org/
specs:
mini_portile2 (2.1.0)
nokogiri (1.6.8)
mini_portile2 (~> 2.1.0)
pkg-config (~> 1.1.7)
pkg-config (1.1.7)
PLATFORMS
ruby
DEPENDENCIES
nokogiri (>= 1.4.0)
BUNDLED WITH
1.12.5
詳しく見ていきましょう。
GEM
remote
- Gemのソースspecs
- インストールされたGem(バージョン付き)。mini_portile2
はnokogiri
の依存関係であることがわかります(インデントされているため)。PLATFORMS
- アプリケーションで使用されているプラットフォーム(詳細はこちら)。DEPENDENCIES
- Gemfileで定義されたGem。BUNDLED WITH
- 最後にGemfile.lock
を変更するために使用されたBundlerのバージョン。まずは例を見てみましょう。
$ bundle exec rspec
$ bundle exec rails s
これにより、現在のバンドルコンテキストでコマンド(ここではrspec
とrails s
)を実行でき、Gemfile内のすべてのGemをrequire
して使用できるようになります。
bundle exec
コマンドの詳細については、こちらをクリックしてください。
次に、いくつかのGemを更新しましょう。bundle outdated
を使用すると、利用可能な新しいバージョンを持つインストール済みのGemを一覧表示できます。
$ bundle outdated
Fetching gem metadata from https://rubygems.org/
Fetching version metadata from https://rubygems.org/
Fetching dependency metadata from https://rubygems.org/
Resolving dependencies.......
Outdated gems included in the bundle:
* nokogiri (newest 1.6.8, installed 1.6.7.2) in group "default"
Gemを指定することもできます(bundle outdated *gems
)。
nokogiri
はバージョン1.6.7.2でロックされています。どのように更新できますか?bundle install
は、Gemfile.lock
ファイルでロックされているため、新しいバージョンをインストールしません。bundle update
を使用する必要があります。
$ bundle update
Fetching git://github.com/middleman/middleman-syntax.git
Fetching gem metadata from https://rubygems.org/
Fetching version metadata from https://rubygems.org/
Fetching dependency metadata from https://rubygems.org/
Resolving dependencies.....
Installing nokogiri 1.6.8 (was 1.6.7.2) with native extensions
Using i18n 0.7.0
... (and more)
Bundle updated!
引数なしでbundle update
を使用すると、すべてのGemを(Gemfile
によって制限された)最新バージョンに更新しようとします。
特定のGemを更新するには、bundle update *gems
を使用します。
bundle outdated
コマンドの詳細については、こちらをクリックしてください。
bundle update
コマンドの詳細については、こちらをクリックしてください。
一般的に、Bundlerで管理されているアプリケーションを使用する場合は、次のワークフローを使用する必要があります。
$ bundle init
Gemfile
を作成したら、以下を実行します。$ bundle install
Gemfile.lock
をバージョン管理にチェックインします。$ git add Gemfile.lock
$ bundle install
$ bundle install --deployment
Gemfile
を変更したら、以下を実行します。$ bundle install
$ git add Gemfile.lock
bundle install
が競合を報告した場合は、Gemfile
で変更した特定のGemを手動で更新します。$ bundle update rails thin
$ bundle update
git bisect
の実行Git Bisectガイドを参照してください。