Bundlerの使い方
・Bundlerとbundle initのインストール
まず最初に、Bundlerをインストールする必要があります。
“gem install bundler”でBundlerをインストールでき、既にインストール済みであればアップデートすることもできます。
実行すると、大体下の画面のような感じになるはずです。
手動でBundlerを使い始めるために、”bundler_example”というフォルダを作成してみましょう。
また、これを実行することで”bundler_example”の中に”Gemfile”が生成されます。
Gemfileの編集について
自動生成されたGemfileは、source “https://rubygems.org"から構成されています。
これはどういう意味かというと、Bundlerがgemを”https://rubygems.org”の中に探しに行くということです。
もし自分自身の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”についてもっと知りたい場合は、ここを見るといいでしょう。
Gemへの追加
ここでは、いくつかの依存性をプロジェクトに追加してみましょう。
上記の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のインストール
開発について
開発のためにgemをインストールするには、”bundle install”を実行すればよいです。
そうすると、以下の画面と似たようなものが出てくるはずです。
また、そうするとGemfile.lockというものが作成されます。
Gemfile.lockに関しては、次の章で見ていきます。
デプロイについて
デプロイするには、 — deploymentというオプションを使います。
こうすることで、”./vendor/bundle”に関する全ての依存性をインストールすることができます。
また、このコマンドを実行するには、必要なものがいくつかあります。
- “Gemfile.lock”というファイルが必要である。
- “Gemfile.lock”が最新化されること。
“bundle install”というコマンドについてもっと詳しく知りたい場合は、ここをクリックしてください。
Gemfile.lock
Bundlerはこのファイルを、全てのgemの名前とバージョンを保存しておくために使用します。
もしアプリケーションがマシンから取り除かれたとしても、それはいつも使っているのと全く同じコードを保証してくれます。
初めてある特定のgemをインストールした後、Bundlerはそのバージョンを固定します。
それを更新するには、bundler updateを使う、もしくはGemfile内のそのバージョンを変更する必要があります。
このファイルは、Bundlerのコマンド(bundle installやbundle updateなど)を使用した際に自動で生成され、バージョンコントロールの際にこれをチェックしてください。
前の章で見たGemfile.lockは、以下のようなものでした。
これをもう少し噛み砕くと、以下のようになります。
GEM
remote
- gemのソースです。specs
- インストールされているgem(とそのバージョン)です。PLATFORMS
- アプリケーションで使われているプラットフォームです。(詳しくはここを見てください。)DEPENDENCIES
-Gemfileで定義されているgemです。BUNDLED WITH
- Gemfile.lockを変更するために最後に使われたBundlerのバージョンです。
コマンドの実行 — bundle exec
まず最初に、例を見てみましょう。
$ bundle exec rspec
$ bundle exec rails s
こうすることで、現在のbundle環境におけるコマンド(ここでは”rspec”と”rails s”)を実行することが可能になり、Gemfile内の全てのgemで”require”を使うことで使用することができます。
“bundle exec”について詳しく知りたい場合は、ここを見てください。
Gemの更新 — bundle outdatedとbundle updated
では、いくつか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"
“bundle outdated *gems”を使えば、gemを指定することもできます。
もしバージョンが1.6.7.2になっている”nokogiri”があったとして、どうすればそれをアップデートできるでしょうか?
“Gemfile.lock”で固定されているため、”bundle install”では新しいバージョンのものをインストールできません。
そのため、ここでは”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によって管理されているアプリケーションを動かす場合、以下のコマンドについては知っておくべきでしょう。
・Bundlerを初期化するには
$ bundle init
・初めて”Gemfile”を作成した後には
$ bundle install
・”Gemfile.lock”の成果をバージョンコントロールに追加するには
$ git add Gemfile.lock
・このリポジトリをもう1つのデプロイマシンに反映させるには
$ bundle install
・このリポジトリをデプロイマシンに反映させるには
$ bundle install --deployment
・最新の依存性を”Gemfile”の変更後に反映させるには
$ bundle install
・アップデートしたgemfile.lockを確実にバージョンコントロールに反映させるには
$ git add Gemfile.lock
・”bundle install”が矛盾を訴えてくる場合、”Gemfile”内で変更したgemを手動でアップデートする必要があります。
$ bundle update rails thin
・Gemfile(5)内にリストアップされているgemとマッチする全てのgemを最新バージョンにアップデートするには
$ bundle update
トラブルシューティング
Bundlerを使っているプロジェクト内で”git bisect”を実行してください。
Git Bisect Guideを見るといいでしょう。