RubyやRailsを使って開発を行う上で、複数のバージョンを使いたい&管理したい時がある。
そんな時、rbenvを使うと便利だ。
rbenv
Rubyのバージョンを簡単に切り替えてくれるツール。
rbenvのインストール→指定したRubyのバージョンをインストールする手順
// 1.初期化設定
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
// 2.初期化設定の反映
$ source ~/.bash_profile
// 3.rbenvのインストール:
$ brew install rbenv ruby-build
// 4.インストール可能なRubyのバージョン一覧の表示
$ rbenv install -l
// 5.指定したRubyのバージョンをインストール
$ rbenv install 2.3.5
// 6.インストールしたRubyを使用可能な状態にする⇒shimsへの反映
$ rbenv rehash
複数のバージョンのRubyをインストールしたい場合は、4.⇒5.⇒6.を繰り返す。
rbenvのフォルダ構成
~/.rbenv/ (ルートフォルダ)
~/.rbenv/shims/ (rubyやgemがインストールしてくれるコマンドのラッパーを保存するフォルダ)
~/.rbenv/version (グローバルに設定しているRubyバージョンを記録するファイル)
~/.rbenv/versions/ (その他のインストールした各種Rubyバージョンをインストールするフォルダ)
引用元:rbenvとは - Qiita
shims(rbenv rehash)について
rubyやgemをインストールして使えるコマンド(irb, gem, rake, rails, rubyなど)をバージョン毎に振り分けるフォルダ。
// "rbenv which コマンド名"を使って、コマンドの参照先のバージョンが変わっている事を確認してみる。
// rubyコマンドの参照先を確認(rubyコマンドの参照先がバージョン2.3.5を向いている事を確認)
$ rbenv which ruby
~/.rbenv/versions/2.3.5/bin/ruby
// rubyのバージョンを切り替え
$ rbenv global 2.5.0-dev
// rubyコマンドの参照先が変わった事を確認
$ rbenv which ruby
~/.rbenv/versions/2.5.0-dev/bin/ruby
$
こういったコマンドをバージョン毎に参照先を切り替えをてくれるディレクトリが、shims(rbenv rehash)。
gemからインストールして、新しいコマンドが増える場合は必ず"rbenv rehash"を行うこと!
rbenvを使ってRubyのバージョンを切り替える手順
切り替え方法は、localとglobalの2種類がある。
■localで切り替え
$ ruby -v
ruby 2.3.5p376 (2017-09-14 revision 59905) [x86_64-darwin16]
$ rbenv local 2.5.0-dev
$ ruby -v
ruby 2.6.0dev (2018-03-11 trunk 62724) [x86_64-darwin16]
$
プロジェクト毎に使用するRubyのバージョンを切り替える時に使用する。
rbenv local X.X.Xコマンド時、カレントディレクトリにバージョン情報が書かれた.ruby-versionファイルを作成する。
.ruby-versionファイルがある層より下のディレクトリは、.ruby-versionファイルに書かれたバージョンが使われる。
なお、.ruby-versionファイルは、global切り替えよりも優先順位が高いため、.ruby-versionファイルに書かれたバージョンが優先される。
■globalで切り替え
$ ruby -v
ruby 2.3.5p376 (2017-09-14 revision 59905) [x86_64-darwin16]
$ rbenv global 2.5.0-dev
$ ruby -v
ruby 2.6.0dev (2018-03-11 trunk 62724) [x86_64-darwin16]
$
パソコン全体で使用するRubyのバージョンを切り替える時に使用する。
上記のrbenvフォルダ構成にある~/.rbenv/versionのバージョンを切り替えている。
ただし、フォルダに.ruby-versionがファイルがある場合は、そちらに記載されているバージョンが優先される。
備忘録
rbenvについて調べたきっかけは、Rakeコマンド時に以下エラーが出たからだった。
ワーニングメッセージ:
warning: already initialized constant FileUtils::RUBY
原因:
Railsのvendor/bundleのgemとrbenvでインストールしたrubyの中のgemが競合したため。
対処方法:
Railsのvendor/bundleのgemを削除。
※rbenvでインストールしたrubyの中のgemのみにする。
rbenvはrubyのバージョンによって中のgemも同時に管理できるため、Railsのvendor/bundleでgemを管理する必要はないと判断。
また、Railsで新規プロジェクトを作成する際に、rails newする必要があるため、rbenvでgemを管理した方が楽と思った。
現在は以下2バージョンを使い分けて管理中。
・ruby-2.3.5 → Rails 4.2.1
・ruby-2.5.0 → Rails 5.1.5
ご参考にさせて頂いたQiita記事
Rake コマンドで already initialized constant FileUtils::RUBY - Qiita
rbenvでRubyのバージョンを指定する方法 - Qiita