bundlerによるgemのバージョン管理

/

bundler

bundlerはRubyのgemを管理するためのライブラリです。
bundlerを利用すればgemのバージョンを管理してgem同士の互換性を維持することが出来ます。

bundler.io
トップページがかわいいです

bundlerを使う理由

Rubyでは例えばRailsなどのフレームワークを使ってアプリケーションを作る場合には多くのgemを組み合わせて一つのアプリケーションを作ります。gemはそれぞれが個別にアップデートされるので、各gemのバージョンによってはgem同士の連携が上手くいかずにアプリケーション全体がうまく動かなくなるという互換性の問題が生じる場合があります。
そのためbundlerを利用して各gemのバージョンを管理する事でgem同士のエラーを防いでアプリケーションがきちんと動作するようにします。

インストール

RubyGemsからインストールを実行します。

$ gem install bundler

この時bundlerが既にインストールされていた場合にはアップデートが実行されます。

Gemfileの作成

まずは利用するgemを登録するGemfileを作成します。bundlerを実行する際のコマンドはbundleになります。

mkdir myapp
cd myapp
# bundlerを初期化してGemfileを作成
$ bundle init

Gemfileでインストールするgemの指定をする

Gemfileではgem [gem name]でダウンロードするgemを指定できます。

gem 'rails'

またgem [gem name][version]でバージョンを指定出来ます。

gem 'rails', '4.0.0'

バージョン指定はさらに細かく指定することも出来ます。

gem 'rails','=> 4.0.0'

この表記では4.0以上のバージョンで最新のものがインストールされます。

gem 'rails','~> 4.0.0'

またこの表記法だと4.0.0以上4.1未満のバージョンがインストールされます。つまりマイナーアップデートのみに対応する形になります。

このようにプロジェクトに必要なgemとgemのバージョンを指定することでプロジェクトのgemを管理します。

gemのインストール

Gemfileに必要なgemの情報が書けたらインストールを実行します。

プロジェクトのローカルにgemをインストール

$ bundle install --path vendor/bundle

bundlerでのgemのインストールの際–pathオプションを使うとGemfileのあるディレクトリにgemがインストールされます。

ローカルにあるgemを実行

gemが無事インストール出来たらそのgemを利用したプログラムを作成・実行していくわけですが、プロジェクトのディレクトリ内の./vendor/bundleにあるgemを利用してRubyプログラムを実行するにはbundle execコマンドが必要になります。

bundle exec ruby main.rb

bundle execでbundlerにより指定されたgemが実行される事は、Gemfileのあるディレクトリでgem listを実行すると確認出来ます。bundle execをつけてgemの一覧を表示するとローカルにインストールされたgemしか表示されません。

cd myapp

$ gem list
#システム全体にインストールされている全てのgemが表示される

*** LOCAL GEMS ***
...
bootstrap-sass (3.3.6, 3.2.0.0)
padrino (0.13.1)
...

$ bundle exec gem list
#ディレクトリ内にローカルにインストールされたgemのみ表示される

*** LOCAL GEMS ***

bundler (1.12.5)
mini_portile2 (2.1.0)
nokogiri (1.6.8)
pkg-config (1.1.7)

bundlerによってインストールされたgemを参照しているのがわかります。

Config

allias

RailsでWEBアプリケーションを開発をしてる時など、頻繁にbundle execしなければならない時もあります。
わりと長いコマンドなので面倒な時はシステムのアライアスに登録しておきましょう。

#bashの場合
vi ~/.bashrc

#.bashrc内に追加する
alias be='bundle exec'

これでbundlerでの実行が簡単になりました。

be rake ruby main.rb

BUNDLE_PATH

またbundle installするときにいちいち–path vendor/bundlerをつけるのが面倒なときには~/.bundle/config内でデフォルトとして設定することも出来ます。

---
BUNDLE_PATH: ./vendor/bundle

これで自動的にGemfileのあるディレクトリにgemがインストールされるようになります。

List Of Available Keys –bundle config