質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RubyGems

RubyGemsはRubyによるプログラミングのためのパッケージマネジメントツールです。ユーザはこれを使用することで、Rubyライブラリのダウンロードやアップデートや、依存関係の自動解決が可能になります。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

2476閲覧

Rubyのgemとパーミッションについて

mkk

総合スコア378

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

RubyGems

RubyGemsはRubyによるプログラミングのためのパッケージマネジメントツールです。ユーザはこれを使用することで、Rubyライブラリのダウンロードやアップデートや、依存関係の自動解決が可能になります。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

1クリップ

投稿2020/07/26 06:16

開発環境:Mac book pro13(2020)
Rubyを始めたばかりで現在は環境構築をしている段階です

今回お伺いしたいのは下記の2点です。

1.gemの考え方、使い方
2.gemをインストールする際のパーミッションについて

まずgemの考え方についてですが、当方の理解ではgemとは
・ライブラリのようなものであり、関数の集まりというよりは何かの機能を持った部品である
・bundlerというgemがあり、それを使うことで必要なgemをまとめて管理することが可能である
と考えています。
その上でまだ分からない部分があるのですが、gemは一度インストールすれば
全てのプロジェクトで使えるものではないのでしょうか?
/Library/Ruby/Gems/2.6.0 にgemが入っているので共通して使えると思っていましたが
プロジェクトごとにGemfileで管理しているということはプロジェクトごとにインストールする必要があるのでしょうか?

次にパーミッションについてですが、gemをインストールしようとすると下記エラーがよく出てきます。

gem install bundler

ERROR: While executing gem ... (Gem::FilePermissionError) You don't have write permissions for the /Library/Ruby/Gems/2.6.0 directory.

書き込み権限がない?と思い /Library/Ruby/Gems/2.6.0 のパーミッションを見たところ
確かに自分のユーザには書き込み権限がなく、インストール時には

sudo gem install bundler

のように指定して毎度パスワードを入力しています。
しかし初心者サイトでgemをインストールするように指示がある際には特に sudo などを入力する指示はありません。
何かやり方や考え方が間違っているのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

sudoの必要性の件ですが、

そもそも、Rubyのインストール先として、システムのディレクトリにインストールする場合と、ユーザーのホームディレクトリの下にインストールする場合があります。前者であれば、sudoが必要です。

gemコマンドはデフォルトだと、Rubyのディレクトリの中にインストールしますが、複数バージョンのRubyを作業ディレクトリにより切り替える必要があるときに使われるrbenvだと、ホームの下に入れるような紹介ページが多いようです。なので、

しかし初心者サイトでgemをインストールするように指示がある際には特に sudo などを入力する指示はありません。

と言うことになります。

投稿2020/07/26 09:33

otn

総合スコア84559

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mkk

2020/07/27 01:50

ご回答ありがとうございます! 仰っている「Rubyのディレクトリ」とは、 /Library/Ruby/Gems のことで 「ホームの下」というのが各プロジェクト内という認識でよろしいでしょうか? ということは、rubyのバージョンによってgemのバージョンなどを変える必要がある場合は 各プロジェクト内にgemを保存するということなのでしょうか? 理解が乏しく申し訳ありません。
otn

2020/07/27 04:13

> 仰っている「Rubyのディレクトリ」とは、 /Library/Ruby/Gems のことで いいえ。 システムのディレクトリにインストールした場合はそうですが、Rubyをホームの下などにインストーした場合はその中です。 > 「ホームの下」というのが各プロジェクト内という認識でよろしいでしょうか? いいえ。 「ホームの下」というのはユーザーのホームディレクトリの下のことです。 > ということは、rubyのバージョンによってgemのバージョンなどを変える必要がある場合は 各プロジェクト内にgemを保存するということなのでしょうか? ちょっと違います。 Rubyのバージョンによってgemのバージョンを変える必要もあるかも知れないし、同じバージョンのRubyを使う異なるプロジェクトでgemのバージョンを変える必要もあるかも知れない。 前者だけであれば、gemのデフォルトでそのRubyのディレクトリの下にインストールすれば十分ですが、後者だとgem installの時にインストール先を明示してプロジェクトの内部にインストールする必要があります。
mkk

2020/07/27 06:19 編集

ありがとうございます。 すいません、少し混乱してきました。 ・Rubyのディレクトリ ・システムのディレクトリ ・ホームの下 はそれぞれ別のフォルダということで合っているでしょうか? 「Rubyのディレクトリ」  → Rubyの本体がインストールされているところ    ~/Ruby  みたいな? 「システムのディレクトリ」  → /Library/Ruby/Gems 「ホームの下」  → ここが分かりません。「Rubyのディレクトリ」もホームの下っぽいですが別物? それと、「システムのディレクトリ」に共通で使うgemを置き、 プロジェクト別に固有で使うgemを置く ということなら分かるのですが、 3つのフォルダにgemを置くことになるのでしょうか?
otn

2020/07/27 07:01

> はそれぞれ別のフォルダということで合っているでしょうか? はい。別の概念です。ものとしては同じ物かも知れませんが。 > ここが分かりません。「Rubyのディレクトリ」もホームの下っぽいですが別物? そうであっても、概念としては別物です。 > 3つのフォルダにgemを置くことになるのでしょうか? どういう使い分けにしても良いです。
mkk

2020/07/27 09:12

なるほど、3つのフォルダは別物であり、それぞれgemを置くことができて 状況によってどのように運用するかを決めていくということですね。 大変参考になりました。 ありがとうございました。
guest

0

ベストアンサー

1はほぼそうです

gemは一度インストールすれば全てのプロジェクトで使えるものではないのでしょうか?

ここが微妙です。
/Library/Ruby/Gems/2.6.0 にgemが入っているので共通して使えます。
が、プロジェクトごとにどのgemを使うのか、はまちまちなので、それをGemfileで管理しています。

初心者サイトでgemをインストールするように指示がある際には特に sudo などを入力する指示はありません。

Railsでgemを使う場合、どのエリアにgemを取り込むか、を指定できます。/Library/Ruby/Gems に入れない場合は多くの場合 Rails.root/vender にいれます。
この場合は書き込み権が有りますから sudo 不要です。ただしRailsアプリ毎に容量を食います。
/Library/Ruby/Gems(でない場合もありますが、system管理下の場所)に入れる場合はsudoが必要です。

投稿2020/07/26 06:33

編集2020/07/26 06:38
winterboum

総合スコア23347

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mkk

2020/07/26 06:54

ご回答ありがとうございます。 なるほど、では基本的に一度入れたgemは再度入れる必要はなさそうですね。 Gemfile(bundler)についてまだ少し理解が乏しいのですが、gemがそういうものであれば > bundle install は一体何をしているのでしょうか? 当方の インストール という言葉の認識が違ってしまっているのかと思いますが gemが既にあるのであれば、該当のgemにリンクをはるというかパスを通せばいいだけな気がしますが プロジェクトフォルダ内に何かをコピーしてきているのでしょうか?
winterboum

2020/07/26 07:04 編集

まだ gem install していないものがあるかもしれない、その場合はinstallする install されている gem 同志で必要versinの相違が有るかもしれない、その場合は適切なversionをinstallする そのgemを動かすのに必要なgemが他に有り、それがまだinstallされていなければinstallする その結果、どういうgem達をこのproject使うのかをGemfile.lockに登録する(起動時にrequireする準備を行う)
mkk

2020/07/26 07:10

しっかり理解することができたと思います。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問