0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

本当にsudo gem installで良いの?

Posted at

こんにちは。
今回はタイトル通り、sudo gem install について気になったので検証してみました。

調べたきっかけ

iOS の環境構築中、cocoapods をインストールする際に
rbenv で Ruby をインストールしているにもかかわらず、sudo gem install を使っている記事が多く見られました。
自分の環境では sudo を付けることに違和感があり、「本当に必要なのか?」と疑問に思ったのがきっかけです。
実際に手元の環境で検証してみることにしました。

検証環境

項目 バージョン
OS Ubuntu 22.04
Ruby 3.3.0(rbenv 管理)
rbenv 1.3.2-4-gae72600
gem 3.5.3
cocoapods 1.16.2

前提としてMac本体を汚したくなかったため、Docker 上に Ubuntu 環境を構築して検証しました。

dockerfile の中で rbenv と ruby-build をインストールしています。
今回は dockerfile のソースコードは省略します。

フォルダ構成などに多少の差はありますが、基本的な挙動は macOS と大きく変わらないと判断しました。

動作検証

rbenv 経由で Ruby をインストール後、sudo gem install cocoapods を実行しようとしたところ、以下のようなエラーが発生しました。

エラー
sudo: gem: command not found

理由はSystem Rubyが入っていなかったため以下のコマンドでRubyをインストールして、gemを使用できるようにしました。

$ sudo apt update
$ sudo apt install ruby3.0-dev build-essential

結果

$ gem install cocoapods の場合

出力
$ which pod
/home/XXXX[ユーザー名]/.rbenv/shims/pod

dockerを削除して再ビルド
$ sudo gem install cocoapods の場合

出力
$ which pod
/usr/local/bin/pod

結果を見ると、sudo を使用した場合は /usr/local/bin(ルート配下)に、
使用しない場合は ~/.rbenv/shims(ユーザーディレクトリ)にインストールされていることがわかりました。

補足
MacOSで以下を実行
$ gem install cocoapods の場合

出力
$ which pod
/Users/XXXX[ユーザー名]/.rbenv/shims/pod

結論

cocoapods公式にも確かにインストール方法としてsudoが使用されていますが、本当に必要なのかどうかを判断しないといけないと思いました。
また、Rails など Ruby を使う他のプロジェクトでも、
ユーザーディレクトリ配下とルート配下の gem が混在するとトラブルの元になるため、
開発スタイルに応じて適切に判断する必要があります。

まとめ

  • rbenv 管理下の Ruby では、基本的に sudo は不要と考えられる
  • sudo 環境では rbenv の Ruby を参照できない(SystemのGemを使用している)
  • 混在環境は不安定になる可能性があるので要注意

最後までお読みいただき、ありがとうございました。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?