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