key’s Tech::Blog

渋谷で働く学生の技術Blog

bundle execを使ったrailsプロジェクト開発

はじめに

bundle execをなぜ使うのかということに焦点を当てて、一連の流れをまとめていこうかなと思います。


【開発環境】
OSX 10.13.1
Ruby 2.3.1
rails 5.0.6

gem install bundlerでbundlerはインストールしておいて下さい。


背景

bundlerやgemについての知識が混同していたところ、友人のスーパーエンジニアさいぬ君(@kattyan310)に色々と教えてもらったのでそれを基に自分なりにまとめていこうと思います。間違った解釈があればご指摘お願いします。

gemとbundlerについて

詳細は下記の記事などを参考にして下さい。*1

Bundlerの使い方 - Qiita

簡単に言うと、

  • gemはプログラミング言語Rubyに付属してるライブラリ管理ツール(であり、ライブラリの総称でもある。)

  • bundlerはgemのバージョン管理ツール同士の依存関係を解決・管理するためのライブラリ*2

なぜbundle execを使うのか

一言で言えば、プロジェクト内のgemを使うためです。
(bundle install --path vendor/bundleのコマンドでプロジェクト内のvendor/bundleにgemをインストールすることができます。)

bundle execなしでコマンドを打つとシステム(PC)内にインストールされたgemを利用することになります。

これを利用することで新たなプロジェクトに参加する際に新たにシステム内にgemを入れる必要もなく、gemを利用することができる。

実例

$ rails new プロジェクト名   #railsアプリケーションの新規作成

gemを追加したら

$ bundle install --parh vendor/bundle   #プロジェクト内のvendor/bundle内にgemをインストール

データベースを作成する場合、

$  bundle exec rake db:create   #データベースの作成

など、rakeやrailsなどのコマンドの時にbundle execをつければOK

※一度、--path vendor/bundleでパスを指定してあげれば、プロジェクトディレクトリ配下にあるbundleの設定が書かれた.bundle/config内にBUNDLE_PATH: vendor/bundleという設定を追加してくれるので、次回以降にgemを追加する際にはbundle installだけでOKです。

まとめ

  1. gemはbundlerで管理しよう

  2. bundle execを使うことでプロジェクト毎にgemを使い分けることが出来る

最後に

モヤモヤしてたものが少し晴れたので良かった♪(´ε` )

本記事のは初心者向けですが、もう一歩踏み出した中級者以上にはさいぬ君(@kattyan310)の下記の記事がオススメです。
sa-inu.hatenablog.com

参考

bundler、bundle execについて ※自分用メモ - Qiita

Ruby の gem をプロジェクト毎に Bundler で管理する - fugafuga.write

*1:どちらもgemをインストールすることはできるけれど、bundlerでは他のメリットもあるために基本的にbundlerを使う。メリットについてはこちら

*2:「依存関係を解決する」とは、例えばですが、rails(ver4.2.6)、mysql2(ver0.3.18)があった際にこれらは問題なく動作するとしても、rails(ver5.0.6)にした場合にmysql2(ver0.3.18)との連携が取れなくなる場合があります。(このgem同士はまずないでしょうが。。)しかし、bundlerを使うことでrails(ver5.0.6)にした場合、それと連携できるmysql2のバージョンをbundlerは探し出して入れてくれます。