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のコマンドが配置されるので、コマンド名だけでコマンドが実行可能になる。