Bundler で Gem を管理しよう

学習の目標

本章では、以下の内容を学習します。

  • Bundler の概念と役割を理解する
  • Bundler をインストールして使えるようにする
  • Gemfile の作成と編集方法を習得する
  • bundle install コマンドでライブラリを導入する
  • Gemfile.lock の意味と重要性を理解する
  • インストールした gem を実行する方法を学ぶ

はじめに

Ruby の世界では、便利な機能をまとめた「gem」と呼ばれるライブラリがたくさん存在します。これらの gem を使うことで、一から全てのコードを書かずに済み、開発効率が大幅に向上します。

しかし、gem を導入する際に問題となるのが依存関係です。例えば「A という gem を使うためには B という gem が必要で、そのバージョンは 2.0 以上でなければならない」といった条件が発生します。複数の gem を使用すると、この依存関係は複雑になっていきます。

そこで活躍するのが Bundler です。Bundler は gem の依存関係を自動的に解決してくれるツールで、Ruby の開発現場では必ず使われる重要なツールです。今回は、この Bundler のインストールから使い方までを学んでいきましょう。

Bundler の概要

Bundler は「gem のための gem」と言えるツールです。その主な役割は以下の通りです。

Bundler の主な役割

  • プロジェクトで使用する gem のバージョンを管理する
  • gem 間の依存関係を自動的に解決する
  • 開発環境を統一し、「自分の環境では動くのに他の人の環境では動かない」という問題を防ぐ

例えば、Ruby on Rails というフレームワーク(これも gem の一つです)を使う場合、Rails だけでなく、その動作に必要な何十もの gem が自動的にインストールされます。これらの gem が適切なバージョンで導入されるよう管理するのが Bundler の仕事です。

Bundler を使うことで、「この gem のバージョンは何にすべきか」「このバージョンの gem を入れると競合しないか」といった心配をする必要がなくなります。

Bundler のインストール

Bundler 自体も gem の一つなので、gem install コマンドでインストールできます。ターミナル(Mac)またはコマンドプロンプト(Windows)を開き、次のコマンドを実行しましょう。

$ gem install bundler

インストールが完了したら、バージョン番号を確認してみましょう。

$ bundler -v
Bundler version 2.6.5

バージョン番号が表示されれば、インストールは成功です。表示されるバージョン番号はインストールした時点のものなので、上記と異なる数字が表示されても問題ありません。

Gemfile の作成

Bundler を使うためには、Gemfile(ジェムファイル)という、使用したい gem の情報をまとめたファイルが必要です。まずは、作業用のディレクトリを作成し、その中に Gemfile を作成していきましょう。

作業ディレクトリの準備

最初に、作業用のフォルダを作成します。VS Code などのエディタでデスクトップを開き、ターミナルを起動しましょう。

$ mkdir workspace
$ cd workspace

mkdir コマンドでworkspaceという名前のディレクトリを作成し、cd コマンドでそのディレクトリに移動しました。

Gemfile の作成

workspace ディレクトリ内で、Bundler の初期化コマンドを実行します。

$ bundle init

このコマンドを実行すると、現在のディレクトリ(workspace)内に Gemfile という名前のファイルが自動的に作成されます。VS Code のエクスプローラーで確認してみましょう。

Gemfile の編集

作成された Gemfile を VS Code で開き、以下のように編集します。

source 'https://rubygems.org'
gem 'rails', '~> 8.0'

この Gemfile では、次のことを指定しています。

  1. source 'https://rubygems.org' - gem をダウンロードする場所(Ruby の公式リポジトリ)
  2. gem 'rails', '~> 8.0' - Rails gem をインストールすること、そしてそのバージョンは 8.0.x シリーズの最新版を使用すること

バージョン指定の ~> 8.0 という書き方は「8.0 以上 9.0 未満の最新版」という意味になります。これにより、セキュリティパッチなどの小さなアップデートは自動的に取り込まれますが、互換性が壊れる可能性のある大きなバージョンアップは行われないようになります。

gem のインストール (bundle install)

Gemfile を用意できたら、その定義に従って gem をインストールします。ただし、システム全体ではなく、プロジェクト内にのみインストールすることをおすすめします。これにより、異なるプロジェクト間で gem のバージョンが衝突する問題を避けられます。

インストール場所の設定

まず、gem をプロジェクト内にインストールするための設定を行います。

$ bundle config set path '.bundle'

