Edited at

Gemのパッケージ管理ツール「Bundler」のセットアップ&操作方法


「Bundler」とは?

Gemのパッケージ管理ツールです。

Bundlerを使うことで、プロジェクトごとにバージョンを指定してGemを使うことができるようになります。


環境


  • RubyGems:2.7.1

  • Bundler:2.0.1


RubyGemsの更新

まずはRubyGemsを更新します。

更新方法はこちらに記載しています。


rbenvのセットアップ

rubyのバージョン管理ツールであるrbenvを導入すると、既存の環境を変更せずにBundlerをセットアップできます。

rbenvのセットアップについては以下の記事をご参照ください。

https://qiita.com/uhooi/items/3ff6f2747036189f649b


Bundlerのセットアップ

RubyGemsからインストールします。

$ gem install bundler


Gemのセットアップ


カレントフォルダの変更

まずはプロジェクトのルートフォルダに移動します。

$ cd {プロジェクトのルートフォルダ}


Gemfileの編集

プロジェクトのルートフォルダに Gemfile という拡張子なしのファイルを作成し、使いたいライブラリを記述します。

Gemfileのフォーマットは以下の通りです。


Gemfile

source 'https://rubygems.org'

gem '{パッケージ名}'


source 'https://rubygems.org' はおまじないです。

記述しないとCI/CD環境などで以下のエラーが発生します。

$ bundle install

Your Gemfile has no gem server sources. If you need gems that are not already on
your machine, add a line like this to your Gemfile:
source 'https://rubygems.org'
Your bundle is locked to CFPropertyList (2.3.6), but that version could not be
found in any of the sources listed in your Gemfile. If you haven't changed
sources, that means the author of CFPropertyList (2.3.6) has removed it. You'll
need to update your bundle to a version other than CFPropertyList (2.3.6) that
hasn't been removed in order to install.

例:

slatherをインストールします。


Gemfile

source 'https://rubygems.org'

gem 'slather'


パッケージのインストール

以下のコマンドを実行します。

$ bundle install

インストールが完了するとGemfile.lockというファイルが作成されます。

こちらのファイルには実際にインストールしたパッケージのバージョンが記述されています。

Gemfile.lockが存在するときに bundle install を実行すると、基本的には Gemfileを見ずにGemfile.lockのみを見てパッケージをインストール します。

Gemfile.lockは更新されません。

しかし、GemfileとGemfile.lockに矛盾がある場合、Gemfile.lockを更新してからパッケージをインストールします。

開発者同士でパッケージのバージョンを合わせるときに使います。


ライブラリの更新

bundle update を実行すると、Gemfileに記述した全てのパッケージがGemfileに従って更新されます。

$ bundle update

Gemfile.lockも更新されます。


bundle installbundle update の違い

bundle installbundle update の違いの詳細については、scivolaさんのコメントが非常にわかりやすいので、こちらを参照してもらえればと思います。

この場を借りてお礼申し上げます:bow:


Bundlerのバージョンアップ

RubyGemsからバージョンアップします。

$ gem update bundler


Gemの実行方法

コマンドの先頭に bundle exec を付けて実行します。

付けないとプロジェクト外でインストールされたコマンドが実行されます。

例:

slatherを実行します。

$ bundle exec slather


おわりに

これでプロジェクトごとに異なるバージョンのGemが使えるようになります!

CI/CD環境で特定のバージョンのGemをインストールしたいときにも使えるので、非常に便利なツールです。


参考リンク