Bundler概要

  • 295
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

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