bundle execとは?Railsで必要な理由と使い方を初心者向けに解説
こんにちは、とまだです。
みなさん、Railsを勉強していて「bundle exec」というコマンドを見て戸惑ったことはありませんか?
「なんでわざわざ長いコマンドを打つの?」
「bundle execってそもそも何?」
そんな疑問を持つのは当然です。
今回は現役のエンジニア、そして元プログラミングスクール講師としての経験から、bundle execについて解説します。
この記事を読めば、bundle execの仕組みと必要性が理解できます。
そして、Rails開発でのトラブルを避けられるようになります。
bundle execとは?図書館で例えてみる
bundle execを理解するには、まず図書館を想像してみてください。
あなたが「Ruby入門」という本を読みたいとします。
でも図書館には違う版の「Ruby入門」が3冊あります。
- 2020年版
- 2022年版
- 2024年版
どれを読むべきでしょうか?
実は、あなたのプロジェクトには「2022年版を使う」と決まっています。
でも、うっかり最新の2024年版を手に取ってしまうかもしれません。
すると、書いてある内容が微妙に違って混乱します。
bundle execは「必ず指定された版を使う」ための仕組みです。
つまり、図書館の司書さんが「このプロジェクトは2022年版ですよ」と教えてくれるイメージです。
なぜbundle execが必要なのか
Railsプロジェクトでは、たくさんのGem(ライブラリ)を使います。
これらのGemにはバージョンがあります。
たとえば、Railsにも6.0、6.1、7.0などのバージョンがあります。
複数のプロジェクトを扱っていると、問題が起きます。
プロジェクトAではRails 6.0を使い、プロジェクトBではRails 7.0を使う。
こんな状況はよくあります。
もし、bundle execを使わないとどうなるでしょう?
システムにインストールされた最新版が勝手に使われます。
Rails 6.0で動くはずのプロジェクトが、Rails 7.0で動いてエラーになる。
これは本当によく起こるトラブルです。
Gemfileという設計図の役割
Railsプロジェクトには必ずGemfileというファイルがあります。
これは「このプロジェクトで使うGemのリスト」です。
まるで料理のレシピのようなものです。
# Gemfileの例
gem 'rails', '~> 6.1.0'
gem 'pg', '~> 1.1'
gem 'puma', '~> 5.0'
このレシピには材料(Gem)とその分量(バージョン)が書かれています。
そして、bundle install
を実行すると、Gemfile.lockというファイルができます。
これは「実際に使う材料の詳細な記録」です。
bundle execは、この記録通りのGemを使うことを保証してくれます。
よく使うbundle execコマンド
実際の開発でよく使うコマンドを見てみましょう。
Railsサーバーの起動
bundle exec rails server
プロジェクトで指定したRailsのバージョンでサーバーが起動します。
データベースのマイグレーション
bundle exec rails db:migrate
データベースの構造を変更する重要な作業です。
バージョン違いは致命的なエラーにつながります。
テストの実行
bundle exec rspec
テストツールも正しいバージョンで動かす必要があります。
bundle execを使わないとどうなる?
実際に起こりやすいトラブルを紹介します。
ケース1:メソッドが見つからない
新しいバージョンで追加されたメソッドを使っていると、古いバージョンでエラーになります。
逆に、古いバージョンで削除されたメソッドを使っているとエラーになります。
ケース2:挙動が変わる
同じメソッドでも、バージョンによって動作が変わることがあります。
開発環境では動いたのに、本番環境で動かない。
そんな悲劇が起こります。
ケース3:依存関係の衝突
GemAがGemBの特定バージョンを要求することがあります。
この依存関係が崩れると、予期せぬエラーが発生します。
bundle execを楽に使うコツ
毎回「bundle exec」と打つのは面倒ですよね。
そこで、エイリアス(省略形)を設定する方法があります。
bashやzshの設定
# ~/.bashrcや~/.zshrcに追加
alias be="bundle exec"
これでbe rails server
と短く書けます。
よく使うコマンドだけエイリアス化
alias bers="bundle exec rails server"
alias berdb="bundle exec rails db:migrate"
自分がよく使うコマンドだけ登録するのも良い方法です。
開発チームでの重要性
一人で開発している時は、あまり問題を感じないかもしれません。
でも、チーム開発では話が変わります。
メンバー全員が同じ環境で開発する必要があります。
Aさんの環境では動くのに、Bさんの環境では動かない。
こんな状況は開発の進行を大きく妨げます。
bundle execを使えば、全員が同じバージョンのGemを使います。
これにより、「私の環境では動くのに...」という問題を防げます。
本番環境でのbundle exec
開発環境だけでなく、本番環境でも重要です。
デプロイツールの多くは、自動的にbundle execを使います。
たとえば、Capistranoというツールでは以下のように実行されます。
bundle exec puma -C config/puma.rb
これにより、本番環境でも確実に指定バージョンで動作します。
トラブルシューティング
bundle exec関連でよくある問題と解決法を紹介します。
Gemが見つからない
エラーメッセージに「could not find gem」と出る場合があります。
まず、以下を確認しましょう。
bundle install
これでGemfileに書かれたGemがインストールされます。
バージョンが合わない
「gem version conflict」などのエラーが出ることがあります。
Gemfile.lockを削除して、再度bundle installすると解決することがあります。
rm Gemfile.lock
bundle install
ただし、チーム開発では慎重に行ってください。
Rubyのバージョン違い
rbenvやrvmを使っている場合、Rubyのバージョンも確認が必要です。
ruby -v
プロジェクトで指定されたRubyバージョンと一致しているか確認しましょう。
まとめ
bundle execは、Gemのバージョンを固定するための重要な仕組みです。
図書館で例えると、「必ず指定された版の本を使う」ための仕組みでした。
最初は面倒に感じるかもしれません。
でも、この習慣が大きなトラブルを防いでくれます。
特に以下の場面では必ず使いましょう。
- Railsサーバーの起動
- データベースの操作
- テストの実行
- 本番環境へのデプロイ
エイリアスを設定すれば、入力の手間も減らせます。
Rails開発を続けていく上で、bundle execは欠かせない相棒になります。
ぜひ今日から意識して使ってみてください。
著者について

とまだ
フルスタックエンジニア
Learning Next の創設者。Ruby on Rails と React を中心に、プログラミング教育に情熱を注いでいます。初心者が楽しく学べる環境作りを目指しています。
著者の詳細を見る →