Bundlerとは

Bundlerとは

Bundlerとはアプリケーションで利用するgemパッケージを定義し、依存関係を解決するための仕組み。
Bundlerはアプリケーションごとにgemパッケージの依存関係を閉じ込めることで、特定のアプリケーションだけで利用するgemパッケージを簡単に管理することができる。

Gemfile

Bundlerはアプリケーションで利用するgemパッケージをGemfileというファイルに列挙する。Gemfileは「bundle init」コマンドを実行することで生成される。
Gemfileの中身は以下のようになっている。

# frozen_string_literal: true
# A sample Gemfile
source "https://rubygems.org"

# gem "rails"

sourceがgemパッケージの取得先、デフォルトではrubygems.orgが指定されているが、ローカルネット内に独自に立てているリポジトリサーバーに向けることも出来る。

インストール

Gemfileに使用するgemパッケージを記載して「bundle install」コマンドを実行するとgemパッケージがインストールされる。またインストール対象のパッケージ内で使われているgemパッケージも芋づる式にインストールされる。
「bundle install」を実行すると、Gemfileと同じディレクトリにGemfile.lockファイルが作成される。このファイルには、Gemfilleに記述されたgemパッケージの依存関係を解決した結果が書き出される。
Gemfile.lock内にはインストールされたgemパッケージの具体的なバージョンも記載される。
Gemfile.lockも更新したい場合は、「bundle update」コマンドを実効する。

「bundle install」でインストールしたコマンドの実行

「bundle install」でインストールしたGemは「bundle exec コマンド名」で実行する。

$ bundle exec [コマンド]

開発用、テスト用

Gemfileは開発環境の場合とテスト環境の場合にインストールするものを設定可能。

source "http://rubygems.org"

gem 'sinatra'

# 開発用のGem
group :development do
    gem 'awesome_print'
end

# テスト用のGem

group :test do
    gem 'rspec'
end

特定の環境のGemだけインストールしない場合は、--withoutオプションを使う。

# developmentとtest以外のGemをインストールする
% bundle install --without development test

binstubsオプション

「bundle install」でインストールしたコマンドは、通常「bundle exec コマンド名」でなければ実行できない。
しかし、「bundle install」時に「--binstubs」オプションを指定すれば、直下にbinディレクトリが作成されその中にGemのコマンドが配置されるので、コマンド名だけでコマンドが実行可能になる。