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は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です。
まとめ
gemはbundlerで管理しよう
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は探し出して入れてくれます。