fugafuga.write

日々のログ

Ruby の gem をプロジェクト毎に Bundler で管理する

Bundler で gem を管理する。

f:id:tokoyax:20150227135152j:plain

はじめに

rbenv の導入、そのプラグインの導入が完了していることが前提です。

rbenv を開発環境に導入する - fugafuga.write


Bundler って何?

Bundler: The best way to manage a Ruby application's gems

gem を プロジェクト毎に管理できるツール。

なぜ Bundler を使うのか

gem は更新頻度が高く、互換性が無くなってアプリケーションが動かなくなったりする場合があります。
その問題を解決できるのが Bundler という gem 管理ツールです。

また、開発チームのメンバー間で環境構築の際に どのバージョンの gem をインストールするかを Bundler に任せることができます。

Ruby 自体のバージョンは、プロジェクト毎に rbenv で管理する。
gem のバージョンは、プロジェクト毎に Bundler で管理する。

というイメージです。

個別にインストールすべきものとそうでないもの

共通でインストールしても良いもの(グローバルインストール)

・最新であれば良いもの
・基本的な機能しか使わないもの

プロジェクト個別でインストールすべきもの(ローカルインストール)

・バージョンが頻繁に上がるもの
・指定のバージョンでしか動かないもの
・個別のプロジェクトでのみ使うもの

Ruby の環境にインストールされている gem の確認

ここから、root で作業。

グローバルインストールされているものをリストアップ

# rbenv exec gem list

gem がグローバルインストールされていた場合、一度綺麗にするため、default gem 以外を消します。

# gem uninstall -axI `gem list --no-versions | egrep -v 'test-unit|rdoc|bigdecimal|io-console|json|minitest|psych|rake'`


Bundler のインストール

Bundler はグローバルインストールします。

# gem install bundler
Fetching: bundler-1.8.2.gem (100%)
Successfully installed bundler-1.8.2
Parsing documentation for bundler-1.8.2
Installing ri documentation for bundler-1.8.2
Done installing documentation for bundler after 3 seconds
1 gem installed


Bundler を使った gem のローカルインストール

ここから、一般ユーザー(ここでは dev1)で作業。

/home/dev1/example に rails をローカルインストールしてみます。

まずは、bundle init で GemFile のひな形を作成。

GemFile とは、Bundler が管理する gem のリスト。

$ pwd
/home/dev1/example
$ bundle init
Writing new Gemfile to /home/dev1/example/Gemfile

作成されたひな形の中身はこんな感じです。

$ cat Gemfile
# A sample Gemfile
source "https://rubygems.org"

# gem "rails"

とりあえず、rails をインストールするので vi か何かでコメントを外します。

$ cat Gemfile
# A sample Gemfile
source "https://rubygems.org"

gem "rails" ← コメント外した


準備ができたら、Bundler で Gemfile に書かれている gem をインストールします。

$ bundle install --path=vendor/bundle --binstubs=bundle_bin
Fetching gem metadata from https://rubygems.org/...........
Fetching version metadata from https://rubygems.org/..
Resolving dependencies...
Using rake 10.4.2
…
Installing rails 4.2.0
Bundle complete! 1 Gemfile dependency, 36 gems now installed.
Bundled gems are installed into ./vendor/bundle.

オプションの説明
[ --path=vendor/bundle ]

指定したディレクトリ内に gem がインストールされます。
ここで、パスを指定しないとグローバルインストールになるので注意すること。

[ --binstubs=bundle_bin ]

Bundler が使うスクリプトの位置を指定するオプション。
この指定が無いと、rbenv-binstubs が効かなくなります。



ローカルインストール済みの gem のリストを表示する。

$ bundle list
Gems included by the bundle:
  * actionmailer (4.2.0)
  * actionpack (4.2.0)
…
  * rails (4.2.0)
…

ローカルインストールができました。


インストールした gem のバージョン確認。

$ rails -v
Rails 4.2.0


本来なら、bundle exec rails -v としなければ、ローカルインストールされた gem のコマンドは参照できません。
rbenv-binstubs プラグインのおかげで、bundle exec が省略可能となっています。


Ruby on Rails 4アプリケーションプログラミング

Ruby on Rails 4アプリケーションプログラミング

Ruby on Rails 4 アプリケーションプログラミング

Ruby on Rails 4 アプリケーションプログラミング

パーフェクトRuby on Rails

パーフェクトRuby on Rails

パーフェクト Ruby on Rails

パーフェクト Ruby on Rails

[参考]
橋本商会 » Ruby書くならBundler使え
Rails開発環境の構築(rbenvでRuby導入からBundler、Rails導入まで)(Macport編) - Qiita
Ruby2.0でgemを全てアンインストールする - Qiita
[ruby]最初に知っておけば良かったbundlerの使い方 rails編 | Into my web
Qoosky - rbenvおよびbundlerの基本的な使用方法
rbenv + ruby-build を system-wide にインストールする - @kyanny's blog
全ユーザーで共通のrbenv+ruby-buildを使用する環境を構築する - 一分一秒真剣勝負!