サマリ
- RubyMineは、rbenvによるバージョン設定を検知してくれる(ディレクトリ上の
.ruby-version
ファイルを読み込む)。 - してくれるけれど、RubyMine上で起動されるシェルでは、ファイルから読み取られたバージョン設定は
RBENV_VERSION
という環境変数に保持される模様。 - rbenvのルール上、
RBENV_VERSION
は.ruby-version
よりもバージョン決定における優先度が高い。 - ゆえに、RubyMineのターミナルで
rbenv local { rubyのバージョン }
を叩いたり、.ruby-version
を手動で変更しても、RubyMineのシェルで使われるRubyのバージョンは変わらない。 - ↑のコンテキストでRubyのバージョンを変えるときは、
rbenv shell { rubyのバージョン }
を叩くか、RubyMine上のターミナルを再起動すればOK。
RubyMineのターミナルでrbenv versions
使用バージョンは.ruby-version
の記載と一致しているけれど、正確には「同じ値を入れた環境変数」から読み込まれて設定されている。
(参考)Macのターミナルでrbenv versions
.ruby-version
が直接読み込まれているので、↓のような問題は(おそらく)起きない。
RubyMineのターミナルでrbenv local { rubyのバージョン }
を叩く
.ruby-version
は変更されたけれど、変わらず環境変数からバージョンが設定されている。
RBENV_VERSION
は.ruby-version
よりも優先度が高いので、使用バージョンは変わらない。
Sets a local application-specific Ruby version by writing the version name to a .ruby-version file in the current directory. This version overrides the global version, and can be overridden itself by setting the RBENV_VERSION environment variable or with the rbenv shell command.
RubyMineのターミナルでrbenv shell { rubyのバージョン }
を叩く
rbenv shell { rubyのバージョン }
はRBENV_VERSION
を書き換えるコマンド。
RubyMineが参照する箇所をダイレクトに変更するため、今回は使用バージョンが変わる。
rbenv shell Sets a shell-specific Ruby version by setting the RBENV_VERSION environment variable in your shell. This version overrides application-specific versions and the global version.
↑を叩かなくても、RubyMineのターミナルを再起動すれば.ruby-version
が再読み込みされて、それをもとに環境変数も更新されるので、それでもOK。
(もしrbenv local { rubyのバージョン }
で.ruby-version
を変えたら、単純にターミナルを再起動するのがわかりやすくていいかも?)
(参考)VSCodeのターミナル上でrbenv versions
VSCodeで同じことを検証してみたところ、.ruby-version
が直接読み込まれているようでした(Macと同じ)。
RubyMineのちょっとトリッキー?なことで混乱したので調べたことのシェアでした。
参考にさせていただきました🙏
RubyMineでrbenvが反映されない件 - siroemk's project
Cannot change Ruby version within terminal window : RUBY-27599