複数のバージョン管理も楽々!rbenvを利用したruby管理方法チュートリアル

Ruby

こんにちは。Enjoy IT Life管理人の仁科(@nishina555)です。

みなさんはRubyで開発をするにあたりrubyのバージョンはどのように管理していますでしょうか?

  • 複数のRailsアプリを同時進行で開発しているけど、利用するrubyのバージョンが違うからバージョン管理を楽にしたい!
  • rubyのバージョンのアップデートってどうやるのが簡単なの?
  • gem installを実行しようと思ったら権限エラーが発生したんだけど、rubyの権限周りについてイマイチ理解できていない

↑こんなときはrbenvでrubyを管理することをオススメします。

今回はrbenvの導入方法と、rbenvを利用したrubyのバージョン管理の方法について紹介したいと思います。

rbenvとは?導入のメリットは?

rbenvとはバージョンの異なるrubyをまとめて管理するツールです。

rbenvを利用することで異なるバージョンのrubyを一元管理することができるようになり、rubyのバージョンの切り替えが簡単にできるようになります。

例えば、ローカル開発環境で複数のRailsアプリを開発していたとします。
そして、『アプリAのrubyのバージョンは2.5.0、アプリBのrubyのバージョンは2.6.0』というように、Railsアプリごとに異なるrubyのバージョンを利用したいとします。

図で表現すると以下のような感じです。(rbenvのコマンドの意味については後述します)

rbenvを利用することで上記のような開発環境を簡単に用意することができます。

rbenvでrubyを管理する方法

ここからはrbenvを導入し、実際にrbenvを利用してrubyを管理する手順について説明をします。
なお、開発環境はmacOSを利用しています。

rbenvのインストール

まずrbenv、ruby-buildをbrewでインストールします。

$ brew update
$ brew install rbenv ruby-build

インストールが完了したらrbenvで管理されているrubyを確認してみましょう。

rbenvで管理されているrubyのバージョンの一覧はrbenv versionsで確認できます。
下記のように結果が表示されればrbenvのインストールはOKです。

$ rbenv versions

* system (set by /Users/toshiharu.nishina/.rbenv/version)

補足: rbenvに書いてある『system(システム)』のrubyとは?

rbenvでは『system(システム)』と表示されたrubyのバージョンがあります。
『system(システム)』はホストOSにインストールされたruby(以下、システムのruby)を指します。

システムのrubyがインストールされているパス、およびgemのインストール先は一般ユーザーのディレクトリ配下にはありません。

実行されるrubyのパスやgemのインストール先などの詳細は『gem environment』で確認することができます。

そのため、一般ユーザーでシステムのrubyを利用している場合、例えばgem installを行うと以下のように権限エラーが発生します。

$ gem install ransack

Fetching: concurrent-ruby-1.1.5.gem (100%)
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory.

ですので、もし『gemのインストールで “You don’t have write permissions” というエラーが発生する』という状況に直面した場合は、一般ユーザーでシステムのrubyを利用していないか確認してみるとよいでしょう。

一般ユーザーでシステムのrubyを利用してgemのインストールをしたい場合は『sodo gem install』のようにsudoをつけて実行する必要があります。

rbenvでrubyをインストールする

インストールできるrubyのバージョンの一覧はrbenv install -lで確認ができます。

$ rbenv install -l

Available versions:
  1.8.5-p52
  1.8.5-p113
  1.8.5-p114
  ...
  (中略)
  ...
  truffleruby-1.0.0-rc9

ここでは試しに2.5.3をインストールしてみます。

$ rbenv install 2.5.3

インストールが完了すると、先ほどインストールした2.5.3というバージョンがrbenvに追加されていることがわかります。

$ rbenv versions

* system (set by /Users/toshiharu.nishina/.rbenv/version)
  2.5.3

補足: rbenvでインストールできるrubyのバージョン一覧を更新する方法

最新のrubyのバージョンをインストールしたい場合、『rbenv install -l』の一覧に対象のバージョンがリストアップされていないことがあります。

rbenvでインストールするrubyはruby-buildによって提供されています。
ですので、ruby-buildを更新することでrbenvでインストールできるrubyのバージョンの一覧を更新できます。

