Gem、Bundlerの仕組み

December 11th, 2020

RubyGems


RubyGemsとは

Ruby用のパッケージ管理システムのこと。 RubyがRubyGemsを標準ライブラリとして内包している。 Rubyとともに使える色々なgem(パッケージ)を管理してくれます。

ruby -v
# Rubyがあるなら
gem -v
# gemコマンドも使える

gem install Gem名 でgemをインストールしたりできる。

*Gemのドキュメント

https://guides.rubygems.org/

RubyGems自体のupdate方法

gem update —system

特定のgemをバージョンアップする

gem update [GEMNAME]

*RubyGemsのコマンド

https://guides.rubygems.org/command-reference/

Bundler について


bundler

bundler自体も実はGemの一種です。 Gem同士の依存関係とバージョンの管理してくれます。

*Bundle gem ドキュメント

https://bundler.io/man/bundle-install.1.html

bundle init
# Gemfileを作る
bundle install
# でGemfileに記載したgemを一括で導入できる.

bundle install時のgemのインストール先

  • デフォルトではgem envで確認できる。

INSTALLATION DIRECTORYにgemはインストールされるが、別の場所に変えることも可能。

  • 別の場所に変更する。
bundle install —path vendor/bundle --jobs=4

# 最初だけ--path vendor/bundle すると次回以降のbundleインストール先は
# ./vendor/bunlde以下にgemがインストールされる。
# --jobs=4 は並列処理でbundle installしてくれます。(つまり、はやくなります。)
# -j4 と書いてもOKです。

bunlderの設定確認

bundle config

# または

bundler env
# こちらは、bundler だけでなく ruby や gem 等の情報も確認できる.

bundlerがどこからgemを探すかは、プロジェクトルートの下の.bundle/configに設定ファイルで決まります。これを消すことで、新たな場所にbundle installできるようになります。 無い場合は先ほど説明した、gem envで表示されるINSTALLATION DIRECTORYになります。

The location to install the specified gems to. This defaults to Rubygems' setting.

Bundle updateについて

Gemfileをもとにgemの更新やインストールを行います。 Gemfile.lockで管理している各Gemのversionが変わります. Gemfileに記載しているものは変わりません。

bundle update
# Gemfileにあるgemがupdate可能ならupdate
bundle update 特定のgem
# 特定のgemをupdate

Gemfileに書いてるversion

semantic versioningというルールで決められています。

  • 例えば、gem 'rails', '~> 5.2.5'のような記述があったとして

    5.2.5のようにA.B.Cで分かれています。以下のように分類しています。

  • A: Major(後方互換性のない大きな変更)
  • B: Minor(後方互換性のある小さな変更)
  • C: Patch(バグの修正などの変更)

ちなみに、'~> 5.2.5'は 5.2.5以上 6.0.0未満 の最新のものを利用するという意味。つまり、Majorバージョンは5に固定しておきたいわけです。

Gemを削除する

  1. RubyGems自体から削除
gem uninstall gem名
  1. Gemfileから該当のGemの記載を削除し、Gemfile.lockを更新し、gemを削除
bundle install or bundle update