よわよわ大学生の掃き溜め

自分の興味があることを備忘録も兼ねて記録するところ。

gem?Bundler?ナニソレオイシイノ?

美味しいです。

…嘘です。

用語説明

gem

Rubyにおけるライブラリのことです。

RubyGemsというシステムで管理されており、リポジトリからダウンロードすれば使うことができます。 大半のgemは下記のサイトに登録されているので、何か探しているgemがある際はこのサイトで探せば見つかると思います。

rubygems.org

Bundler

gemの一種でありながら、gemを管理するものです。

様々なgemを使う際、互換性の問題が生じる場合があります。 また、チームで開発する際などはインストールするgemの種類とバージョンを全員一致させなければいけません。 このような場合、そのプロジェクトで使うgemの一括導入を行うのがBundlerです。

Bundlerの設定(どのgemのどのバージョンをインストールするかなど)はGemfileGemfile.lockを用いて行います。

わからないことは大抵下記サイトに載っていると思います。

bundler.io

Bundlerをインストールする

動作確認環境

インストール

Rubyのインストールは完了している前提です。 まだそれらをインストールしていない方はこちらからどうぞ。

maru2213.hatenablog.jp

Rubyをインストールしたら以下のコマンドを実行するだけでBundlerのインストールは完了です。

gem install bundler

Bundlerのバージョンが表示されることを確認しましょう。

bundler -v

Bundlerを使ってみる

まず、プロジェクト用のディレクトリを作成してください。

その後、そのディレクトリに移動して以下のコマンドを実行します。

bundle config set --local path 'vendor/bundle'
bundle init

1行目はgemのインストール先をvendor/bundleに設定するコマンドです。 こうすることでgemをプロジェクトごとに管理しやすくなります。

2行目はBundlerの初期化(?)みたいなことをしてGemfileというファイルを作成しています。

次はそのGemfileに必要なgemを記入していきます。 Gemfileの書き方はこちらのサイトがわかりやすいです。

xxxcaqui.hatenablog.com

Gemfileを編集した後に以下のコマンドを実行し、gemをインストールします。

bundle install

これでgemのインストールは完了です。

あとはいつものようにrequireを書けば使えます…が、gemをvendor/bundleにインストールした際に一つ注意することがあります。 普段ならば

ruby app.rb

のように実行すると思うのですが、このコマンドだとシステムのgemを使おうとしてしまい、vendor/bundle下のgemを使ってくれません。

そのため、

bundle exec ruby app.rb

と、頭にbundle execをつけるようにしましょう。

豆知識(その1)

.rbファイルの頭に

require 'bundler/setup'
Bundler.require

と記述すると、各gemを個別でrequireすることなく、gemを一括でrequireすることができます。

豆知識(その2)

Gemfileには、私たちが使いたいgemを記述します。

その後、bundle installを実行するとGemfile.lockというファイルが生成されます。 これは、Gemfileに書いてあるgemの依存関係諸々を考慮して、最終的にインストールされたgemの一覧です。

Gemfile.lockを使うことで、開発環境と本番環境のgemの種類・バージョンを統一することができ、「こっちでは動くけどあっちでは動かねぇ!」という事態を防ぐことができます。

豆知識(その3)

bundle installは基本的にGemfile.lockに従ってgemをインストールします。 その際、Gemfileに新しく追加された(つまりGemfile.lockに記載されていない)gemがあればそれもインストールします。

それに対して、bundle updateGemfileに従ってgemをインストールし、Gemfile.lockを更新します。