rbenvのインストールの際には、初心者にはおまじないのように見える下記コマンドの実行が必要です。
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
実際自分も、当初は意味が分からず実行していました。ですが、意味を分からずに使っているとインストールの手順を間違えたりしてエラーが出た時に、何が間違っているのかがわからなかったりします。そこで、上記コマンドの意味をちゃんと調べてみることにしました。
実はパスを通している
まず、export PATH="$HOME/.rbenv/bin:$PATH
の意味を解明していきます。これは、「環境変数($PATH)の記述を変えて、コマンド検索パスを追加する」ことをやっています。いわゆる「パスを通す」というやつです。
Linuxはファイルでできており、コマンドの実行 = ファイルの実行です。例えば、catというLinuxコマンドを実行するということは、/usr/bin/catのcatファイルを実行するということを意味します。
ただし、パスを通していなければcatと省略して実行することはできません。catと入力するだけで/usr/bin/catが実行できるのは、/usr/binが環境変数$PATHに含まれているからなのです。以下のように、パスの通ったディレクトリは:で区切られて同環境変数内に保存されています。
/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2user/.local/bin:/home/ec2-user/bin
$PATHに/usr/bin/cat含ませるとすると、次のようにする必要があります。
export PATH="/usr/bin/cat:$PATH"
exportは、指定したシェル変数を環境変数として設定してくれます。この際、/usr/bin/catの後に:$PATH(もしくは前に$PATH:)
とすることで、/usr/bin/catを環境変数に追加できます。export PATH="$HOME/.rbenv/bin:$PATH
で:〜を後ろに付けているのは、$HOME/.rbenv/binを環境変数内で先頭に配置するためです。先に入っているものほど優先的に実行されます。
$HOME/.rbenv/binにパスを通すと、その配下にあるrbenvファイルが実行できるようになりますので、rbenv initやrbenv installなどのコマンドが使えるようになります。
echo '' >> ~/.bash_profile
としているのは、exportで設定した環境変数はbashを終了すると消えてしまうからです。~/.bash_profileにexport以下を記載すると、bashが起動した時に記載内容が自動的に実行されるようになります。echoは画面に文字列などを出力するLinuxコマンドですが、>>で出力先を~/.bash_profileに変えています。既存の記述を消さないよう、>ではなく>>で追記しています。
次にecho 'eval "$(rbenv init -)"' >> ~/.bash_profile
を見てみましょう。
rbenv initは、公式ドキュメントによると4つの意味のあるコマンドなのですが、最も重要な作用は~/.rbenv/shims
にパスを通すことです。この配下にrubyやrubocopのファイルが置かれるため、これらのコマンドを実行するにはrbenv initを実行する必要があります。
evalは文字列をコマンドとして実行するLinuxコマンドです。~/.bash_profileに追記することで、rbenv initがbash起動時に常に実行されるようになります。
なお、rbenv initを実行すると、~/.rbenv/shimsが$PATH内で先頭に記述されます。その結果、先に書かれた記述が優先的に実行されるため、gemが提供する実行可能ファイルよりも先に呼び出されます。そのため、~/.rbenv/shims配下のファイル実行を経由して、実行可能ファイルを実行することができるようになります。
何の意味があるかと言うと、例えばRuboCopを導入する場合、実行可能ファイルは~/.rbenv/versions/X.X.X/bin/rubocopのような形でインストールされているのですが、複数のバージョンのRubyで同じgemをインストールしている場合でも、適切なバージョンのRubyを選んだファイル実行が可能になります。
#参考文献
パスやLinuxコマンドの説明については、下記記事や書籍を参考にしました。
rbenvについては以下の公式ドキュメントを参考にしました。特に~/.rbenv/shimsの働きについては、下記ブログ記事を参考にしました。