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配下を読み込みドツボにハマることがあるのでお気をつけください。
#(おまけ)プロジェクトごとに特定の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
を下記のように作成します。そして、ファイル内にバージョンを明記するだけ。
再度、ターミナル(プロジェクト内)で確認してみるとプロジェクトフォルダ配下を参照しrubyバージョンを設定していることがわかります。
$ rbenv versions
system
* 2.3.0 (set by /Users/[Username]/Development/workspace/[プロジェクト名]/.ruby-version)