ruby-buildのアップグレードは以下のようにします。

$ brew update
$ brew upgrade ruby-build

なお、ruby-buildのバージョンは以下のコマンドで確認できます。

$ ruby-build --version

ruby-build 20190423

rbenvで利用するrubyのバージョン切り替える

rbenvで利用するrubyのバージョン切り替えにはrbenv globalを利用します。

例えば先ほどインストールした2.5.3に切り替える場合は以下のようにします。

$ rbenv global 2.5.3

rbenv versionsを再度実行すると、正しくrubyのバージョンが切り替えられたことがわかります。

$ rbenv versions

  system
* 2.5.3 (set by /Users/toshiharu.nishina/.rbenv/version)

なお、rubyのバージョンを切り替える方法にはrbenv globalの他にrbenv localという方法もあります。

globalはデフォルトで利用するrubyのバージョンを変更するのに対し、localはコマンドを実行したディレクトリ配下で利用するrubyのバージョンを変更します。

開発環境において『Railsアプリごとに異なるバージョンのrubyを利用したい』という場合は、各ディレクトリで『rbenv local』を実行し、rubyのバージョンを指定するとよいでしょう。

なお、次の項目『rbenvのセットアップを自動で行うようにする』で紹介をしている『rbenvのセットアップ』を完了させないと、rbenvで指定したrubyが使われません。

rbenvのrubyを利用するためにはrbenvのセットアップもきちんと行うようにしましょう。

rbenvのセットアップを自動で行うようにする

rbenvのセットアップはrbenv initで行います。

コマンドを実行すると以下のようなガイドが表示されます。

$ rbenv init

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

eval "$(rbenv init -)"

ガイドに従い、シェルの設定ファイル(.bashrcや.zshrc)にeval "$(rbenv init -)"を追加します。
これでシェルが起動されるタイミングでrbenvのセットアップが自動で行われるようになります。

追加後、rbenvのセットアップが正しく読み込まれているか確認してみましょう。
まずはシェルの再起動もしくは以下のようにsourceコマンドでシェルの設定を読み込み直します。

$ source ~/.zshrc

rbenvのrubyが使われているかrubyのバージョンを確認してみましょう。
which rubyでrbenv配下のrubyが参照されていれば設定はOKです。

$ which ruby

/Users/toshiharu.nishina/.rbenv/shims/ruby

rbenv versionruby -vで表示されるrubyのバージョンも一致していることがわかります。

$ rbenv version

2.5.3 (set by /Users/toshiharu.nishina/git/rails-app/.ruby-version)

$ ruby -v

ruby 2.5.3p105 (2018-10-18 revision 65156) [x86_64-darwin18]

rbenvコマンドまとめ

rbenvには様々コマンドが用意されています。

今回紹介したコマンドおよび、よく使われるコマンドをまとめると以下のようになります。

コマンド 用途
rbenv -v rbenv自身のバージョンを表示
rbenv install -l rbenvでインストールできるrubyの一覧を表示
rbenv install [rubyのバージョン] rubyのインストール
rbenv global [rubyのバージョン] グローバルで使用するrubyのバージョンを変更
rbenv local [rubyのバージョン] ローカルで使用するrubyのバージョンを変更
rbenv versions rbenvで管理されているrubyのバージョン一覧を表示
rbenv version rbenvで現在参照しているrubyのバージョンを表示

なお、rbenv commandsでrbenvのコマンドの一覧が確認できます。
今回はrbenvのコマンドを全てを紹介しているわけではないので、詳細はrbenv commandsでご確認ください。

まとめ: rbenvを利用すればrubyのバージョン管理が簡単になる

以上でrubyのバージョンをrbenvで管理する方法についての紹介を終わります。

今回のまとめ
  • rbenvを利用すると複数のrubyのバージョンを一元管理できる
  • 『rbenv install [バージョン]』でrubyをインストールする
  • 『rbenv versions』でrbenvで管理されているrubyの一覧および現在利用しているバージョンが確認できる
  • 複数のrubyのバージョンを開発環境で利用したい場合は『rbenv local』で適宜バージョンを設定する

この記事がいいなと思いましたらツイッター(@nishina555)のフォローもよろしくお願いします!