【解決方法】You don’t have write permissions for the /var/lib/gems/2.7.0 directory【Ruby, Linux】

前書き:gem installでコケる

原因は単なる権限の問題。Ruby初心者なので自分用にメモします。

まずは、前提情報です。Ubuntu 21.10、Ruby 2.7.4[x86_64-linux-gnu]で、femパッケージ(パッケージ作成ツール)のインストールを試みました。結果は、/var/lib/gems以下のパーミッションエラー。

/var/lib/gemsは、Rubyのgem(rubyパッケージ)が格納されるディレクトリです。/var/lib以下は、基本的にはrootユーザ/rootグループの所有物で、かつ一般ユーザーが書き込みできない権限設定になっています。

短絡的に「”$ sudo chmod -R a+w /var/lib/gems”、ターンッ!!  権限変更ヨシ!」とするのは乱暴です。乱暴な事をして/var/lib/gemsの権限を変えても、次は「/usr/local/binの権限がないよ(You don’t have write permissions for the /usr/local/bin directory.)」と怒られます。

 

そこで本記事では、gemインストール時の権限エラー解決方法を2通り紹介します。

              

検証環境

              

解決方法その1:環境変数GEM_HOMEを変更

複数バージョンのRubyを使用しない人にとっては、この解決方法が簡単です。

環境変数GEM_HOMEは、gemインストール先を意味します。一般ユーザーの書き込み権限がある場所にGEM_HOMEを変更すれば、表題のエラーが解決します。

               

解決方法その2:rbenvを使用

Rubyのバージョンをコントロールしたい人向けの解決策です。

rbenvは、複数バージョンのrubyを共存できるようにするツールであり、一般ユーザーに権限があるディレクトリを操作します。そのため、rbenvを使用すると、自動的に権限問題が解消されます。

      

rbenvを用いた解決策の流れとしては、

  1. システムからrubyをアンインストール
  2. rbenv(+ rubyのビルド)に必要なパッケージをインストール
  3. rbenvとruby-buildをインストール
  4. rbenvのPATHを通すため、環境変数の設定
  5. ruby(gem)インストール

を行います。上記の内容を順番に説明します。

     

まず、システムからrubyをアンインストールします。

rbenv(+ rubyのビルド)に必要なパッケージをインストールします。

rbenvとruby-buildをインストールします。

rbenvのPATHを通すため、環境変数の設定をします。

Ruby(gem付き)をインストールします。”rbenv install -l”でrubyのバージョン一覧が確認できるので、任意のバージョンを選択してください。

最後の”rbenv global $(任意のバージョン)”を実行しないと、システムで使用するRubyが未確定の状態となります。この状態でgemを実行すると、”rbenv: gem: command not found”となるので、注意してください。

            

最後に

Ruby界隈の人ではないので、rbenvでバージョンコントロールするのは大変そうだなという他人事な感想を持ちました。慣れると楽なんでしょうか。Python界隈も同じ問題があり、大変そう。

      

おすすめ