おもむろに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
を実行することができるようになりました。
さいごに
今回紹介したrbenvについては『複数のバージョン管理も楽々!rbenvを利用したruby管理方法チュートリアル』で詳細解説をしていまのでぜひご覧になってください!
ツイッター(@nishina555)でもプログラミングに関する情報発信をしているのでフォローしてもらえるとうれしいです!