Ruby on Rails

【理解必須】Bundlerの使い方を整理-bundle install他

更新日:

こんにちは、Shinyaです

今回はRuby on Railsを勉強していくうえで必ず必要になるBundlerの使い方について見ていきます

Bundlerとは

bundlerとはgemの依存関係とバージョンを管理するためのgemです

gem同士の依存関係に応じて問題が起きないようにgemをインストールしたり、プロジェクトごとに使うgemとそのバージョンを分けたりできます

Bundlerのインストール

gem install bundler

gem install bundlerでもインストールできますが、Bundlerのバージョンを指定するときは以下のように-v [バージョン]とオプションで指定します

>gem install bundler -v x.y.z

gem list bundler

インストールされてるBundlerのバージョンを全て表示できます

>gem list bundler

ちなみに、bundlerの部分は別のgemでも機能します

gem listというコマンドはインストール済のgemのバージョンを調べるものだからです

主なbundleコマンド

bundle -v (--version)

使っているBundlerのバージョンが分かります

>bundle -v
Bundler version 2.1.4

Bundlerのバージョンでエラーが出ることがあるので、その時は要確認です

よくあるBundlerバージョンが原因のエラーはこれです

"You must use Bundler 2 or greater with this lockfile."

後述のGemfile.lockでは使用するBundlerのバージョンが指定されています

この指定バージョンとプロジェクトで使っているBundlerのバージョンが異なるときこのエラーが出ます(指定Ver.=2で使用Ver.<2のとき)

リモートリポジトリから人が作ったプロジェクトをクローンしてきたときなど良く起こります

bundle install

gemをインストールするために使います

初めてインストールするとき、gemはGemfileで指定しておきます

インストール後にインストールしたgemを記載したGemfile.lockを作成して、以降Gemfile.lockを参照するようになります

Gemfile.lockに記載されておらず、Gemfileに記載されてるgemがある場合、そのgemと依存関係のあるgemをまるっとインストールしてくれます

なので新たにgemを追加でインストールしたいときはGemfileに記載してbundle installすれば良いです

gemのインストール先ですが、オプションを何もつけないとシステム(使ってるPC)にgemがインストールされます

システム以外にインストール先を指定する際は以下のようにします

>bundle install --path [インストール先のパス]

インストール先のパスとしてはvendor/bundleとするのが一般的です

vendor/bundleとするとRailsプロジェクト内のvendorフォルダ内のbundleフォルダ以下にgemがインストールされます

プロジェクトごとにインストール先を変えれば、プロジェクトごとに使うgemのバージョンを変えられることになるので、環境に起因する問題を起きづらくできます

インストール先に関連する話として、githubやbitbucketへプロジェクトをpushするとき注意することがあります

それはvendor/bundleにインストールしたgem群もろともpushしない方が良いということです

何故かというとまずpushに時間がかかりますし、Gemfileで管理しているのでgitで追跡する意味がないですし、共同開発しているときはリモートリポジトリのgemが自分のローカルリポジトリのgemで乱されてしまうというデメリットがあるからです

なのでbundle installする前に.gitignoreに/vendor/bundleと記述しておいてpushされないようにしましょう

ちなみにgemのインストール先は.bundleフォルダのconfigに記録されており、一度指定したら以降自動的にそこにインストールされるようになります

bundle update

bundle installではGemfile.lockを参照するので、勝手にgemのバージョンが上がることはないです

一方、bundle updateではGemfileに記載されたgemのバージョンを最新にしてしまいます

その後、Gemfile.lockを上書きします

これによりバージョン違いが起こり思わぬエラーが発生することがあるので慎重に使う必要があります

bundle exec [コマンド]

>bundle exec [コマンド]

railsのコマンドを実行する際にbundle execを付けるとプロジェクトのGemfile.lockで指定されたバージョンでgemを作動させることができます

bundle execを付けない場合、システムにインストールされたgemが指定されたことになります

複数のプロジェクトで異なるバージョンのgemを使う際など、使うコマンドです

GemfileとGemfile.lock

内容が一部重複しますが今一度まとめます

Gemfileの作成方法:bundle init

Gemfileの役割:
bundle installでインストールするgemとそのバージョンを記載
書かれているgemはbundle updateで最新版にアップデートされる

Gemfile.lockの記載内容:
bundle installでインストールされたgemとそのバージョンが記載される
bundle updateしたgemのバージョンが上書きされる
使用してるRubyとBundlerのバージョンが記載される

Gemfile.lockの役割:
bundle installする際に合わせにいくバージョンとして参照する
→結果的にバージョンをロックできるので、Gemfile.lockを管理すれば環境に起因するエラーを防げる

最後に

以上がBundlerについてでした

僕が今まで調べる必要があった内容を網羅的に紹介しました

Ruby on Railsを使っていくうえで欠かせない知識なので、ぜひお役立てください

それでは、また

参考資料

https://qiita.com/patorash/items/751a1837c49c63a38288
https://bundler.io/
https://qiita.com/lasershow/items/1a048d03ddaaba98171e
https://www.sejuku.net/blog/19426
https://qiita.com/YumaInaura/items/64e5721549e4927ce85f

-Ruby on Rails
-,

Copyright© 初心者のためのプログラミング独学ブログ , 2020 All Rights Reserved Powered by STINGER.