Rubyパッケージ管理ツール「rbenv」について
はじめに
rbenvとは、プログラミング言語Rubyのバージョン管理ツールです。rbenvを使うことで、Rubyをバージョンごとにインストールしたり、開発環境ごとに使用するRubyのバージョンを切り替えることができます。
※rbenv以外にも、rvmなどのバージョン管理ツールが存在します。Rubyのインストール手段としては、公式のインストーラーを使用する方法や、OSのパッケージマネージャー(Homebrewやdnfなど)を利用する方法もあります。
rbenvは軽量なプログラムであり、シンプルなコマンド操作でRubyの開発環境を柔軟かつ安全に管理できるツールの一つです。
※本記事での実行環境
・macOS Sequoia(Apple M2)
・シェルはzsh
1.rbenvのインストール
rbenvとruby-buildをインストール
ruby-build は Ruby のインストール機能を追加するためのプラグイン
% brew install rbenv ruby-build
rbenvを有効にする為の設定
% echo 'eval "$(rbenv init -)"' >> ~/.zshrc
% source ~/.zshrc
バージョンが表示されればインストールOK
% rbenv -v
rbenv 1.3.2
(補足)「echo 'eval "$(rbenv init -)"' >> ~/.zshrc」について
"rbenv init"コマンドをシェル上で実行する事で、そのシェルからrbenvを使用したパッケージ管理の操作が可能になります。
.zshrcに追記してあげる事で、zsh起動時に"rbenv init"を自動で実行するようになり、シェル起動時に毎度"rbenv init"を実行せずともrbenvの操作ができるようになります。(シェルがbashの場合は.bash_profileに追記)
2.Rubyのインストール
インストールできるRubyのバージョン一覧の確認
% rbenv install --list
3.2.8
3.3.8
3.4.4
jruby-10.0.0.1
mruby-3.4.0
picoruby-3.0.0
truffleruby-24.2.1
truffleruby+graalvm-24.2.1
今回はRuby3.4.4をインストール
% rbenv install 3.4.4
(補足)jruby,mrubyなどについて
これらは標準的なRubyとは異なる実装で、それぞれ目的毎に使い分ける為に実装されたRubyです。
例えば、jrubyは「java仮想マシン(JVM)上で動作する」、「JavaとRubyのコード間で双方向のアクセスが可能」、「JavaのライブラリをRubyから直接呼び出せる」といった特徴があります。
mrubyは、「軽量でメモリフットプリントが小さい」、「組み込みシステム向け」、「C言語やC++にRubyを簡単に組み込める」などといった特徴が挙げられます。
一般的なRubyをインストールする場合は数字のみのバージョンを指定してあげましょう。
3.バージョン操作
自環境にインストール済みのRubyバージョンが表示
(*マークのバージョンはデフォルトバージョン)
% rbenv versions
system
3.2.2
* 3.3.0 (set by /Users/user/.rbenv/version)
3.4.4
インストール済みのRubyバージョンが表示される
デフォルトバージョンを3.4.4に設定
% rbenv global 3.4.4
新しくインストールしたコマンドをターミナルで使えるようにする
% rbenv rehash
デフォルトバージョンが3.4.4に切り替わる
% rbenv versions
system
3.2.2
3.3.0
* 3.4.4 (set by /Users/user/.rbenv/version)
(補足)rbenv rehashについて
Ruby の実行ファイル(例: ruby, gem, rails など)へのシム(shim)を更新するコマンドです。このコマンドによってrbenvが操作を認識してくれるイメージでしょうか。RubyやGemをインストールしたあとに、このコマンドを実行することで正しく動くようになります。
4.補足:バージョン決定の優先順位
- .ruby-version(カレントディレクトリ or 上位ディレクトリ)
- 環境変数 RBENV_VERSION
- rbenv shell
- rbenv local
- rbenv global
- system
上記はRubyバージョンを決定する優先順位です。
例えば、"~/.ruby-version"にRubyバージョンが記載されていると、rbenv globalコマンドで指定したバージョンよりもそちらが優先されます。もしrbenv globalコマンドでRubyバージョンが切り替わらない場合は優先順位を確認してみるといいかもです。
Discussion