Help us understand the problem. What is going on with this article?

Bundler概要

More than 5 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

hisonl
PMをしています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした