Bundler

公式サイト:

Bundler – The Best Way to Manage a Ruby Application’s Gems [Official]

目次

使い方

参考:

Bundler を使った RubyGems の管理について | 30歳からのプログラミング

Ruby の Gem をプロジェクト毎に Bundler で管理する | fugafuga.write

Bundler を使って Gem をインストールする | ローイングファンの日記

Bundler めも – GitHub Gist

bundle 備忘 – Qiita

Bundler、bundle exec について – Qiita

Bundler を使った Gem パッケージの管理 | Ruby on Rails 入門

Bundler 1.15 の全コマンド | TechRacho

Bundler の使い方 – Qiita

Bundler の使い方/Gem 管理 | TASK NOTES

Ultimate Guide to Ruby Gems, Gemfiles & Bundler | RubyGuides

How to Manage Application Dependencies with Bundler | Bundler [Official]

How to Use Bundler with Rails | Bundler [Official]

How to Use Bundler with Ruby | Bundler [Official]

How to Use Bundler in a Single-File Ruby Script | Bundler [Official]

導入

参考:

Bundler で Gem をプロジェクトごとに管理する | DevelopersIO

意外とよくわかっていない Bundler について | Enjoy IT Life

Bundler を使い始めた時に詰まったので調べた | それマグで!

概要

参考:

Bundler の使い方 | Kazunori Kamiya

Bundler での運用方法 – Qiita

gem コマンド

参考:

Gem コマンドの使い方まとめ | TASK NOTES

bundle コマンド

参考:

bundle | Bundler [Official]

bundle install

参考:

bundle install | Bundler 日本語ドキュメント (Ruby STUDIO)

bundle install | Bundler [Official]

bundle-install – Install the Dependencies Specified in Your Gemfile | Ubuntu Manpage

Rails Bundle Install and Gemfile | DZone Web Dev

bundle install --path

参考:

rails で bundle install する時にインストールパスを指定 – Qiita

bundle install で毎回 --path=vendor/bundle するのが面倒なのをどうにかする – Qiita

bundle install するときに vendor/bundle を省略する方法 – Qiita

bundle install するときになぜ vendor/bundle に入れるのか – teratail

Why Bundle Install is installing gems in vendor/bundle? – Stack Overflow

bundle install --deployment

参考:

Bundler での運用方法 – Qiita

Rails の bundle install --deployment とは何なのか | TechRacho

bundle_frozen とか bundle_without | Nikushi’s blog

BUNDLED WITH で Gemfile.lock が更新されてしまう件 – Qiita

Bundler の疑問点とか色々メモ | かせいさんとこ

How to Deploy Bundled Applications | Bundler [Official]

Whats the difference between bundle install --deployment and bundle pack – Stack Overflow

bundle install --frozen

Gemfile.lock を更新せずにインストールする。オプションは config に記憶される。

$ bundle install --frozen

config から BUNDLE_FROZEN を削除する。

$ bundle config --delete frozen

参考:

BUNDLED WITH で Gemfile.lock が更新されてしまう件 – Qiita

bundle_frozen とか bundle_without | Nikushi’s blog

bundle install --clean

必要なパッケージをインストール後に bundle clean を自動的に実行する。オプションは config に記憶される。

参考:

bundle install には --clean を指定する (特に Circle CI では) | Born Too Late

--jobs オプション

Bundler で Gem をインストールする際に、並列に実行するワーカー数を指定する。

$ bundle install --jobs 4

参考:

Install gems in parallel (faster) – Stack Overflow

-V / --verbose オプション

インストールの詳細なログを出力する。

$ bundle install -V

bundle pristine コマンド

Bundler でインストールした Gem を初期状態に戻す。(ローカルキャッシュから再インストールされる。Git で管理されている Gem は指定したコミットがチェックアウトされる。)

$ bundle pristine

参考:

bundle pristine | Bundler [Official]

Running `bundle pristine` on a git source gem doesn’t rebuild the native extension · Issue #6294 · bundler/bundler – GitHub

ネイティブ拡張をリビルドする

参考:

Native Extension 入りの Gem をリビルドする – Qiita

Rebuild Native Extensions | makandra dev

Rebuild Bundler Gems with Native Extensions | Coderwall

gem install does not rebuild all instances of a gem – Server Fault

How to rebuild all my Ruby gems? – Super User

ネイティブ拡張のビルドオプションを指定する

参考:

Bundler でビルドオプションを指定する – Qiita

Gem を再インストールする

全ての Gem を強制的に再インストールする。

$ bundle install --force

vendor/bundle を削除してやり直す。

$ rm -rf vendor/bundle
$ bundle install

vendor/bundleGemfile.lock を削除してやり直す。

$ rm -rf vendor/bundle
$ rm Gemfile.lock
$ bundle install

参考:

How do I force Bundler to reinstall all of my gems? – Stack Overflow

How to reinstall a gem using bundler – Stack Overflow

プレリリースバージョンの Gem を使う

参考:

Unable to resolve dependencies when using prerelease gem · Issue #2938 · bundler/bundler – GitHub

bundle list

$ bundle list

参考:

bundle list | Bundler [Official]

bundle show

バンドルされている Gem の一覧を表示する。

$ bundle show

バンドルされている Gem のパスを一覧表示する。

$ bundle show --paths

指定した Gem がインストールされているパスを表示する。

$ bundle show rails

参考:

bundle show | Bundler [Official]

bundle exec

参考:

bundle exec | Bundler 日本語ドキュメント (Ruby STUDIO)

bundle update

参考:

bundle update | Bundler [Official]

bundle install と bundle update の違い

  • bundle installGemfile.lock で Gem のバージョンが指定されていればそのバージョンを使い続ける。Gemfile.lock に存在しない Gem は新たにインストールされる。
  • bundle updateGemfile 指定の範囲内でリモートも含めてなるべく新しいバージョンの Gem に解決する。 ( Gemfile.lock で Gem のバージョンが指定されていても可能な限り新しいバージョンに更新する。)

指定した Gem のみを更新する

参考:

bundle update で特定の Gem のみ更新する – Qiita

How to Update a Single Gem Conservatively | makandra dev

Update just one gem with bundler – Stack Overflow

bundle lock

参考:

bundle lock | Bundler [Official]

Updating Gemfile.lock without installing gems – Stack Overflow

bundle check

参考:

bundle check | Bundler [Official]

How to re-sync Gemfile.lock on changes to Gemfile – Stack Overflow

Gem を削除する

参考:

Gemfile でインストールした Gem を削除する – Qiita

Gem をクリーンにする – Qiita

あえて言うほどではないけれども Gem を一括削除する方法 | TECHSCORE BLOG

GitHub からコミット/ブランチ/タグを指定して Gem を追加する

参考:

Gemfile での Gem 指定色々 – Qiita

Gemfile での Git オプション利用のリスク | koicの日記

How to Install Gems from Git Repositories | Bundler [Official]

How to get a specific “commit” of a gem from GitHub? – Stack Overflow

Gemfile.lock

参考:

Bundler と Gemfile.lock の取り扱い | DesignAssembler

Gemfile.lock アップデートガイド – Qiita

Gem の更新 | Bundler 日本語ドキュメント (Ruby STUDIO)

初心者向け Gemfile と Gemfile.lock の違い | Enjoy IT Life

Gemfile.lock が更新されるタイミングはいつなのか? · Issue #18 · yochiyochirb/meetups – GitHub

Gemfile and Gemfile.lock | Austin Songer

Should Gemfile.lock be included in .gitignore? – Stack Overflow

環境毎に異なる Gemfile.lock が生成される問題

参考:

Gemfile.lock …できない – Qiita

Gemfile.lock Platform Conflicts – GitHub Gist

Gemfile.lock が git merge した時にコンフリクトする

参考:

Rails で良くコンフリクトするファイルの対処法 – Qiita

Auto resolve git conflicts in Gemfile.lock · Issue #6020 · bundler/bundler – GitHub

Bundler.setup

Bundler でインストールした Gem を require できるように $LOAD_PATH を設定する。

参考:

Bundler.setup | Bundler 日本語ドキュメント (Ruby STUDIO)

Bundler.setup vs. Bundler.require | Anti-pattern

How to Use Bundler with Ruby | Bundler [Official]

Bundler.require

Bundler でインストールした Gem を環境名 (:default:development など) を指定して require する。

参考:

Bundler の Gem を Ruby スクリプト実行時にロードする方法 | 小さな星がほらひとつ

Gemfile の書き方を見直した | r7kamura

実行環境と Bundler.require | AnyType

Does the order of gems in your Gemfile make a difference? – Stack Overflow

Rails における Gem の読み込み

参考:

Rails を起動すると Gem はどのように読み込まれてんのか | onody_onody’s blog

Bundler で入れた Rails で rails new を行う

参考:

Ruby on Rails の環境構築と Bundler について | TASK NOTES

ローカルの Gem を使う

参考:

Is it possible to bundle / install gems from a local cache? – Stack Overflow

bundle package

通常通り bundle install を実行する。

$ bundle install

必要な gem を全て vendor/cache にキャッシュする。

$ bundle package --all

vendor/cache からインストールする。

$ bundle install --local

参考:

bundle install をオフラインで実行するメモ – Qiita

Gem を Bundler でダウンロードしローカルに保存、オフラインでインストールしたい | yukku++

bundle package | Bundler 日本語ドキュメント (Ruby STUDIO)

What is the simplest way to download a gem without installing RubyGems? – Super User

Gem をローカルにキャッシュする

参考:

Local Gem Cache to Accelerate Bundler | There’s enough for everyone

ローカルオーバーライド (bundle config local)

Gemfile を変更せずに設定でオーバーライドして、ローカルのディレクトリから Gem を使う。

$ bundle config --local local.mygem path/to/mygem

参考:

Bundler で Gemfile を変更せずにローカルの :path の Gem を使う – Qiita

ローカルで修正した Gem のコードを bundle install する | My External Storage

How to Specify Local Ruby Gems in Your Gemfile | rossta.net

依存している Gem のリストを取得する

指定した Gem に依存している Gem の一覧を取得する。

$ ruby -r bundler -e 'puts( \
    Bundler.locked_gems.specs.find_all do |gem| \
      gem.dependencies.any? { |dep| $*.include?(dep.name) } \
    end.map(&:name) \
  )' \
  activesupport

Gemfile で直接指定しているものに限定する。

$ ruby -r bundler -e 'puts( \
    Bundler.locked_gems.specs.find_all do |gem| \
      gem.dependencies.any? { |dep| $*.include?(dep.name) } \
    end.map(&:name).select do |name| \
      Bundler.locked_gems.dependencies.keys.include?(name) \
    end \
  )' \
  activesupport

bundle exec コマンドの役割

参考:

Bundler コードリーディング exec 編 | freedom-man

Docker で Gemfile.lock を扱う

参考:

Rails on Docker: Quickly Create or Update Your Gemfile.lock | Chris Blunt

--path 指定のインストールでシステム Gem は考慮されない

参考:

Bundler should use already installed Gems, that satisfy Gemfile · Issue #1964 · bundler/bundler – GitHub

Ruby 2.6.1 で require “bundler/setup” がエラーになる

Ruby 2.6.1 で Bundler を使った際に、require "bundler/setup" がエラーを起こす。

require "bundler/setup" # => You must use Bundler 2 or greater with this lockfile.
Code language: Ruby (ruby)

原因:

デフォルト Gem として入っている Bundler 1.17.2 の gemspec で s.files が不足している。

対処法:

rbenv を使っている場合に、パッチを適用して上書きインストールする。

$ curl -sSL https://bugs.ruby-lang.org/attachments/download/7631/15582-bundler-gemspec.patch | rbenv install -f -p 2.6.1

もしくは、デフォルト Gem を更新する。

$ gem update bundler --system

参考:

Bug #15586: Requiring `bundler/setup` gets wrong version | Ruby Issue Tracking System

Bundler 2.0 の変更点 – Qiita

サンプルコードでわかる!Ruby 2.6 の主な新機能と変更点 – Qiita

Bundler 2.0 導入時のトラブル

対処法:

Bundler のバージョンを指定してグローバルにインストールする。

Bundler 1.17.3 をインストールする。

$ gem install bundler:1.17.3

Bundler 2.0.2 をインストールする。

$ gem install bundler:2.0.2

古いバージョンの Gem を消去する。

$ gem cleanup

RubyGems を更新する。

$ gem update --system

参考:

Ruby 2.6.1 に含まれる Bundler 1.17.2 に不具合があるという話 – Qiita

Bug #15622: Default version of Bundler incorrectly invoked when using binstubs – Ruby master – Ruby Issue Tracking System – GitHub

RubyGems でよく使うコマンドをまとめる | fugafuga.write

まとめ

Bundler で Gem を実用的に扱うためのまとめ – Qiita

Bundler 1.15 の全コマンド | TechRacho

ドキュメント

Docs | Bundler [Official]

Documentation for bundler | RubyDoc.info

Bundler 日本語ドキュメント | Ruby STUDIO

リポジトリ

bundler/bundler: Manage Your Ruby Application’s Gem Dependencies – GitHub

Bundle Bungler

ユーザーのホームディレクトリにインストールした Gem をコピーしてインストール時間を短縮する。

リポジトリ:

chrismo/bundle-bungler – GitHub

Bundler::Console

リポジトリ:

kddeisz/bundler-console: A Bundler Plugin that Starts a Console Session with Your Gem Dependencies – GitHub

ExtendedBundler::Errors

リポジトリ:

jules2689/extended_bundler-errors: A Bundler Plugin that Makes Gem Installation Errors More Actionable, Educative, and All Around Easier to Understand – GitHub

Git Bundle

Git コマンドを、Bundler でインストールした Gem のリポジトリでも同期して自動的に実行する。

リポジトリ:

EPI-USE-Labs/git-bundle: Simplifies Working with Gems from Git Repositories in Combination with Local Overrides – GitHub

参考:

How to handle Gemfile.lock with local gem repositories? – Stack Overflow

記事をシェアする:
タグ:

コメントを残す

メールアドレスが公開されることはありません。

Protected by reCAPTCHA