RVM

提供: ArchWiki
移動先: 案内検索

関連記事

RVM (Ruby Version Manager) はインタプリタから gem のセットまで複数の Ruby 環境を簡単にインストール・管理・操作できるコマンドラインツールです。

同じように使えるアプリケーションも存在します: rbenv

RVM のインストール

インストール方法はとても簡単で、Arch Linux 以外のディストリビューションでも大体同じです。2つの選択肢があります。システム全体でインストールするか、ユーザー個別でインストールするかです。本番サーバーや、マシンにユーザーが一人しかいない場合、前者を選びます。root 権限が必要になります。(開発用マシンなど) マシン上にユーザーが複数存在する場合は後者が推奨されます。どちらを選べばいいのかわからないときは、シングルユーザーインストールを選んで下さい。

RVM のインストールについては上流の指示通りにすれば問題ありません。複数の ruby を動作させるために、Arch Linux にインストールする必要があるパッケージをインストールスクリプトが教えてくれます。主に ruby をコンパイルするのに必要な gcc などです。

gem による RVM のインストールは推奨されていません。この記事では 推奨文献 を元に Arch Linux で動作させるための多少の修正を加えています。

要件

インストールを始める前に、gitcurlインストールしてください。

シングルユーザーインストール

ノート: こちらの方法ではホームディレクトリ (~/.rvm) にインストールするので、(/usr にある) Arch の標準の ruby パッケージは操作しません。

大抵の場合、ユーザーのホームディレクトリに独立した RVM をインストールする、シングルユーザーインストールが推奨されます。

RVM のドキュメントで推奨されているスクリプトを使ってインストールしてください。RVM をインストールするユーザー (開発に使っている通常ユーザー) でスクリプトを実行します。

スクリプトを実行する前に、チェックを行なって下さい:

$ curl -L get.rvm.io > rvm-install

ファイルを確認したら、次のコマンドで実行します:

$ bash < ./rvm-install

スクリプトの実行が完了したら、以下の行を ~/.bash_login または ~/.bashrc (あるいは ~/.zprofile など) の末尾に追加してください:

