rbenvは、1台のマシンに複数のRubyを共存させ、プロジェクトごとに使う版を固定するバージョン管理ツールです。rubyやgemの呼び出しをshims(シム)という中継スクリプトが受け取り、そのディレクトリで使うべき版へ渡し直す仕組みで動きます。この記事では、shimsの経路と版が決まる優先順位、rbenv 1.3.0で挙動が変わったrbenv init、2026年5月のruby-buildで使えるようになったrbenv install 4.0のような版の省略指定、コマンド一覧、切り替わらないときの対処、RVMやmiseとの違いまでを、rbenv 1.3.2とruby-build 20261023で実行した出力とともに整理します。
まとめ
rbenvは「shimsディレクトリをPATHの先頭に置く」ことだけで成立するツールです。本体の最新版は2025年1月8日公開の1.3.2で、Rubyをビルドするrbenv installとrbenv uninstallは本体ではなくruby-buildプラグインが提供します。使う版はRBENV_VERSION環境変数、.ruby-versionファイル、~/.rbenv/versionの順に探され、先に見つかった指定が勝ちます。
2026年11月時点で新しく入れるなら、通常メンテナンス中のRuby 4.0系(最新4.0.9)か3.4系(最新3.4.12)です。ruby-build v20260501以降はrbenv install 4.0と書けばその系列の最新パッチが入りますが、rbenv localや.ruby-versionには4.0.9のように完全な版を書く必要があります。RVMは安定版の最終リリースが2021年1月15日の1.29.12で止まっており、本記事は新規の環境にはrbenvを勧めます。Rubyだけならrbenv、Node.jsやPythonも同じ設定で揃えたいならmiseが選択肢です。
rbenvの仕組み|shimsがrubyコマンドを横取りする経路
shimsとPATHの関係
rbenvを導入すると~/.rbenv/shimsが作られ、ruby、gem、bundle、rakeなど実行ファイルと同名の小さなスクリプトが並びます。rbenvのREADMEは、このshimsをPATHの先頭に置くことを「rbenvが正しく動くための実質唯一の要件(basically the only requirement)」と書いています。
$ which ruby
/Users/you/.rbenv/shims/ruby
$ rbenv which ruby
/Users/you/.rbenv/versions/4.0.9/bin/ruby
which rubyが返すのは入口のshims、rbenv which rubyが返すのは実際に起動される本体です。shimsが呼ばれると、rbenvはカレントディレクトリから親へ.ruby-versionを探し、決まった版の本体へ処理を渡します。この2つのパスの違いが、後半のトラブル対処の起点になります。
代償もあります。rbenv公式wikiの比較ページは、すべてのRuby呼び出しを一度受けるため約50ミリ秒のオーバーヘッドが加わり得ると認めています(wikiの記載値で、本記事で計測した値ではありません)。通常の開発では気になりませんが、短いスクリプトを大量に起動する処理では効いてきます。
バージョン決定の優先順位
「設定したはずの版にならない」原因の多くは優先順位です。rbenvは次の順に探し、最初に見つかった指定を採用します。
| 優先 | 指定コマンド | 設定先 | 有効範囲 |
|---|---|---|---|
| 1 | rbenv shell |
RBENV_VERSION環境変数 |
その端末セッション |
| 2 | rbenv local |
.ruby-version |
そのディレクトリ以下 |
| 3 | rbenv global |
~/.rbenv/version |
同じRBENV_ROOTの既定 |
.ruby-versionは親方向へさかのぼって探されるため、プロジェクト直下に置けばサブディレクトリでも同じ版が効きます。探索の起点はREADMEの環境変数表にあるRBENV_DIR(既定はカレントディレクトリ)で変えられます。.ruby-versionはBundlerやCIのセットアップ処理も読むので、チームで版を揃える手段としてはこのファイルをリポジトリに入れるのが標準です。
rbenvのインストールと初期設定|1.3.0で変わったrbenv init
macOS・Linuxへの導入
macOSではHomebrewが最短です。Homebrewのrbenvはruby-buildを必須依存に持つため、rbenvだけ指定すればビルド用プラグインも入ります。Homebrewの公開統計では、rbenvのインストール件数(Installs)は直近365日で10万件を超えています(2026年11月5日時点)。
# macOS・Linux(Homebrew)
$ brew install rbenv
$ rbenv init
$ rbenv -v
rbenv 1.3.2
Linuxは配布パッケージに注意が必要です。READMEは、DebianとUbuntuの公式リポジトリにあるrbenvは古い(out of date)と警告し、gitでの導入を勧めています。WSL2のUbuntuも同じ扱いです。Arch、Fedora、openSUSEには公式パッケージがあります。
# git で導入(Debian・Ubuntu・WSL2 など)
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
$ ~/.rbenv/bin/rbenv init
# 端末を開き直してから、以下のプラグイン追加を実行
# rbenv install を使えるようにする(ruby-build をプラグインとして追加)
$ git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
ruby-buildは本体と別の周期で更新され、直近は2026年10月23日公開のv20261023です。新しいRubyがインストール候補に出てこないときは、ほぼruby-buildが古いことが原因です。
rbenv initの書き込み先
古い解説記事といちばん食い違うのがここです。rbenv 1.3.0(2024年7月5日公開)から、rbenv initは手順を表示するだけでなく、シェルの初期化ファイルを実際に書き換えます。以前は表示された行を自分で~/.zshrcなどへ貼る必要があり、それが最も多いつまずきだったとリリースノートでも説明されています。
# シェルを自動判定して初期化ファイルを書き換える
$ rbenv init
writing ~/.zprofile: now configured for rbenv.
# シェルを明示する
$ rbenv init bash
writing ~/.bash_profile: now configured for rbenv.
# eval 用のスクリプトを出力するだけ(ファイルは変更しない)
$ rbenv init -
書き込み先はシェルと既存のdotfileの状態で決まります。rbenv 1.3.2のソース(libexec/rbenv-init)の分岐は次のとおりです。
| シェル | 条件 | 書き込み先 |
|---|---|---|
| zsh | .zshrcにrbenvの記述が既にある |
~/.zshrc |
| zsh | 上記以外 | ~/.zprofile |
| bash | .bashrcがあり.bash_profileが無い |
~/.bashrc |
| bash | 上記以外(新規環境を含む) | ~/.bash_profile |
macOS標準のzshで.zshrcを探しても見つからないのはこのためで、新規環境なら~/.zprofileに入ります。追記されるのは次の2行で、設定済みのシェルに再実行しても何も変わりません。
# Added by `rbenv init` on Mon Sep 7 00:02:00 JST 2026
eval "$(rbenv init - --no-rehash zsh)"
末尾の--no-rehashは、シェル起動のたびにshimsを作り直す処理を止める指定で、1.3.0から既定で付きます。起動を遅くしないための変更です。gemを入れた直後のshims再生成は別の仕組みで自動実行されるので、通常は困りません。手でeval行を書く場合も、この形に揃えてください。
PATHとrbenv-doctorによる初期設定の確認
書き込んだら端末を開き直し、shimsがPATHの先頭に来ているかを見ます。来ていなければ、書いたファイルとシェルが実際に読むファイルが違っています。
$ echo $PATH | tr ':' '\n' | head -2
/Users/you/.rbenv/shims
/usr/local/bin
# rbenv-installer リポジトリの点検スクリプト
$ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-doctor | bash
Checking for `rbenv' in PATH: /Users/you/.rbenv/bin/rbenv
Checking for rbenv shims in PATH: OK
...
rbenv-doctorは、rbenv本体とshimsのPATH、rbenv installが使えるか、入っている版の数、プラグインを順に点検します。インストール手順のどこで止まったか分からないときの最初の一手になります。
Rubyをインストールする|rbenv installと版の選び方
rbenv installの実行手順
rbenv installはruby-buildが追加するコマンドです。-lで各系列の最新パッチだけ、-Lで過去の版やプレビュー版を含む全候補を出します。
# 各系列の最新安定版(ruby-build 20261023 の出力)
$ rbenv install -l
3.3.13
3.4.12
4.0.9
jruby-10.1.2.0
mruby-4.0.0
picoruby-3.4.2
truffleruby-40.0.0
truffleruby+graalvm-40.0.0
# 全候補(703行。4.1.0-preview1 もここに出る)
$ rbenv install -L
# 版を指定してビルド
$ rbenv install 4.0.9
$ rbenv global 4.0.9
-lに並ぶMRI(本家Ruby)は3系列だけで、サポートが終わった3.2以前は出てきません。迷ったらrbenv install -lに出る版から選ぶのが手堅い判断です。rbenv installはソースからのコンパイルなので、失敗した場合はログを確認し、OS側のビルド依存(OpenSSLやlibyamlなど)、ruby-buildの更新状況、ダウンロード失敗、ディスクやメモリの不足を切り分けます。
版の省略指定と、localが完全な版を求める理由
ruby-build v20260501(2026年5月1日)から、インストール時の版は前方一致で指定できるようになりました。それ以前はrbenv install 3.4.9のように完全な版が必要でした。どの版に解決されるかはruby-build --resolveで事前に確かめられます。Gitでプラグインとして導入した場合は、以下のruby-buildを"$(rbenv root)"/plugins/ruby-build/bin/ruby-buildに読み替えてください。
$ rbenv install 4.0 # 4.0系の最新(4.0.9)を入れる
$ rbenv install ruby # 最新の安定版CRuby(4.0.9)を入れる
$ rbenv install # 引数なしは .ruby-version に書かれた版を入れる
$ ruby-build --resolve 3.4
3.4.12
$ ruby-build --resolve 4.1
(何も出ない=プレビュー版は前方一致の対象外)
ただし、前方一致が効くのはインストールだけです。rbenv本体の版選択は完全一致で、rbenv local 4.0はエラーになり、手書きで.ruby-versionに4.0と書くとそのディレクトリではruby自体が動かなくなります。
$ rbenv local 4.0
rbenv: version `4.0' not installed
$ echo "4.0" > .ruby-version
$ ruby -v
rbenv: version `4.0' is not installed (set by /Users/you/myapp/.ruby-version)
許される揺れはruby-4.0.9のようなruby-接頭辞だけです。チーム運用では.ruby-versionに完全な版を書き、各自はrbenv install(引数なし)で同じ版を入れる、という分担にすると版ずれが起きません。プレビュー版の4.1.0-preview1を試すときも、rbenv install 4.1.0-preview1と完全な名前で指定します。
保守状況から決めるバージョン
「最新だから」で版を決めると、数か月後にセキュリティ修正が来ない系列を掴むことがあります。Ruby公式の保守状況(2026年11月5日確認)は次のとおりです。
| 系列 | 最新 | 状態 | EOL |
|---|---|---|---|
| 4.1 | 4.1.0-preview1 | プレビュー | 未定 |
| 4.0 | 4.0.9 | 通常メンテナンス | 未定 |
| 3.4 | 3.4.12 | 通常メンテナンス | 未定 |
| 3.3 | 3.3.13 | セキュリティのみ | 2027-03-31予定 |
| 3.2 | 3.2.11 | EOL | 2026-04-01 |
4.0.9・3.4.12・3.3.13は2026年10月23日に同時公開されたセキュリティ修正版です。新規プロジェクトは4.0系か3.4系から選び、3.3系は移行計画を立てる対象として扱います。3.2をrbenv install 3.2と打つと3.2.11が入りますが、修正はもう出ません。版ごとの変更点はRubyの最新バージョンは4.0.9|正規表現の脆弱性修正・3系との違い・サポート期限(2026年11月)で扱っています。
バージョンを切り替える|global・local・shell
切り替えは3つのコマンドで、書き込む先が違うだけです。
# このユーザーの既定(標準設定では ~/.rbenv/version)
$ rbenv global 4.0.9
# このディレクトリ以下(.ruby-version)
$ cd ~/projects/legacy-app
$ rbenv local 3.4.12
# この端末だけ(RBENV_VERSION)
$ rbenv shell 3.3.13
# 次の確認例では local の指定に戻す
$ rbenv shell --unset
確認は単数形と複数形を使い分けます。rbenv versionは今有効な版と「どこで決まったか」を、rbenv versionsは入っている版の一覧を返し、現在の版に*が付きます。
$ rbenv version
3.4.12 (set by /Users/you/projects/legacy-app/.ruby-version)
$ rbenv versions
system
3.3.13
* 3.4.12 (set by /Users/you/projects/legacy-app/.ruby-version)
4.0.9
systemはrbenvのshimsを除いたPATHで最初に見つかるRubyを指し、OS標準とは限りません。macOSの/usr/bin/rubyはDarwin 25系でもruby 2.6.10p210のままで、2.6系は2022年4月12日にサポートが終わっています。systemを既定にせず、rbenvで入れた版をglobalにしておくのが安全です。
rbenvのコマンド一覧|本体とruby-buildの分担
rbenvのサブコマンドはrbenv commandsで一覧できます。日常的に使うものを、どこが提供しているかとあわせて整理しました。installとuninstallだけがruby-buildの提供で、ruby-buildが無いと「そんなコマンドは無い」と言われます。
| コマンド | 用途 | 提供元 |
|---|---|---|
rbenv install 版 |
Rubyをビルドして入れる | ruby-build |
rbenv uninstall 版 |
入れた版を削除 | ruby-build |
rbenv versions |
入っている版の一覧 | 本体 |
rbenv version |
有効な版と設定元 | 本体 |
rbenv global 版 |
同じRBENV_ROOTの既定 | 本体 |
rbenv local 版 |
ディレクトリの版 | 本体 |
rbenv shell 版 |
端末セッションの版 | 本体 |
rbenv rehash |
shimsを作り直す | 本体 |
rbenv which コマンド |
実体のパス | 本体 |
rbenv whence コマンド |
そのコマンドを持つ版 | 本体 |
rbenv prefix 版 |
版のインストール先 | 本体 |
rbenv root |
rbenvのルート | 本体 |
rbenv init |
シェル設定の書き込み | 本体 |
環境変数では、RBENV_ROOT(既定~/.rbenv)で版とshimsの置き場所を変えられ、RBENV_DEBUG=1またはrbenv --debug サブコマンドで内部の処理を追えます。rbenv local --unsetとrbenv shell --unsetは、それぞれの指定を解除して下位の設定に戻します。
版が切り替わらない・コマンドが見つからないときの対処
Rubyの版が切り替わらない場合の設定元確認
まずwhich rubyがshimsを返すかを見ます。返らなければPATHの問題で、rbenv initの書き込み先を確認してください。shimsは返るのに版が違うなら、rbenv versionの括弧が原因の場所を示します。
$ rbenv version
3.3.13 (set by RBENV_VERSION environment variable)
$ rbenv shell --unset
$ rbenv version
4.0.9 (set by /Users/you/.rbenv/version)
典型は3つです。以前に打ったrbenv shellやexport RBENV_VERSIONが残っていて.ruby-versionより優先されている。親ディレクトリに古い.ruby-versionが残っていて、globalを変えても効かない(設定元の親ディレクトリへ移動してrbenv local --unsetで消すか、プロジェクト直下で正しい版を指定する)。.ruby-versionに4.0のような省略形が書かれていて、前述のとおり「not installed」になっている。括弧内のパスを見れば、どれに当たるかはすぐ分かります。
gemのコマンドが見つからない場合のshimsと導入先の確認
gemを入れたのに実行ファイルが見つからないときは、shimsの作り直しで直ることが多いです。直らなければ、そのgemが別の版にしか入っていない可能性をrbenv whenceで確かめます。
$ rbenv rehash
$ rbenv whence rspec
3.4.12
$ rbenv version
4.0.9 (set by /Users/you/.rbenv/version)
# → rspec は 3.4.12 にしか入っていない。4.0.9 で gem install し直す
もう1つはgem install --user-installで入れた場合です。~/.gemや~/.local/share/gemに入ったgemの実行ファイルをrbenvは検出できず、公式wikiも制約として明記しています。rbenv管理下では--user-installを使わないか、そのbinディレクトリを手でPATHに足します。
rbenvの更新とアンインストール
rbenv本体とruby-buildの更新
rbenvに自己更新コマンドはありません。入れた方法で更新します。
# Homebrew で入れた場合
$ brew upgrade rbenv ruby-build
# git で入れた場合
$ git -C "$(rbenv root)" pull
$ git -C "$(rbenv root)"/plugins/ruby-build pull
本体は2025年1月の1.3.2から据え置かれており、更新の実質はruby-buildです。rbenv install -lに新しいRubyが出ない、rbenv install 4.0が定義の見つからないエラーで止まる、といった症状は、ruby-buildが古い(後者はv20260501より前)ことが原因です。
Rubyの版とrbenv自体のアンインストール
不要になったRubyの版はrbenv uninstallで消せます。-fを付けると確認を省き、存在しない版を指定してもエラーを出しません。
# 版を1つ削除
$ rbenv uninstall 3.3.13
# rbenv ごと削除する場合
# 1. 初期化ファイルから rbenv init の行を消す(~/.zprofile など)
# 2. 入れた Ruby ごとルートを消す
$ rm -rf "$(rbenv root)"
# 3. パッケージで入れた場合
$ brew uninstall rbenv
READMEによると、手順1のrbenv initの行を消すだけでもshimsがPATHから外れ、rubyはOS側のRubyで動くようになります。一時的に無効化したいだけなら、この段階で止めてかまいません。
RVMとは?rbenvとの違いと2026年の選択肢
RVMの仕組みと現況
RVM(Ruby Version Manager)は、rbenvより前からある元祖のRubyバージョン管理ツールです。rbenvがPATHにshimsを差し込むだけなのに対し、RVMはシェル関数としてシェルに読み込まれ、ソースのscripts/cdでcd・pushd・popdを自前の関数に置き換えて、ディレクトリ移動のたびに環境を書き換えます。gemsetという、版ごとにgemの置き場を分ける独自機能も持っています。
判断材料になるのは更新状況です。RVMの安定版リリースは2021年1月15日の1.29.12が最後です。リポジトリはアーカイブされておらず、2026年10月25日にも4.1.0-preview1を追加するコミットがありますが、その変更はmasterにしか入っていません。1.29.12の既知の版リスト(config/known)に載るMRIは3.0.0までで、4.0.9が載っているのはmaster側だけです。
# RVM の導入(安定版)
# 事前に GPG を導入し、公式の署名鍵をインポートする
$ gpg2 --keyserver keyserver.ubuntu.com --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
$ \curl -sSL https://get.rvm.io | bash -s stable
# 更新:stable は 1.29.12 のまま。新しい Ruby の定義はリポジトリ版で取る
$ rvm get stable
$ rvm get head
RVMの公式手順では、安定版への更新とmasterの変更を取り込むhead版への更新を分けて案内しています。ただし、RVMの公式ドキュメントは既知の版リストに無いRubyもインストールできると明記しているため、リストに載っていないことだけで安定版がRuby 4系を入れられないとは言えません。rbenv側のwikiは、RVMについて「Rubyを入れやすい場面がある以外に利点が分からず、勧められない」と書いています。競合ツールの言い分である点を割り引いても、新規のRuby開発環境では、安定版の更新状況を重視し、本記事ではrbenvを推奨します。
rbenv・RVM・miseの比較
今の実務でrbenvの対抗馬になるのは、RVMよりmise(旧rtx)です。miseはRubyに加えてNode.jsやPython、Goなどを1つのmise.tomlで管理でき、2026年11月4日にv2026.11.1が出るなど更新も頻繁です。miseのRubyのページによると、ビルド済みバイナリがあればそれを入れ、無ければruby-buildでコンパイルし、WindowsではRubyInstaller2のビルドを入れます。
| 観点 | rbenv | RVM | mise |
|---|---|---|---|
| 対象言語 | Rubyのみ | Rubyのみ | 多言語 |
| 切り替え方式 | shims | cdを関数で置換 | PATHの書き換え |
| Windows | 非対応(WSLで利用) | 非対応(WSLで利用) | 対応 |
| 最新リリース | 1.3.2(2025-01) | 1.29.12(2021-01) | v2026.11.1(2026-11) |
| Rubyの入手 | ruby-buildでビルド | RVM本体の定義 | ビルド済み優先 |
| gemの分離 | Bundlerに任せる | gemset | Bundlerに任せる |
扱う言語がRubyだけならrbenv、複数言語のランタイムを同じ作法で固定したいならmise、というのが選び分けの基準です。miseの導入はmiseとは?mise.tomlでツール・環境変数・タスクを束ねる導入手順【2026年版】、shim方式が同じPython版はpyenvでPythonのバージョンを切り替える手順|shimの仕組みとビルド失敗の対処にまとめています。Node.jsやJVMでの同種の判断はVolta(ヴォルタ)とは?Node.jsバージョン管理の使い方と保守終了後の不具合・mise移行【2026年】とSDKMAN!の使い方|Javaのインストール・切り替えと.sdkmanrc、Windows・macOSの注意点を参照してください。
rbenvを選ばないほうがよい場面
開発から本番までRubyの実行環境をコンテナに統一するなら、同じアプリ用のRubyをホスト側でrbenv管理する必要は通常ありません。ベースイメージがRubyの版を固定するので、ホストで別の版を管理すると「ローカルでは3.4、本番イメージは4.0」という二重管理が生まれます。rbenvのwiki自身も、コンテナ化した構成ではバージョン管理ツールもRubyのコンパイルも通常は要らないと述べています。開発もDev Containerなどでイメージに寄せるほうが事故は減ります。Rails開発での具体的な構成はruby on rails を vscode で開発する環境構築【2026年版】Ruby LSP・デバッグ・Dev Containerで扱っています。
rbenvとBundlerの守備範囲の違い
RVMやrbenvとBundlerは役割が異なるため、併用できます。rbenvやRVMが決めるのはRuby本体の版、Bundlerが決めるのはそのRubyの上に載るgemの版で、両方を同時に使うのが標準構成です。BundlerのGemfile.lockは依存gemの版を固定し、bundle execなどが実行時の依存関係を制御します。gemの保存先そのものを分けるRVMのgemsetとは仕組みが違います。
$ cat .ruby-version
4.0.9
$ head -3 Gemfile
source "https://rubygems.org"
ruby "4.0.9"
gem "rails", "~> 8.1"
Gemfileのruby行は「このアプリが要求するRubyの版」の宣言で、その版を用意するのはrbenvの仕事です。両者が食い違うとBundlerは実行時にエラーで止まるので、.ruby-versionとGemfileは同じ版に揃えます。gemやBundlerの操作はgemとBundlerの使い方|bundle install・削除・Bundler自身の更新と4系の変更点【4.0.23対応】で詳しく扱っています。
よくある質問
rbenvとは何ですか?
macOSやLinuxでRubyの複数バージョンを共存させ、プロジェクトごとに使う版を切り替えるツールです。shimsという中継スクリプトをPATHの先頭に置き、rubyやgemの呼び出しを受けてから該当する版へ渡します。最新版は2025年1月8日公開の1.3.2です。
rbenvとRVMはどちらを使うべきですか?
新規に環境を作るならrbenvです。RVMの安定版は2021年1月15日の1.29.12が最後で、その版の既知の版リストはRuby 3.0.0までです。Ruby以外の言語も同じ仕組みで管理したいなら、RVMではなくmiseと比べてください。
rbenvで最新のRubyを入れるにはどうすればよいですか?
ruby-buildを更新してからrbenv install -lで最新版を確かめ、rbenv install 4.0.9のように入れます。ruby-build v20260501以降ならrbenv install rubyで最新の安定版、rbenv install 4.0で4.0系の最新が入ります。
rbenv installコマンドが見つからないのはなぜですか?
rbenv installはrbenv本体ではなくruby-buildが提供するコマンドだからです。Homebrewではbrew install rbenvでruby-buildも入りますが、gitで導入した場合は"$(rbenv root)"/plugins/ruby-buildにruby-buildをクローンする必要があります。
rbenv rehashは手動で実行する必要がありますか?
通常は不要です。gemのインストール後にshimsは自動で作り直されます。ただし1.3.0以降のrbenv initには--no-rehashが付くため、シェルを開き直しても再生成はされません。新しく入れたコマンドが見つからないときだけrbenv rehashを実行してください。