Ruby
rbenv
初心者
RubyOnRails

gem installでpermissionエラーになった時の対応方法

おもむろにgemをインストールした際に以下のようなエラーに遭遇しました。

$ gem install foreman

Fetching: thor-0.19.4.gem (100%)
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory.

エラーログをみるとYou don't have write permissionsと書いてあります。

上記のようなエラーの原因ですが、結論からいうと、システムのrubyを利用しているため、権限不足でgemのインストールができない可能性が高いです。

ルート権限でシステムのRubyにインストールをしてもいいのですが、開発環境ではrbenvでrubyを管理することをおすすめします。

以下では、今回遭遇したエラーをrbenvでRubyを管理することで解決するまでの手順について説明をします。


現状確認

まずはgemやrubyがどのパスを指しているのか現状の確認をします。

以下の結果からわかるように/usr/binというシステムのパスを指していることがわかります。

$ which gem

/usr/bin/gem

$ which ruby

/usr/bin/ruby


rbenvでrubyを管理する

rbenvでrubyを管理するための手順について説明します。

まずはrbenvのインストールをします。

$ brew update

$ brew install rbenv ruby-build

rbenvで管理されているrubyのバージョンを確認します。

以下のように、現在のrubyはsystemを利用していることがわかります。

$ rbenv versions

* system (set by /Users/toshiharu.nishina/.rbenv/version)

rbenvの管理下にrubyをインストールします。

インストールできるrubyのバージョンは以下のコマンドで確認ができます。

$ rbenv install -l

今回は最新のRuby安定版である2.5.3(2018年11月現在)をインストールします。

$ rbenv install 2.5.3

インストール後もう一度以下のコマンドを叩いてみます。

先ほどインストールさいた2.5.3というバージョンが新しく追加されていることがわかります。

$ rbenv versions

* system (set by /Users/toshiharu.nishina/.rbenv/version)
2.5.3

2.5.3をglobalで利用するように変更します。

なお、アプリごとにrubyのバージョンを変更したい場合はrbenv localコマンドを利用します。

$ rbenv global 2.5.3

上記コマンドを実行後、rbenvで管理されたrubyに変更されます。

$ rbenv versions

system
* 2.5.3 (set by /Users/toshiharu.nishina/.rbenv/version)

rbenvにパスを通すため、シェルの設定ファイル(.bashrcや.zshrc)に以下を追加します。

[[ -d ~/.rbenv  ]] && \

export PATH=${HOME}/.rbenv/bin:${PATH} && \
eval "$(rbenv init -)"


設定後確認

シェルを再起動後、もう一度gemとrubyのパスを確認してみます。

はじめはシステムのパスを指していましたが、以下のようにrbenvのパスを指していることがわかります。

$ which ruby

/Users/toshiharu.nishina/.rbenv/shims/ruby

$ which gem

/Users/toshiharu.nishina/.rbenv/shims/gem

rbenvでrubyを管理することで、もともとエラーになっていたgem install foremanを実行することができるようになりました。


さいごに

ツイッター(@nishina555)でもプログラミングに関する情報発信をしているのでぜひフォローよろしくおねがいします!