メモ: なぜローカルgemをインストールする前に.ruby-versionを消すのか

今日、上の記事があって助かったのだけど、手順の一部の意味がわからなかったのでメモ。記事から手順を引用する。

git clone git://github.com/berkshelf/berkshelf
cd berkshelf
rm .ruby-version
gem build berkshelf.gemspec
gem install berkshelf-3.0.0.beta4.gem
rbenv rehash
疑問

なぜ.ruby-versionファイルを消す必要があるのか? .ruby-versionを残すと、どんな不都合が発生するのか?

前提知識

OSは、RubyRubyを使うツールを実行する際に、PATHの先頭に記述されたディレクトリから順にrubyを探す。rbenvは、PATHの先頭に小細工をして、システムにインストールされたRubyと異なるバージョンのRubyを参照するように仕向ける。

rbenvは、使用するRubyのバージョンを次のように決める。

  1. 環境変数RBENV_VERSIONが定義されていれば使う
  2. 実行したスクリプトが存在するディレクトリから親ディレクトリに遡り、ファイルシステムのルートに至るまでに最初に見つけた.ruby-versionファイルの設定。
  3. カレントディレクトリから親ディレクトリに遡り、ファイルシステムのルートに至るまでに最初に見つけた.ruby-versionファイルの設定。なおカレントディレクトリの.ruby-versionの設定は、rbenv localコマンドで上書きできる
  4. ~/.rbenv/versionの設定。なおこの設定はrbenv globalコマンドで上書きできる。globalバージョンのファイルがなければ、rbenvはシステムにインストールされたRubyを使おうとしているとみなす。

rbenv rehashは、すべての実行可能なRubyに対して、PATH先頭の小細工を (rbenvのドキュメントの言葉にしたがうとshimを) 改めて挿入する。そのため、新しいバージョンのRubyをインストールした場合や、コマンドが提供されるようなgemをインストールした場合(つまり、実行にあたってPATHをたどって実行される場合)、rbenv rehashする必要がある。

結論

というわけで、上の手順で.ruby-versionファイルを消す理由は、rbenv rehashを実行する際に、rbenv自体もRubyで動くので、予期しないRubyのバージョンを使って実行しないようにするため、という理解です。違っていたら教えてください。