More than 3 years have passed since last update.


bundlerについて分かってる風になっていたので、一度整理します。


特徴

・Gemパッケージの種類やバージョンの管理

・複数PCで必要なGemパッケージをインストールする仕組みを提供

->チーム間で同一の開発環境を簡単に構築することが可能に。


運用方針

基本的に、gemコマンドでインストールするのはBundlerのみで、その他のgemパッケージは、Bundler経由でインストールするという方針。

gem install bundler


Gemインストールの流れ

GemfileにインストールするGemパッケージを記述し、

bundle install

を実行してインストールする。

※「Gemfile」に書かれたGemパッケージと、そのGemパッケージが依存しているGemパッケージを自動的に調べて全てインストールしてくれる。


よく使うBundlerのサブコマンド

コマンド
概要

bundle init
Gemfileを生成

bundle install
Gemfileに書かれたgemパッケージをインストール

bundle exec
Bundlerでインストールされたgemパッケージを使用してコマンドを実行

bundle list
インストール済みのgemパッケージの一覧を表示

bundle update
インストール済みのgemパッケージのバージョンを更新


Gemパッケージの保存先

単純に

bundle install

と実行されると、rbenv利用下の場合、/Users/ユーザー名/.rbenv/versions/バージョン名/lib/ruby/gems/...以下にインストールされる

bundle install --path <フォルダ名>

とすれば、指定のフォルダにインストール先を指定できる。

たとえば、

bundle install --path vendor/bundle

と記述すると、railsアプリのルートディレクトリの下のvendor/bundleディレクトリにインストールされ、そのアプリケーションの中だけにインストールされる。

一度上のコマンドを実行すれば、Bundlerはインストール先を記憶するので次回以降は

bundle install

を実行するだけで毎回vendor/bundleディレクトリにインストールされる。

因みに、Bundlerはgemのインストール先を、railsアプリのルートディレクトリの下の、.bundle/configというファイルで記憶している。

個別のRailsアプリにインストールされているgemの一覧を見るには以下のコマンドを使うといい。

bundle list


Gemfileとは

インストールするGemパッケージの名前とバージョンを記述するファイル。


Gemfile.lockとは

インストールされたGemパッケージの名前とバージョンが記録されたファイル。

他の環境で同じアプリケーションの開発を行なう場合は、プログラムファイルに加えてこの「Gemfile.lock」ファイルを配布する。

そして他の環境で「bundle install」を実行すると、今度は「Gemfile.lock」ファイルが参照され、指定されたバージョンのGemパッケージがインストールされるようになる。



Gemfileに

source 'https://rubygems.org'

gem 'rails'

と記述し、

bundle install

すると、


  • actionmailer (4.1.4)

  • actionpack (4.1.4)

  • actionview (4.1.4)

  • activemodel (4.1.4)

  • activerecord (4.1.4)

  • activesupport (4.1.4)

  • arel (5.0.1.20140414130214)

  • builder (3.2.2)

  • bundler (1.6.3)

  • erubis (2.7.0)

  • hike (1.2.3)

  • i18n (0.6.11)

  • json (1.8.1)

  • mail (2.5.4)

  • mime-types (1.25.1)

  • minitest (5.4.0)

  • multi_json (1.10.1)

  • polyglot (0.3.5)

  • rack (1.5.2)

  • rack-test (0.6.2)

  • rails (4.1.4)

  • railties (4.1.4)

  • rake (10.3.2)

  • sprockets (2.12.1)

  • sprockets-rails (2.1.3)

  • thor (0.19.1)

  • thread_safe (0.3.4)

  • tilt (1.4.1)

  • treetop (1.4.15)

  • tzinfo (1.2.1)

↑上記gemに必要な依存関係を持つこれだけのgemを勝手にインストールしてくれる。


Railsアプリを作るとき


Railsアプリを作るとき、rails自体をbundleでインストールすると、railsを記述したGemfileと、railsアプリ内で作るGemfileの2つが存在することになってややこしいので、以下の手順でrails newすると良さげ。

bundle init

でGemfileを生成し、Gemfileに

gem rails

を記述し、

bundle install --path vendor/bundle

を実行。

ここで、

bundle exec rails new . --skip-bundle

と入力すると、カレントディレクトリにrailsアプリが生成される(Gemfileは上書きされる)ので、

bundle update

を実行すれば良い。

※「--skip-bundle」オプションをつけると、rails初期化時に余分なbundle installが走らないため、効率的なアプリ構築ができる。


参考

パーフェクト Ruby on Rails

http://www.amazon.co.jp/パーフェクト-Ruby-Rails-すがわら-まさのり/dp/4774165166