こんにちは、hachi8833です。先週、Rubyで頻繁に使われるツールであるBundlerの1.15がリリースされました(その後バグ修正の1.15.1がリリースされました: 後述)。今回のリリースの目玉は、動作が高速化され、manのヘルプが充実したことです。
基本以外のコマンドでは、bundle outdated
、bundle init
、bundle issue
、bundle env
が便利そうです。
はじめに
bundlerのコマンドはbundle
でちょっぴり紛らわしいのですが、いつの頃からなのかbundler
でも動くようになっています。普通はbundle
を使います。
以下のリストはよく使いそうな順に並べてあり、新しいコマンドには 1.15~:と表示しています。オプションを全部書くと煩雑になるので、「詳細」リンクにとどめました。
基本コマンド
通常運用であれば、bundle install
、bundle update
、bundle exec
の3つのコマンドで事足ります。細かいオプションは多数ありますが、Gemfileでgemリストを編集するのであれば使う必要はそれほどないと思います。
コマンドの多くは、カレントディレクトリにGemfileがないと実行できません。
bundle install
(またはbundle
)- Gemfileに記載されているgemをインストールします。Gemfile.lockがなければ作成し、あれば更新します。詳細
- Ruby on Railsなど多くのRubyプロジェクトでは
--path vendor/bundle
を指定するのがルールになっています(1度指定すればカレントディレクトリに設定が保存されます)。 --path
を指定しないと、カレントではなくシステム側にgemがインストールされます。「システム側」とは、gem install
でインストールされるのと同じ場所です。システム側のgemはgem list
で表示できます。
bundle update gem名
- Gemfileに記載されているgem名を指定して更新し、Gemfile.lockを更新します。詳細
注意: gem名を指定しないと、Gemfile.lockを消して作り直すので、Gemfileのgemがすべて更新されてしまいます。
bundle exec gemコマンド
- bundlerで導入したgemのコマンドを現在のbundlerのコンテキストで実行します。
bundle exec
を付けないと、普通にシェルの$PATHのコマンドを実行します(=bundlerのコンテキストを無視する)。詳細
最も使用頻度が高いコマンドかもしれません。
- Railsでは、
bundle exec rails
かbin/rails
のいずれかでrails
コマンドなどを実行します。 - gemのコマンドを
bundle exec
で実行すると、システム側にインストールされているgemは無視されます。
補助コマンド
bundle env
- 後述の
bundle platform
で取れる情報を含め、ありったけの情報をmarkdownで出力します。カレントディレクトリにGemfileがなくても実行できるので、何か調べるときに最初に入力する感じです。なぜかmanにも公式ドキュメントにも項目が見当たりません。
Gemfileを見ながらドキュメントを書くのに便利そうです。
bundle init
- カレントディレクトリに以下のGemfileを作成します。コメントを外してRailsのバージョンを指定すれば
rails new
用に使えるので便利です。詳細
# frozen_string_literal: true
source "https://rubygems.org"
# gem "rails"
--gemspec ファイル名
を追加するとgemspecファイルを元にGemfileを作成できます(gem開発用)。
bundle outdated
- 新しいバージョンが出ているgemをすべてリストアップします。gem名を指定すると、そのgemだけ新しいバージョンがあるかどうかをチェックします。詳細
bundle config
- ~/.bundle/configにあるユーザーのbundler設定と、プロジェクトの.bundle/configにあるプロジェクト固有のbundler設定を表示します。bundlerの動作がおかしくなったときなどによく使います。
bundle config 設定 値
で設定を追加・更新できます。詳細
bundle platform
- プラットフォーム互換性に関する情報(OS環境、Rubyのバージョン、現在のプラットフォームが実行条件を満たしているかどうか)を表示します。詳細
- 1.15からは次の
bundle issue
の方が便利です。
bundle issue
- 1.15~: 各種情報の表示、トラブルの診断を行います。Homebrewの
brew doctor
に少し似た感じです。 bundle add gem名
- 1.15~: 指定のgemをGemfileに追加して
bundle install
を実行します。gemのバージョンやインストール元URLを指定したり、-g
でグループも指定できます(グループのブロックには挿入せず、Gemfileの末尾に追加します)。詳細
- 従来の
bundle inject
の動作が複雑で使いにくいというフィードバックを元に、動作を簡素化したとのことです。
bundle inject gem名 バージョン
- 指定のgemとバージョンをGemfileとGemfile.lockに追加し、
bundle install
を実行します。バージョンは省略できません。詳細
- Gemfile.lockにgemを追加する際に他にも依存関係のチェックなどを行っているようです。
たまに使うかもしれないコマンド
bundle pristine
- 1.15~: ローカルのgemキャッシュを元にgemを原状復帰します。ただしbundler自身には効きません。詳細
bundle pristine
は、gem pristine
にヒントを得たそうです。
bundle check
- gem同士の依存関係に問題があるかどうかをチェックします。詳細
bundle viz
- gem同士の依存関係グラフを出力します。実行にはruby-graphviz gemをインストールしておく必要があります。詳細
bundle package
- Gemfileに記載されているgemをcacheディレクトリに保存します。gemファイルを念のため取っておきたい場合などに使います。詳細
- たとえば
bundle install --path vendor/bundle
を実行した後であれば、vendor/cacheにgemを保存します。
bundle clean
- Gemfileに記載されていないgemを削除します。詳細
bundle help
- man形式のヘルプを表示します。詳細
bundle gem gem名
- gem開発用のひな形ファイルとディレクトリを一括生成します。詳細
bundle show
- 現在のbundlerで扱っているgemをすべて表示します。gem名を指定するとそのgemが置かれているディレクトリのパスを表示します。詳細
- bundler 2.0がリリースされたら
bundle show
は次のbundle info
に置き換えられるそうです。ただし今はbundle info
はgem名なしでは実行できません。
bundle info gem名
- 1.15~: 指定したgemの基本情報(名称、ホームページ、ローカルの保存場所)を表示します。
bundle open gem名
- 指定したgemが置かれているディレクトリをデフォルトのエディタで開きます。詳細
bundle console
- 現在のbundlerのコンテキストでIRBを実行します。bundlerでpryをインストールしてあってもIRBが動作します。詳細
bundle version
- bundlerのバージョンを表示します。詳細
追伸: Bundler 1.15.1のバグ修正
早くもバグ修正用の1.15.1がリリースされました。
bundle lock --update GEM
: gemがlockfileにない場合に落ちる問題を修正bundle init --gemspec
gemspecファイルが無効な場合に落ちる問題を修正bundle install --force
: Gemfileにgit gemがある場合にも動作するよう修正bundle env
: bundle configの設定がある場合に出力するよう修正
関連記事(Bundler)
- ちょっと待った! Railsでgitリポジトリから除外すべきでないファイル:Gemfile.lockとdb/schema.rb
- Railsのbundle install –deploymentとは何なのか
- [Rails4] bundlerのエラー「Your Gemfile.lock is corrupt.」
- [Rails 5] rbenvでRubyをインストールして新規Rails開発環境を準備する