Help us understand the problem. What is going on with this article?

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を実行することができるようになりました。

さいごに

今回紹介したrbenvについては『複数のバージョン管理も楽々!rbenvを利用したruby管理方法チュートリアル』で詳細解説をしていまのでぜひご覧になってください!

ツイッター(@nishina555)でもプログラミングに関する情報発信をしているのでフォローしてもらえるとうれしいです!

nishina555
Webデベロッパーです。現在は業務委託で仕事をしています。サーバーサイドがメイン。Rails/React/Redux/Node/GraphQL/AWS。大学院時代は自然言語処理の研究を行っていました。
https://nishinatoshiharu.com/
onecareer
ワンランク上のキャリアを目指す学生のための新卒採用サービスONE CAREERの開発・運営会社
https://www.onecareer.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした