Posted at

【Homebrew版】`rbenv install -l`のリストが新しくならない場合の対処

Homebrewで入れたrbenvのrbenv install -lのリストが新しくならないときの対処法です。調べるとbrew upgradeするか、~/.rbemv/pluginsを消すかの対処法が主に出てきますが、今回はどちらでも治りませんでした。

同様の事象で悩める民の参考になれば。


対処方法

結論からいうと、rbenvとruby-buildをアンインストール/インストールしました。

自分の場合はアンインストール/インストールしても、すでに入っているrbenvの設定やrubyのバージョンはそのまま残り、大きな問題は起きませんでした。

# アンインストール

$ brew uninstall rbenv
$ brew uninstall ruby-build

# インストール
$ brew install rbenv ruby-build

ただ、アンインストール時に少し注意が必要だったので、経緯とともに簡単に説明します。


対処の経緯


rbenv istall -lが更新されない

新しいrubyのバージョンをインストールしたくてrbenv istall -lするも、最近のバージョンが出てこない。例のごとく、バージョンリストを更新するコマンドを実行しました。

$ brew update                                                         Already up-to-date.

$ brew upgrade rbenv
Error: rbenv 1.1.1 already installed

$ brew upgrade ruby-build
Error: ruby-build 20181019 already installed

しかし再度rbenv istall -lしても更新する前のバージョンリストと変わらない。何度か更新コマンドを実行しても上記のようにどう見ても更新されている。


ruby-build --definitionsも更新されない


If you opted to install ruby-build via Homebrew, and nothing's wrong with that, you should remove ~/.rbenv/plugins/ruby-build which is where I'm guessing the stale definitions are coming from.

rbenv install --list does not include all versions from ruby-build --definitions · Issue #676 · rbenv/ruby-build


検索してみると~/.rbenv/pluginsディレクトリを削除するという対処があるものの、この対処方法はgit cloneをしてrbenvをインストールしている場合の対処方法らしい。

念の為~/.rbenv/pluginsを確認してみるが、このディレクトリ自体が存在しない。


Do you have the same problem: rbenv install --list not being equal to ruby-build --definitions?

rbenv install --list does not include all versions from ruby-build --definitions · Issue #676 · rbenv/ruby-build


先程のIssueを読み進めてみると、rbenv istall -lruby-build --definitionsは一致するはずらしい。

実行してみると、ruby-build --definitionsもバージョンリストが古いままだった。upgradeはできてるはずなのにバージョンリストが新しくなっていない。何かがおかしい。


決死の覚悟でアンインストール/インストール

もうこれはアンインストール/インストールしかないと思い、決死の覚悟でアンインストールしてみる。何も起きませんように。。

$ brew uninstall rbenv

Uninstalling /usr/local/Cellar/rbenv/1.1.1... (36 files, 62.8KB)
rbenv 0.4.0 is still installed.
Remove all versions with `brew uninstall --force rbenv`.

$ brew uninstall rbenv
Uninstalling /usr/local/Cellar/rbenv/0.4.0... (32 files, 49.7KB)

$ brew uninstall ruby-build
Uninstalling /usr/local/Cellar/ruby-build/20181019... (417 files, 210.8KB)
ruby-build 20150519, 20141128 and 20150818 are still installed.
Remove all versions with `brew uninstall --force ruby-build`.

$ brew uninstall ruby-build
Error: ruby-build has multiple installed versions
Use `brew uninstall --force ruby-build` to remove all versions.

$ brew uninstall --force ruby-build
Uninstalling ruby-build... (469 files, 294.8KB)

実行ログを見てみると、rbenv/ruby-buildどちらも複数バージョンが入ってしまっていたっぽい。おそらくコマンドが古いバージョンを参照してしまっていたっぽい。

rbenvは2回brew uninstall rbenvで問題なく消え去ったが、ruby-buildは2回目のbrew uninstall ruby-buildがエラーになったので、ログに出ていたbrew uninstall --force ruby-buildを実行したらキレイになった。

あとは再度インストールコマンドを実行。

$ brew install rbenv ruby-build

無事インストール完了。rbenv istall -lを実行するとバージョンリストが更新された!やったね!

アンインストール前のrbenvの設定や、rbenvで管理していたrubyのバージョンは全部そのまま残っていて、今のところは問題なく動作中です。

よかったよかった。


brew updateができない場合の対処

そもそもbrew updateができない場合は下記を参考にどうぞ。

MacOS High SierraでHomebrewの更新(brew update)ができない場合の対処 - Qiita