261
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Organization

rbenvの使い方と仕組みについて

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
261
Help us understand the problem. What are the problem?