$ [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

それから、現在のシェルまたはターミナルセッションを閉じて、新しいシェルを開いて下さい。以下のコマンドで ~/.bash_login をリロードすることができますが、基本的にはシェルやターミナルを一度閉じてから新しいシェルを開くことが推奨されています:

$ source ~/.bash_login

マルチユーザーインストール

ノート: こちらの方法では /usr/local/rvm にインストールするので、(/usr にある) Arch の標準の ruby パッケージは操作しません。

システム全体でのインストールもシングルユーザーインストールと手順はあまり変わりません。ただし、インストールスクリプトは sudo で実行します。root で直接インストーラを実行してはいけません。以下を実行してください (特定のバージョンをインストールするときは stable--version 1.13.0 などに置き換えて下さい):

$ curl -L get.rvm.io | sudo bash -s stable

スクリプトの実行が完了したら、ユーザーを 'rvm' グループに追加してください (インストーラは rvm グループへのユーザーの追加までは自動で行いません。管理者が行う必要があります)。追加するユーザーごとに、以下を実行:

# usermod -a -G rvm <user>

グループの追加が反映されるのはログイン時だけです。一度ユーザーをログアウトしてから、再度ログインしてください。

ノート: [ [ -s $HOME/.rvm/scripts/rvm ] ] && source $HOME/.rvm/scripts/rvm$HOME/usr/local に置き換えて下さい。

(シングルユーザーインストールと違って) RVM はシステム上の全てのユーザーで自動的に設定されます。ログイン時に /etc/profile.d/rvm.sh をロードすることで設定されます。Arch Linux はデフォルトで /etc/profile から /etc/profile.d/ ディレクトリにある全てのファイルをロードするようになっています。

マルチユーザー rvm で gem をインストールする前に、/etc/gemrcgem: --user-install という行がないことを確認してください。存在する場合は、コメントアウトしてください。そうしないと gem が間違った場所へインストールされてしまいます。

sudo コマンドを使用するのはインストールのときだけです。マルチユーザー設定では、sudo が必要な操作をするときは rvmsudo コマンドを使うことになっています。コアインストールが完了した後に、rvmsudo コマンドを使う必要があることは非常に稀で、せいぜい RVM 自体のアップデートのときくらいです。インストール後に sudo を使う機会はありません。以下のコマンドで RVM をアップデートするときだけ rvmsudo が必要になります:

$ rvmsudo rvm get head

sudo によって RVM が破壊されないように、/etc/sudoers ファイルに以下の設定を追加してもよいでしょう。次のコマンドを実行してください: #su -c visudo

## Cmnd alias specification
Cmnd_Alias RVM = /usr/local/rvm/rubies/<ruby_interpreter>/bin/gem, \
                 /usr/local/rvm/rubies/<another_ruby_interpreter>/bin/gem, \
                 /usr/local/rvm/bin/rvm

## User privilege specification
root ALL=(ALL) ALL

## Uncomment to allow members of group wheel to execute any command
%wheel ALL=(ALL) ALL, !RVM

<ruby_interpreter> は ruby-1.9.2-p290 などに置き換えて下さい。

インストールの後

インストール後、以下のコマンドで問題がないか確認します:

$ type rvm | head -n1

以下のように応答するはずです:

rvm is a function

rvm: not found と返ってくる場合、~/.bash_login (上の設定を追加したファイル) を読み込んで下さい:

$ . ~/.bash_login

rvm が機能するかどうか確認:

$ rvm notes

最後に、必要なパッケージがあるかどうか確認してください (出力された指示に従って下さい):

$ rvm requirements

RVM をアップグレードしたときは、rvm notesrvm requirements を毎回実行するようにしてください。主要な変更があった場合や、必要なパッケージが増えた時にそれを知ることができます。

追加設定

~/.bashrc ファイルに以下の行を追加することで便利な機能が得られます:

# Display the current RVM ruby selection
PS1="\$(/usr/local/rvm/bin/rvm-prompt) $PS1"

# RVM bash completion
[[ -r /usr/local/rvm/scripts/completion ]] && . /usr/local/rvm/scripts/completion

もしくはシングルユーザーで使っている場合:

# RVM bash completion
[[ -r "$HOME/.rvm/scripts/completion" ]] && source "$HOME/.rvm/scripts/completion"

RVM を使う

RVM のドキュメントはとてもわかりやすくなっていますが、以下では RVM の使用例を少しだけお見せします。

Ruby

環境のインストール

インストールできる Ruby 環境を確認するには、次を実行:

$ rvm list known

環境をインストールするには、次を実行:

$ rvm install <ruby_version>

例えば、Ruby 1.9.2 をインストールするには以下のコマンドを実行:

$ rvm install 1.9.2

RVM をインストールした場所に Ruby 1.9.2 がダウンロード・設定・インストールされます。シングルユーザーインストールをした場合、~/.rvm/rubies/1.9.2 になります。

次を実行することでデフォルトの ruby インタプリタを定義できます:

$ rvm use <ruby_version> --default

上記を実行しない場合、(pacman で ruby をインストールしていれば) デフォルト環境は /usr のシステムの ruby になります。

環境の切り替え

別の環境に切り替えるには次を実行:

$ rvm use <ruby_version>

例えば Ruby 1.8.7 に切り替えるには次のコマンドを実行してください (use フラグはなくてもかまいません):

$ rvm 1.8.7

切り替えが完了したというメッセージが表示されます。以下のコマンドで確認できます:

$ ruby --version

切り替えた環境は現在のシェルでしか使われないので注意してください。新しくシェルを開いて、別の環境を選択することで、別々の環境を同時に使うことができます。

上で説明したようにデフォルトのインタプリタを設定した場合、以下のようにしてデフォルトの環境に切り替えられます:

$ rvm default

標準 Ruby

RVM の外にある ruby インタプリタ (Arch Linux のパッケージで /usr にインストールした ruby) を使いたい場合、次のコマンドで切り替えられます:

$ rvm system

環境の確認

インストールした Ruby 環境を確認するには、以下のコマンドを実行:

$ rvm list

複数の ruby をインストールしていた場合、以下のようなリストが表示されます:

rvm Rubies
   jruby-1.5.0 [ [i386-java] ]
=> ruby-1.8.7-p249 [ i386 ]
   ruby-1.9.2-head [ i386 ]
System Ruby
   system [ i386 ]

現在有効になっている環境は矢印で示されます。上記の場合、Ruby 1.8.7 です。次を実行することでも確認できます:

$ ruby --version
ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-linux]

