11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

rbenvインストール時のおまじないの秘密を解明してみた

Last updated at Posted at 2021-10-20

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の働きについては、下記ブログ記事を参考にしました。

11
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?