このコマンドは、gem を workspace ディレクトリ内の .bundle フォルダにインストールするよう Bundler に指示します。

gem のインストール

次に、bundle install コマンドを実行して gem をインストールします。

$ bundle install

このコマンド実行後、多くのテキストが画面に流れます。これは Rails とその依存関係にある gem がインストールされていることを示しています。最終的に以下のようなメッセージが表示されれば成功です。

Bundle complete! xx Gemfile dependencies, xxx gems now installed.

最後に「Bundle complete!」と表示されていれば、インストールは成功しています。もし別のメッセージが表示されていたり、エラーが発生している場合は、何かしらの問題が発生しています。

インストールがうまくいかない場合

bundle install コマンドは環境によっては失敗することがあります。これは初学者がつまずきやすいポイントの一つです。エラーが発生した場合は、次のような対処法を試してみましょう。

  1. エラーメッセージをコピーして Google 検索する
  2. ChatGPT などのAIサービスにエラーメッセージを質問する
  3. スクールの質問フォームを利用する

エラーメッセージには問題の原因が書かれていることが多いので、必ず目を通すようにしましょう。

Gemfile.lock の確認

bundle install が成功すると、workspace ディレクトリ内に Gemfile.lock というファイルが作成されます。このファイルには、実際にインストールされた gem の正確なバージョン情報が記録されています。

Gemfile.lock を VS Code で開いてみると、次のような内容が記載されています。

GEM
remote: https://rubygems.org/
specs:
actioncable (8.0.1)
actionpack (= 8.0.1)
activesupport (= 8.0.1)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
zeitwerk (~> 2.6)
actionmailbox (8.0.1)
...

このファイルは非常に重要で、以下のような役割を持っています。

Gemfile.lock の役割

  • 実際にインストールされた gem の正確なバージョンを記録する
  • チーム開発時に全員が同一バージョンの gem を使えるようにする
  • 本番環境と開発環境で同じバージョンの gem を使用できるようにする

つまり、Gemfile が「こういう gem を使いたい」という希望を表すのに対し、Gemfile.lock は「実際にこういう gem を使っている」という現実を記録しているのです。

チーム開発では、この Gemfile.lock をバージョン管理システム(Git など)で共有することで、全ての開発者が同じバージョンの gem を使うことができます。これにより、「自分の環境では動くのに、他の人の環境では動かない」といった問題を防ぐことができます。

インストールした gem を実行する

最後に、インストールした gem を実行する方法を見ていきましょう。Bundler でインストールした gem を使うときは、通常のコマンドの前に bundle exec を付ける必要があります。

例えば、Rails のバージョンを確認するには、次のコマンドを実行します。

$ bundle exec rails -v
Rails 8.0.2

bundle exec を付けることで、「Bundler が管理している gem を使って実行してください」という指示になります。これにより、Gemfile で指定したバージョンの gem が確実に使われるようになります。

表示されるバージョン番号はインストールした時点のものであり、最新版と異なる場合がありますので、上記と異なるバージョンが表示されていても問題ありません。

トラブルシューティング

もし「Gemfile が見つからない」というエラーが表示された場合は、次の点を確認してください。

  1. 実行するディレクトリが間違っていないか(workspace ディレクトリ内にいるか)
  2. Gemfile が正しく作成されているか
  3. bundle install が正常に完了しているか

これらを確認することで、多くの問題は解決できるでしょう。

まとめ

本章では、Ruby の開発に欠かせない Bundler について学びました。以下のことを理解できたと思います。

  • Bundler は gem の依存関係を自動的に解決するツールである
  • Gemfile には使用したい gem とそのバージョンを記述する
  • bundle install コマンドで gem をインストールする
  • Gemfile.lock には実際にインストールされた gem の正確なバージョンが記録される
  • インストールした gem を実行するときは bundle exec を付ける

Bundler は Ruby の開発現場では必ず使われるツールであり、今後の Rails 開発でも重要な役割を果たします。この章で学んだことをしっかりと理解して、次のステップに進みましょう。

このセクションは有料サブスクリプションへの登録、またはログインが必要です。完全なコンテンツにアクセスするには、料金ページ(/pricing)をご覧ください。購入済みの場合は、ログインしてください。

Basicプランでより詳しく学習

この先のコンテンツを読むにはBasicプラン以上が必要です。より詳細な解説、実践的なサンプルコード、演習問題にアクセスして学習を深めましょう。

作成者:とまだ
Previous
TechLog を触ってイメージを掴もう