rbenv
ユーザごと、および、アプリケーションごとにrubyのバージョンを切り替えられる Linux, OS X 用アプリケーションを紹介します。
rbenv とは
ユーザごと、および、アプリケーションごとにrubyのバージョンを切り替えられるアプリケーションです。
Linuxの多くのディストリビューションやOS Xには、はじめからrubyが含まれています。 しかし、それらは最新のバージョンではなかったり、好みの実装系ではなかったりします。 また、ユーザごとに使用したいバージョンが異なることもあります。
また、Webアプリケーション開発したり運用していると、使用しているフレームワーク毎に要求する ruby のバージョンが異なることがあります。そのためアプリケーションごとに ruby のバージョンを切り替えたくなります。
rbenvはそれらの要求に答えてくれます。
ユーザごとに異なるバージョン、異なる実装系のrubyを使用することもできますし、同じユーザでもアプリケーションごとに(ディレクトリごとに)バージョンを変えることもできます。
たとえば、Ruby on Rails製のアプリケーションを複数使用している場合、このアプリケーションはruby 1.8、あのアプリケーションはruby 2.0、お試し版はJRuby 1.7.0、ということが実現できます。
インストール
任意のバージョンのrubyを使用するためには、まず rbenv
をインストールし、それを使って ruby
をインストールします。
rbenv のインストール
大きく2つの方法があります。
- パッケージをインストール
- githubからclone
Linuxのディストリビューションはそれぞれのパッケージマネージャを持っています。Debian系ならapt、RedHat系ならrpmやyum。これらのパッケージマネージャ経由でインストールできると簡単です。
もうひとつはgithubからコードをcloneすることです。gitを使えることが条件ですが、常に最新を使用することができるメリットがあります。
ここではgithubからUbuntu 15.04へインストールする手順を記載します。 以下を適当なファイルに保存して実行するとインストールできます。
#!/bin/bash # 必要なパッケージをインストール sudo apt-get install git build-essential libssl-dev libffi-dev # rbenvの最新版をgithubからclone cd ~/ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv # .bashrcに設定を追加 echo '## for rbenv' >> ~/.bashrc echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc echo 'eval "$(rbenv init -)"' >> ~/.bashrc # .bashrcを読み込み source ~/.bashrc # ruby-buildの最新版をgithubからclone git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build ~/.rbenv/plugins/ruby-build/install.sh # rbenv-gem-rehashの最新版をgithubからclone git clone https://github.com/sstephenson/rbenv-gem-rehash.git ~/.rbenv/plugins/rbenv-gem-rehash
なにやら ruby-build
と rbenv-gem-rehash
もcloneしています。これは何でしょう。
ruby-build
はその名の通り、rubyをbuildするプログラムです。
rbenvでrubyをインストールすると、rubyのソースファイルをとってきてビルドします。その時に使用するものです。
rbenv-gem-rehash
はrbenvを自動的にrehashする gem*1 です。
rbenvは新しいrubyをインストールした場合などに、rbenv自体の情報を更新する目的で $ rbenv rehash
する必要があります。
この作業は必須なのですが、たまに使うとrehashし忘れることがあります。
その場合、rbenvは正常に動作せず、悩みまくることがあります。
その点 rbenv-gem-rehash
を入れておくと、必要なときに自動的にrehashしてくれます。
これはぜひともインストールしておきましょう。
シェルで以下のように表示されると、インストールは成功しています。
$ rbenv --version rbenv 0.4.0-148-g5b9e4f0
$ ~/.rbenv/plugins/ruby-build/bin/ruby-build --version ruby-build 20150519-1-ga5d0479
ruby をインストール
インストール可能なバージョンの確認
インストール可能なバージョンは、シェルで以下を実行することで確認できます。
$ rbenv install -list Available versions: 1.8.6-p383 1.8.6-p420 (略) 2.2.2 2.3.0-dev jruby-1.5.6 jruby-1.6.3 (略) jruby-9.0.0.0.pre1 jruby-9.0.0.0.pre2 maglev-1.0.0 maglev-1.1.0-dev maglev-2.0.0-dev mruby-dev mruby-1.0.0 mruby-1.1.0 rbx-1.2.4 rbx-2.0.0-dev rbx-2.0.0-rc1 (略) rbx-2.5.4 rbx-2.5.5 ree-1.8.6-2009.06 ree-1.8.7-2009.09 (略)
単純にバージョン番号だけ記載されたものがMRIやYARV、それ以外にもJRuby、MagLevなどがインストール可能なことがわかります*2。
バージョンを指定してインストール
rbenvでは自分の使用したいバージョンのrubyをいくつでも同時にインストールできます。 今回は 2.0.0-p645 と 2.2.2 をインストールしてみます。
シェルで以下を実行してください。
$ rbenv install 2.0.0-p645 $ rbenv install 2.2.2
しばらく時間がかかります*3。 rbenvはrubyのソースコードをダウンロードしてきて、ruby-buildによりビルドしているためです。
インストールが完了したら以下を実行してください。
$ rbenv versions 2.0.0-p645 2.2.2
このようにインストールしたバージョンが表示されば成功です。
使用するバージョンの設定
さて、rubyのインストールに成功しましたが、それだけでは使えません。 どのバージョンを使用するのかを指定する必要があります。 複数のバージョンを同時にインストールして、必要に応じて切り替えて使うためです。
そして、使用するバージョンの指定は global
、local
そして shell
の3種類があります。
global
どのアプリケーション(どのディレクトリ)でも使用するバージョンを指定するときに使います。
2.2.2 を使用する場合、シェルで以下を実行してください。
$ rbenv global 2.2.2
これでOKです。確認してみましょう。
$ rbenv global 2.2.2
globalとして2.2.2が設定されていることが分かります。 ruby コマンドを実行してみましょう。
$ ruby -v ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]
無事に 2.2.2 が使われてますね。
local
特定のアプリケーション(特定のディレクトリ)で使用するバージョンを指定するときに使います。
指定の方法は以下のとおりです。
$ rbenv local 2.0.0-p645
ためしに、~/app1/ 以下で 2.0.0-p645 を使用するようにしてみます。
$ mkdir ~/app1 $ cd ~/app1/ $ rbenv local rbenv: no local version configured for this directory $ ruby -v ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux] $ rbenv local 2.0.0-p645 $ rbenv lobal 2.0.0-p645 $ ruby -v ruby 2.0.0p645 (2015-04-13 revision 50299) [x86_64-linux]
はじめは ruby 2.2.2p95 が使われていましたが、$ rbenv local 2.0.0-p645
を実行すると ruby 2.2.0p645 が使われているのが分かります。
なお、$ rbenv local x.x.x
を実行したディレクトリには .ruby-version
ファイルが作られます。
$ rbenv lobal 2.0.0-p645 $ ls -a ./ ../ .ruby-version $ cat ./.ruby-version 2.2.0-p645
rbenv はこのファイルを見て、そのディレクトリ以下で使用するrubyのバージョンを決定します。
つまり、Webアプリケーションを開発しており、指定のバージョンのrubyを使って欲しい場合は、アプリケーションのトップディレクトリに .ruby-version
ファイルを置いておくと良いということです。
shell
今現在のシェルで使用するバージョンを指定するときに使います。
指定方法は以下のとおりです。
$ rbenv shell 2.0.0-p645
ちなみに各設定の優先順位は shell > local > global
です。
システムにインストール済みのrubyを使用する
インストール方法を見てわかるとおり*4、rbenvは自分のruby環境だけを変更します。 つまり、同じマシンを複数ユーザで使用している場合、rbenvによるrubyバージョンを切り替えられるのはあなただけです*5。
つまり、rbenvをインストールする前に、既にシステムにrubyがインストールされていた場合でも、それを消したりしてはいけません。
なお、システムにrubyがインストールされている場合でも、rbenvによりインストールしたrubyが優先して使われます。
もし、システムのrubyを使用したい場合は以下のようにします。
$ rbenv global system
$ rbenv local system
$ rbenv shell system
rbenvを最新にたもつ
$ rbenv install --list
で表示される一覧は、ローカルの情報です。
新しい ruby がリリースされても、一覧は自動的には更新されません。
それを更新するには以下を実行します。
$ cd ~/.rbenv $ git pull $ cd ~/.rbenv/plugins/ruby-build $ git pull
あとがき
rbenv すごいです。
rbenv の開発者は Javascript ライブラリ prototype.js
の開発者でもありますし、Ruby on Rails の開発元である 37signals の中の人でもあります。
すごいところにはすごい人が集まるんですね。 その中核にいる Ruby を作ったのが日本人というのは同じ日本人として誇らしいです。