Gemset

RVM には gemset という素晴らしい機能が存在します。個別の ruby ごとに様々な gem のセットを保存することが可能です。ruby, gem, irb をシステムから完全に独立させることができます。

作成

Gemset はまず作成する必要があります。現在の ruby で新しい gemset を作成するには、以下を実行:

$ rvm use <ruby_version>
$ rvm gemset create <gemset_name>

もしくは、rvm use の省略構文を使いたい場合、以下のように --create オプションを利用:

$ rvm use <ruby_version>@<gemset_name> --create

特定の ruby インタプリタでデフォルトの gemset を指定したい場合:

$ rvm use <ruby_version>@<gemset_name> --default

使用

RVM のインストールの前にシステムに存在する gem を削除:

$ gem list --local | awk '{print "gem uninstall " $1}' | bash

残っている gem を確認:

$ gem list --local

gemset を使うには:

$ rvm gemset use <gemset_name>

ruby セレクタ文字列の後ろに @<gemset_name> を追加することで ruby を使うときに gemset を切り替えられます:

$ rvm use <ruby_version>@<gemset_name>
ノート

ruby 環境をインストールするとき、defaultglobal という名前の gemset が初めから備わっています。大抵の場合、後者にはプリインストールされた一般的な gem があり、前者は常に最初は空です。

gemset を全く使用しない場合、gem は default セットに入ります。特定の gemset (例: @testing) を使用した場合、ruby の @global から gem が継承されます。global gemset を使うことで全ての gemset で gem を共有できます。

Gem

gemset の中では、通常の RubyGem コマンドが利用できます。

gem を追加:

$ gem install <gem>

gem を削除:

$ gem uninstall <gem>

インストールした gem を確認:

$ gem list

サーバーにデプロイする場合など rdoc と ri のインストールで時間を消費したくない場合、gem の install と update で無効化することができます。~/.gemrc または /etc/gemrc に以下の2行を追加してください:

install: --no-document
update: --no-document

確認

現在の gemset の名前を確認するには:

$ rvm gemset name

現在の ruby インタプリタの全ての名前の gemset を確認するには:

$ rvm gemset list

全てのインタプリタの全ての名前の gemset を確認するには:

$ rvm gemset list_all

削除

以下のコマンドは現在の gemset を削除します:

$ rvm gemset use <gemset_name>
$ rvm gemset delete <gemset_name>

デフォルトでは、rvm は現在選択されている Ruby インタプリタから gemset を削除します。別のインタプリタから gemset を削除するには、例えば 1.9.2 なら以下のようなコマンドを実行してください:

$ rvm 1.9.2 do gemset delete <gemset_name>

消去

以下のコマンドは gemset にインストールされている全ての gem を削除します:

$ rvm gemset use <gemset_name>
$ rvm gemset empty <gemset_name>

RVM

アップデート

最新のリリースバージョンにアップグレードするには:

$ rvm get latest

(最もバグフィックスがされている) リポジトリの最新のソースバージョンにアップグレード:

$ rvm get head

マルチユーザー設定のときは rvmsudo を使って下さい。アップデートは頻繁に。

アンインストール

RVM を消去するには次を実行:

$ rvm implode

参考資料

上記は RVM を使って ruby のバージョンを切り替えたり様々な環境で様々な gem のセットを管理するイントロダクションにすぎません。RVM で行えることは他にもたくさんあります。情報が仔細に載っている RVM のドキュメントを読んでください。こちらのページ から読み始めると良いでしょう。

トラブルシューティング

残念ながら、一部の ruby のパッチレベルは Arch Linux で上手く動作せず、多くの場合 RVM はインストールするときに最新のパッチレベルのバージョンを選択しません。手動で ruby のウェブサイト をチェックして、RVM でインストールする必要があります。

"data definition has no type or storage class"

このエラーは 1.8.7 でのみ起こります。以下のようにコンパイルすることで問題は解決します:

