my_back_pages

プログラミング学習の記録 Ruby / Rails / FjordBootCamp

【rbenv】rbenv × RubyMineで、RubyMineのターミナルからRubyのバージョンを変える際の注意【RubyMine】

サマリ

  • 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.

github.com

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.

github.com

↑を叩かなくても、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