gem?Bundler?ナニソレオイシイノ?
美味しいです。
…嘘です。
用語説明
gem
Rubyにおけるライブラリのことです。
RubyGemsというシステムで管理されており、リポジトリからダウンロードすれば使うことができます。 大半のgemは下記のサイトに登録されているので、何か探しているgemがある際はこのサイトで探せば見つかると思います。
Bundler
gemの一種でありながら、gemを管理するものです。
様々なgemを使う際、互換性の問題が生じる場合があります。 また、チームで開発する際などはインストールするgemの種類とバージョンを全員一致させなければいけません。 このような場合、そのプロジェクトで使うgemの一括導入を行うのがBundlerです。
Bundlerの設定(どのgemのどのバージョンをインストールするかなど)はGemfile
やGemfile.lock
を用いて行います。
わからないことは大抵下記サイトに載っていると思います。
Bundlerをインストールする
動作確認環境
- MacBook Pro (Early 2015)
- macOS Catalina (10.15.7)
インストール
Rubyのインストールは完了している前提です。 まだそれらをインストールしていない方はこちらからどうぞ。
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
の書き方はこちらのサイトがわかりやすいです。
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 update
はGemfile
に従ってgemをインストールし、Gemfile.lock
を更新します。