Ruby on Rails を始めて環境構築をしているときに出てきた Bundler。
Bundlerってなんやねん。って思ってましたが、ようやく理解できてきたのでまとめます。
Bundlerとは
簡単に言うと、gemのパッケージ管理システム。
gem同士の互換性を保ちながらバージョン管理してくれるので、Ruby on Railsの環境構築ではとっても便利。
本家サイト
Bundlerのインストール
Bundlerはgemなので、gemコマンドでインストールします
$ gem install bundler
Bundlerだけgemコマンドでインストールして、他のgemはBundlerでインストールするイメージ
以下のコマンドでインストールされたかどうか確認
$ bundler -v
Bundlerの使い方
Gemfileの作成
Gemfileとは、インストールするgemを記載するファイルです
※既にある場合は読み飛ばしてください
※Ruby on Rails の場合は、railsコマンドでプロジェクト作成時に一緒に作成されます
以下のコマンドでGemfileの雛形が作成できます
$ bundle init
Gemfileの記載方法
書き方の例を以下にインラインで記載します
source "https://rubygems.org" # gemインストール元URLを記載する 【必須】
ruby '~> 2.4' # Rubyのバージョンを記載
# 指定しておくと、別のRubyバージョンでGemfileが読まれたときに例外を発生させることが出来る
########################################
# 各インストールしたいバージョンの書き方
########################################
gem 'rails', '5.2.2' # 5.2.2 固定
gem 'rails', '>= 5.2.0' # 5.2.0 以上の最新
gem 'rails', '>= 5.2.0', "< 5.2.2" # 5.2 以上、5.2.2 未満
gem 'rails', '~> 5.2.2' # 5.2.2 以上、5.3.0 未満の最新
gem 'rails', '~> 5.2' # 5.2 以上、6.0 未満の最新
# 記載した一番末端の数値のみ最新に追従するということ
########################################
# Ruby on Railsの各環境別の書き方
########################################
# dev環境のみに反映したいgem
group :development do
gem 'hoge'
end
# dev環境とtest環境に反映したいgem
group :development, :test do
gem 'hoge'
end
他にも様々な書き方があります
詳しくは https://bundler.io/v1.17/man/gemfile.5.html を参照してください
Bundlerによるgemのインストール
以下のコマンドでgemをインストールすることが出来ます
$ bundle install --path vendor/bundle
- --pathでgemのインストール先を指定することが出来ます
コマンドを実行した場所に vendor/bundle ディレクトリが作成され、そこへgemがインストールされます - --pathは一度指定したら保持されるので以降は不要
- --pathを指定しなかった場合、システムのRubyに依存したパスへインストールされる
※rbenvを使っていると以下のようなパス
~/.rbenv/versions/<current version>/lib/ruby/gems/... - なぜ vendor/bundle なのかというと、vendor ディレクトリは一般的に自身が開発しているものではないサードパーティのライブラリを入れる先として使われていて、そこへBundler用のbundle ディレクトリを作成してインストールするのが慣習っぽい
- Gemfile.lockが存在しない場合、コマンド実行時にGemfile.lockが生成されます
- Gemfile.lockとは、Gemfileに記載したgemと依存関係にあるgemを含めたすべてのgemの名前とバージョンが記載されたファイルです
- プロジェクトではGemfile.lockの情報が使われます
インストールしたgemのコマンド呼び出し
Bunderでインストールしたgemで使えるようになったコマンドを呼び出したい場合は、
以下のように「bundle exec」をつけて実行します
※コマンド名は各gemの説明を参照してください
$ bundle exec rails -v
各コマンドについて
コマンド | 内容 |
---|---|
bundle install | Gemfile.lockが存在しない場合、Gemfileを元にgenのインストールを行う。 Gemfile.lockが存在する場合、Gemfile.lockになくGemfileに記載されている gemがある場合、そのgemと関連するgemをインストール後、 Gemfile.lockを更新します。 ※Gemfile.lockに既にあるgemは更新されない |
bundle update | Gemfileを元にgemのインストールをします。 gemインストール後、Gemfile.lockを更新します。 ※Gemfile.lockに既にあるgemが更新されるので実行時は注意 |
bundle update [gem name] | 特定のgemのみupdateしたい場合は、gem nameを指定する。 |
bundle list | インストールされているgem一覧を表示する |
Bundlerでインストールしたgemを全てやり直したい場合
単純に vendor/bundle ディレクトリを削除してインストールし直せば良い
$ rm -d -R vendor/bundle
$ bundle install