8
8

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 3 years have passed since last update.

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

Last updated at Posted at 2019-04-09

「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

2021/03/27, 追記
Ruby 2.6.0 あたりから標準でBundlerがインストールされるようになりました。
Bundlerのバージョンを切り替える方法がわからなかったので、基本的にはそのまま使うのがいいと思います。

Gemのセットアップ

カレントフォルダの変更

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

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

Gemfileの編集

プロジェクトのルートフォルダに移動して bundle init を実行すると、 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をインストールしたいときにも使えるので、非常に便利なツールです。

参考リンク

8
8
4

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
8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?