こんにちは。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 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を利用していないか確認してみるとよいでしょう。
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 version
とruby -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)のフォローもよろしくお願いします!