pythonに対するpyenvのようにrubyのバージョンを変更したり、個別にモジュールを管理したりできるrbenvを導入する。
あと、モジュールをインストールする gem install
に sudo
を付けなくても良いのも地味に便利。
gemset(pyenvの仮想環境のようなもの)を作って個別にモジュール管理すれば、色々インストールして訳わからん状態になったときでも、一旦チャラにして観光構築をやりなおせる。
なお、rbenvはrubyをバイナリインストールできなくて、ソースからコンパイルするので、インストールにはそれなりに時間がかかる。
以下の手順はUbuntu 16.04で動作確認した。他のバージョンでは、特にインストールの準備に微妙な違いがあるかもしれない。
インストール
準備
インストールに必要なモジュールをインストールする。
sudo apt install git autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm-dev
rbenv本体とプラグインのインストール
rbenv本体とプラグインをインストール。
export RBENV_ROOT=/proj/.rbenv # 環境に合わせて修正してね
git clone https://github.com/sstephenson/rbenv.git ${RBENV_ROOT}
git clone https://github.com/sstephenson/ruby-build.git ${RBENV_ROOT}/plugins/ruby-build
git clone git://github.com/jf/rbenv-gemset.git ${RBENV_ROOT}/plugins/rbenv-gemset
git clone https://github.com/sstephenson/rbenv-gem-rehash.git ${RBENV_ROOT}/plugins/rbenv-gem-rehash
git clone https://github.com/rkh/rbenv-update.git ${RBENV_ROOT}/plugins/rbenv-update
rbenv-gemset をインストールすることで、個別のモジュール環境を構築できる。pyenvのvirtualenvみたいな感じ。
rbenv-gem-rehashをインストールすることで、バージョン切り替えやgemのインストールの度にrbenv rehash を実行しなくてもよくなる。
rbenv-updateをインストールすることで、rbenv uppppdate
でrbenvと各プラグインのアップデートができる。
~/.bashrcの編集
rbenvの設定のため、~/.bashrc に以下を追加。
export RBENV_ROOT=/proj/.rbenv # 環境に合わせて修正してね
export PATH=$RBENV_ROOT/bin:$PATH
eval "$(rbenv init -)"
ここで設定を有効にするためにターミナルを開きなおす。
設定と使い方
rbenvでインストールできるバージョンの一覧を表示
rbenv install --list
rubyのインストール
インストールしたいバージョンを指定して実行する。
rbenv install 2.6.3
・・・ 気長に待つ。 ・・・
デフォルトで使用するバージョンの設定
デフォルトで使用したいバージョンを指定して実行する。
rbenv global 2.6.3
念のため指定したバージョンが実行されることを確認
ruby -v
gemsetの作成
色々試したあとに、インストールしたモジュールをチャラにしたいときを考えて、gemset(仮想環境みたいなもん)を構築しておく。
rbenv gemset create 《ベースバージョン》 《gemset名》
例えば、ruby 2.6.3 に test1 という名前のgemsetを作成する場合。
rbenv gemset create 2.6.3 test1
gemsetはインストールされた各バージョンに紐づいて作成される。
gemsetの設定
gemsetはディレクトリ毎に指定する。
カレントディレクトリに設定されたgemset(なければその親、さらに親と探す)と
カレントのRubyバージョンが使用される。
カレントのRubyのバージョンに指定されたgemsetが存在しなければ新しくgemsetを作成するが、中身は空。
なので、gemsetを指定したときは、同時に rbenv local
でローカルバージョンも指定しておくのが無難。
cd 《設定したいディレクトリ》
rbenv local 《バージョン》
rbenv gemset init 《gemset名》
gemset名を省略するとカレントディレクトリ名と同じ名前でgemsetが作成され、そのgemsetに設定される
例えば、こんな感じ。
cd /work
rbenv gemset init test1
作成されたgemsetの一覧表示
rbenv gemset list
こんな感じで表示される。Rubyのバージョンが異なれば同名のgemsetも作成できる。
ただし、中身は別物。
$ rbenv gemset list
2.3.8:
test1
2.6.3:
test1
カレントディレクトリで有効なgemsetの確認
rbenv gemset active
ついでにRubyのバージョンも確認
rbenv version
例えば、こんな感じ。
$ rbenv gemset active
env1 global
$ rbenv version
2.6.3 (set by /*******/.ruby-version)
gemsetの指定を無効にするには.rbenv-gemsets ファイルを削除する
コマンドで指定を無効にできないので、指定ファイルを手動で削除する。
rm .rbenv-gemsets
使用するgemsetを変更したい場合、すでにgemset設定済みのディレクトリでは再設定できない。
一旦gemsetの指定を無効にしてから、再度 rbenv gemset init ~
する必要がある。
その他
gem関連の設定を確認
gem関連の設定(GEM_PATHSなど)を確認したいときは以下を実行。
gem env
helpの表示
rbenv 全体のヘルプ(コマンドの確認など)
rbenv help
各コマンドのヘルプ(パラメータやオプションの確認など)
rbenv help 《コマンド》
メモ
rehashについて
設定を変えたりした場合は以下を実行する必要があるが、rbenv-gem-rehashをインストールしてあれば必要なタイミングで自動で行われるので不要。
rbenv rehash