$ cd src/ruby-1.8.7-p334/ext/dl
$ rm callback.func
$ touch callback.func
$ ruby mkcallback.rb >> callback.func
$ rm cbtable.func
$ touch cbtable.func
$ ruby mkcbtable.rb >> cbtable.func

当然、ビルドパスは ~/.rvm/src/ など実際のパスに置き換えてください。

Ruby 1.8.x が RVM でコンパイルできない

これは Arch Linux の既知の問題で、openssl の問題が原因です。Arch は openssl 1.0 を使用していますが、1.8.7 の低いパッチレベルでは 0.9 が使われます。

(p352 など) 特定のパッチレベルはビルドできませんが、p299 は問題なくビルドすることができ以下のコマンドでインストールできます:

$ rvm remove 1.8.7
$ rvm install 1.8.7-p299

また RVM で openssl をローカルにインストールする方法もあります:

$ rvm pkg install openssl
$ rvm remove 1.8.7
$ rvm install 1.8.7 -C --with-openssl-dir=$HOME/.rvm/usr

1.8.7 にパッチをあてる必要があります:

$ wget https://gist.githubusercontent.com/waseem/0e8607e443bcd0b3e60cfad56cd9999b/raw/2083ae1cc7643174bb291fce8c25b1b643d91af7/ssl.patch
$ rvm remove 1.8.7
$ rvm install --patch ./ssl.patch ruby-1.8.7-p352

Ruby 1.9.1 が RVM でコンパイルできない

1.8.x と同じように、パッチレベルが低いと OpenSSL 1.0 と適合しません。上記と全く同じ方法、RVM で openssl をローカルにインストールする方法が使えます:

$ rvm pkg install openssl
$ rvm remove 1.9.1
$ rvm install 1.9.1 -C --with-openssl-dir=$HOME/.rvm/usr

パッチレベル p378 以上では $GEM_HOME が設定されている場合に gem のパスに問題が起こります。これは既知の問題で、1.9.2 で修正されました (http://redmine.ruby-lang.org/issues/3584)。1.9.1 がどうしても必要なときは p378 を使ってください:

$ rvm install 1.9.1-p378 -C --with-openssl-dir=$HOME/.rvm/usr

Ruby 2.2.2 が RVM でコンパイルできない

1.8.x や 1.9.1 と同じように、パッチレベルが低い場合は OpenSSL 1.0 と適合しません。RVM でローカルに openssl をインストールする方法で解決できます:

$ rvm pkg install openssl
$ rvm remove 2.2.2
$ rvm install 2.2.2 -C --with-openssl-dir=$HOME/.rvm/usr

Ruby 2.3.1 が RVM でコンパイルできない

1.8.x, 1.9.1, 2.2.2 と同じくパッチレベルが低いと OpenSSL 1.0 と適合しません。上記と同じように RVM でローカルに openssl をインストールします:

$ rvm pkg install openssl
$ rvm remove 2.3.1
$ rvm install 2.3.1 -C --with-openssl-dir=$HOME/.rvm/usr

RVM の使用する OpenSSL のバージョンが間違っている

2.4 より前のバージョンの Ruby は OpenSSL 1.0 を必要としますが RVM は OpenSSL 1.1 でビルドしようとします。~/.rvm/log/XYZ/make.log ファイルに以下のような行がないか確認してください:

/usr/include/openssl/asn1_mac.h:10:2: error: #error "This file is obsolete; please update your software."

以下のようにして適切なバージョンを指定できます:

$ sudo pacman -S openssl-1.0 # Probably already installed
$ rvm remove <ruby-version>
$ PKG_CONFIG_PATH=/usr/lib/openssl-1.0/pkgconfig:/usr/lib/pkgconfig rvm install <ruby-version>

上記の方法が上手く行かない場合、最後のコマンドを以下のようにしてみてください:

PKG_CONFIG_PATH=/usr/lib/openssl-1.0/pkgconfig \
CFLAGS+=" -I/usr/include/openssl-1.0" \
LDFLAGS+=" -L/usr/lib/openssl-1.0 -lssl" \
rvm install <ruby-version>

もしくは RVM を使って OpenSSL をインストールすることもできます:

$ rvm pkg install openssl
$ rvm remove 2.3.4
$ rvm install 2.3.4 -C --with-openssl-dir=$HOME/.rvm/usr

参照