6
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Gem管理】bundle install先をrbenv配下からvendor/bundler配下へ変更する

Posted at

Railsではbundle installでgemがインストールができます。gemsはiOSでいうところのPodsみたいなものかなって思っています。さて、Rails Tutorialを進めていると、rbenvを利用するためインストールしたgemのパッケージ群が下記フォルダ内に入ります。

/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems
                /2.2.0/・・・
                /2.1.0/・・・

この場合、プロジェクトフォルダとは別にあるRubyのバージョン管理共通部分にgem群がインストールされるため、他プロジェクトで異なるgemインストールを実行した場合に影響します。例えば、プロジェクトA・Bでそれぞれv2.3.0を利用していた場合に、片方が追加したパッケージがもう一方のプロジェクトにもインストールされていることになります。

#プロジェクトごとにgemインストール
そこで、各プロジェクトフォルダごとにgemインストールができる方法を紹介します。下記のようにvendor配下を指定すると、パッケージ群がプロジェクトフォルダ/vendor/bundler配下にインストールされます。Railsではこのフォルダ配下に設置することがお作法なようです。

bundle install --path vendor/bundler

これを実行することによって、プロジェクトAとBの依存関係はなくなります。

#プロジェクトが参照中のgemを確認
両方の設定をしていた場合にどちらを参照しているか分からなくなります。そこでrubyMineでの確認方法を明記します。

Preference -> Languages & Frameworks -> Ruby SDK and Gems

を開きます。右ウィンドウにそのプロジェクトで実際に参照しているgem一覧が表示されています。gemfileに定義していたのにgemが読み込まれていない時、vendor/bundlerを参照せずrbenv配下を読み込みドツボにハマることがあるのでお気をつけください。

11.png

#(おまけ)プロジェクトごとに特定のrubyバージョンを利用
gemインストールはプロジェクトごとにできたけど、rubyのバージョンもプロジェクトごとにできないでしょうか。rbenvだと下記フォルダで管理されています。

/.rbenv/versions/2.3.0/・・・
                /2.2.0/・・・
                /2.1.0/・・・

ターミナル(プロジェクト内)で確認してみると.rbenv配下を参照しrubyバージョンを設定しということがわかります。

$ rbenv versions
* system (set by /Users/[Username]/.rbenv/version)
  2.3.0

そこで、プロジェクトフォルダ直下に.ruby-versionを下記のように作成します。そして、ファイル内にバージョンを明記するだけ。

スクリーンショット 2016-03-31 2.07.37.png

再度、ターミナル(プロジェクト内)で確認してみるとプロジェクトフォルダ配下を参照しrubyバージョンを設定していることがわかります。

$ rbenv versions
  system
* 2.3.0 (set by /Users/[Username]/Development/workspace/[プロジェクト名]/.ruby-version)
6
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?