Techioz Blog

使用している Ruby のバージョンを変更する方法

概要

2.5.3 を実行する必要があります。私は brew を使って Ruby のインストールを管理しています (私のマシンでは RVM を動作させることができなかったため)。走るとき

$ruby -v

分かりました

ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18]

ただし、使用して更新しようとすると、

brew upgrade ruby

分かりました

Error: ruby 2.6.1 already installed

実際にインストールした Ruby のバージョンとこれほど一貫性がないのはなぜですか?

解決策

Ruby の複数のバージョンを管理するには、Ruby バージョン マネージャーを使用する必要があります。私は rbenv を使用することを好みます。 Mac にインストールする手順は次のとおりです (何が行われるのか、その理由が詳しく説明されています。ショートカットが必要な場合は、すべてのコマンドを順番に実行してみてください。ただし、手順を最後まで読むことを強くお勧めします)。

実際のインストールに進む前に、次の点に注意してください。

次のコマンドを実行して、rbenv リポジトリのクローンをホーム ディレクトリの .rbenv ディレクトリに作成します。

$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv

あなたのシステムはまだ rbenv がどこにあるかを知りません。以下を実行してパスに追加します。

$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile

ディレクトリを変更したときに Ruby を変更できるように rbenv を初期化するには、次のコマンドを実行します。

~/.rbenv/bin/rbenv init

これにより、次のようなことがわかるはずです。

# Load rbenv automatically by appending
# the following to ~/.bash_profile:

eval "$(rbenv init -)"

それで、これを実行します:

echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

この時点で rbenv がインストールされているはずです。コマンドラインで rbenv を実行すると、次のような結果が得られます。

$ rbenv
rbenv 1.1.1-39-g59785f6
Usage: rbenv <command> [<args>]

Some useful rbenv commands are:
   commands    List all available rbenv commands
   local       Set or show the local application-specific Ruby version
   global      Set or show the global Ruby version
   shell       Set or show the shell-specific Ruby version
   rehash      Rehash rbenv shims (run this after installing executables)
   version     Show the current Ruby version and its origin
   versions    List all Ruby versions available to rbenv
   which       Display the full path to an executable
   whence      List all Ruby versions that contain the given executable

See `rbenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/rbenv/rbenv#readme

注: rbenv がインストールされていないという警告が表示された場合は、source ~/.bash_profile を実行してください。これにより、~/.bash_profile スクリプトが再実行され、パスに rbenv が取得されます。その後は問題なく rbenv を実行できるはずです。

rbenv には Ruby をインストールまたはアンインストールするオプションがまだ提供されていないことに注意してください。このためには、ruby-build をインストールする必要があります。

rbenv install と入力して Ruby をインストールできるように、ruby-build パッケージを rbenv プラグインとして追加する必要があります。必要なのは、plugins ディレクトリを作成し、plugins ディレクトリにある Ruby-build の git リポジトリをチェックアウトすることだけです。以下を実行します。

$ mkdir -p "$(rbenv root)"/plugins
$ git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build

ターミナル上で引数を指定せずに rbenv を実行すると、使用可能なインストール コマンドとアンインストール コマンドが表示されるようになります。このようなもの:

$ rbenv
rbenv 1.1.1-39-g59785f6
Usage: rbenv <command> [<args>]

Some useful rbenv commands are:
   commands    List all available rbenv commands
   local       Set or show the local application-specific Ruby version
   global      Set or show the global Ruby version
   shell       Set or show the shell-specific Ruby version
   install     Install a Ruby version using ruby-build
   uninstall   Uninstall a specific Ruby version
   rehash      Rehash rbenv shims (run this after installing executables)
   version     Show the current Ruby version and its origin
   versions    List all Ruby versions available to rbenv
   which       Display the full path to an executable
   whence      List all Ruby versions that contain the given executable

See `rbenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/rbenv/rbenv#readme

この出力が表示されれば、rbenv は正しくインストールされています。

Ruby 2.5.3 をインストールするには、次のコマンドを実行します (まだ実行しないでください)。

rbenv install 2.5.3

数行出力され、少し時間がかかり、バージョン 2.5.3 がインストールされたことが表示されます。ただし、問題があります。インストールが失敗すると、特にコンパイル中に、場合によっては端末がスタックし、端末に出力が表示されなくなります。長い間 (永久に) インストールされているように見えます。何が起こっているかに関する詳細情報を取得するには、次のコマンドを実行します。

rbenv install -f -v 2.5.3

-f 引数は、rbenv に指定されたバージョンを強制インストールするように指示します。したがって、すでにインストールされている場合、rbenv は指定されたバージョンを再インストール (基本的に上書き) します。したがって、インストールが失敗した場合は、-f を指定するとインストールが確実に行われます。

-v 引数は、rbenv に詳細メッセージを出力するように指示します。したがって、ruby-build が行うすべての処理 (コンパイル プロセスを含む) が表示されます。ここでコンパイルという言葉を恐れないでください。通常は問題なくコンパイルが完了し、成功しても失敗してもシステムの Ruby (Linux では sudo apt install Ruby でインストールされるもの、または macOS ではデフォルトで取得されるもの) は変更されません。

インストールが成功したら、以下のコマンドを実行して、どのバージョンがインストールされているかを確認できます (出力は以下のスニペットに含まれています)。

$ rbenv versions
  system
* 2.5.3 (set by /home/ubuntu/.rbenv/version)

注: Mac では、新しくインストールされた Ruby のパスは異なります。

先頭に * が付いているものは現在アクティブなものです。どの Ruby を実行すると、Ruby のシムが入ったパスが得られるはずです。興味がある場合は、rbenv のドキュメントを読んで shim について知りましょう。ただし、それについて心配する必要はありません。

$ which ruby 
/home/ubuntu/.rbenv/shims/ruby

rbenv は素晴らしいものですが、rbenv シェル 2.5.3 と rbenv シェル 2.4.5 を毎回書き続けるのは問題です。代わりにすべきことは、ディレクトリに Ruby のバージョンを設定し、rbenv のことは忘れることです。

このディレクトリ (およびサブディレクトリ) 内のすべての Ruby スクリプトに使用する Ruby のバージョン番号を 1 行含む .ruby-version という名前のファイルを作成するだけです。 cd で必要なディレクトリに移動し、次を実行するだけです。

echo "2.5.3" > .ruby-version

そのディレクトリおよびサブディレクトリ内のすべての Ruby スクリプトはバージョン 2.5.3 を使用します。