Ruby で Python の virtualenv 的なことをする
rbenv-gemset というツールで実現できます。
環境は Mac を想定。
rbenv, rbenv-gemset インストール
rbenv は Ruby のバージョン管理ツールです。
$ brew install rbenv ruby-build rbenv-gemset $ rbenv -v rbenv 1.0.0 $ rbenv gemset version rbenv-gemset 0.5.9 by Jamis Buck <jamis@jamisbuck.org> Currently maintained by Jeffrey 'jf' Lim <jfs.world@gmail.com> http://github.com/jf/rbenv-gemset
Ruby インストール
$ rbenv install 2.2.5 $ rbenv versions * system (set by /Users/hoge/.rbenv/version) 2.2.5
マシン全体のRubyを2.2.5に変えます
$ rbenv global 2.2.5 $ rbenv versions system (set by /Users/hoge/.rbenv/version) * 2.2.5
gem は初期状態で以下のものが入ってます。
$ gem list *** LOCAL GEMS *** bigdecimal (1.2.6) io-console (0.4.3) json (1.8.1) minitest (5.4.3) power_assert (0.2.2) psych (2.0.8) rake (10.4.2) rdoc (4.2.0) test-unit (3.0.8)
rbenv-gemsetを使って仮想環境の作成
何もせずに gem install するとマシン全体の Ruby 2.2.5 にどんどんインストールされてだんだん汚くなるので、プロジェクトごとに入れるものを分けたい。
まずはプロジェクトで使いたいRubyバージョンを決める。
rbenv local バージョン
でできる。
$ mkdir project $ cd project $ rbenv local 2.2.5 $ ruby -v ruby 2.2.5p319 (2016-04-26 revision 54774) [x86_64-darwin16]
次に、仮想環境の作成を行う。仮想環境の名前を sample とする。
$ rbenv gemset create 2.2.5 sample $ rbenv gemset init sample $ ls -a ./ ../ .rbenv-gemsets .ruby-version
これで完了。
汚れるかどうかの確認
まずはプロジェクト内の gem
$ pwd /Users/hoge/project $ gem list *** LOCAL GEMS *** bigdecimal (1.2.6) io-console (0.4.3) json (1.8.1) minitest (5.4.3) power_assert (0.2.2) psych (2.0.8) rake (10.4.2) rdoc (4.2.0) test-unit (3.0.8)
そして全体の gem
$ pwd /Users/hoge $ gem list *** LOCAL GEMS *** bigdecimal (1.2.6) io-console (0.4.3) json (1.8.1) minitest (5.4.3) power_assert (0.2.2) psych (2.0.8) rake (10.4.2) rdoc (4.2.0) test-unit (3.0.8)
どちらも同じ状態。
プロジェクト内で serverspec をインストールして後に gem を見てみます
$ pwd /Users/hoge/project $ gem install serverspec $ gem list *** LOCAL GEMS *** bigdecimal (1.2.6) diff-lcs (1.3) io-console (0.4.3) json (1.8.1) minitest (5.4.3) multi_json (1.12.1) net-scp (1.2.1) net-ssh (4.1.0) net-telnet (0.1.1) power_assert (0.2.2) psych (2.0.8) rake (10.4.2) rdoc (4.2.0) rspec (3.5.0) rspec-core (3.5.4) rspec-expectations (3.5.0) rspec-its (1.2.0) rspec-mocks (3.5.0) rspec-support (3.5.0) serverspec (2.38.0) sfl (2.3) specinfra (2.67.2) test-unit (3.0.8)
いろいろ入りました。
そして、マシン全体の gem を見てみます。
$ pwd /Users/hoge $ gem list *** LOCAL GEMS *** bigdecimal (1.2.6) io-console (0.4.3) json (1.8.1) minitest (5.4.3) power_assert (0.2.2) psych (2.0.8) rake (10.4.2) rdoc (4.2.0) test-unit (3.0.8)
マシン全体のほうに serverspec がインストールされていない!!
これでちゃんとプロジェクト内が独立な環境になるようにできました。