Tech Racho エンジニアの「?」を「!」に。
  • 開発

[Ruby] Bundler 1.15の全コマンド

こんにちは、hachi8833です。先週、Rubyで頻繁に使われるツールであるBundlerの1.15がリリースされました(その後バグ修正の1.15.1がリリースされました: 後述)。今回のリリースの目玉は、動作が高速化され、manのヘルプが充実したことです。

基本以外のコマンドでは、bundle outdatedbundle initbundle issuebundle envが便利そうです。

はじめに

bundlerのコマンドはbundleでちょっぴり紛らわしいのですが、いつの頃からなのかbundlerでも動くようになっています。普通はbundleを使います。

以下のリストはよく使いそうな順に並べてあり、新しいコマンドには 1.15~:と表示しています。オプションを全部書くと煩雑になるので、「詳細」リンクにとどめました。

基本コマンド

通常運用であれば、bundle installbundle updatebundle 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 railsbin/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)


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。