28
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Bundler まとめ

Last updated at Posted at 2018-12-07

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の記載方法

書き方の例を以下にインラインで記載します

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
28
33
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?