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

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

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

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

Q&A

解決済

1回答

425閲覧

Rubyでrequireするgemとしないgemの違いは?

pyon_kiti_jp

総合スコア265

Ruby

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

2グッド

1クリップ

投稿2024/09/25 00:48

現在、Ruby3.3を使っています。

Rubyをインストールすると、既存の状態で、色々なgemが標準的に使えるようになっております。
標準的に入っているgemの中でも、requireしないといけないタイプのgemとrequireしなくても使えるgemとがあるように思うのですが、その違いは何なのでしょうか。

標準的に入っているgemの中で、loggerはrequireしなくても使えますが、yamlはrequireしないと使えないようです。このように混在している理由が分かっておりません。

tatsu99, melian👍を押しています

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

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

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

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

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

melian

2024/09/25 02:56

> 標準的に入っているgemの中で、loggerはrequireしなくても使えますが こちらの環境は ruby 3.3.5 ですが、require しないと logger を使用することができません。 $ ruby --version ruby 3.3.5 (2024-09-03 revision ef084cc8f4) [x86_64-linux] $ ruby -e 'logger = Logger.new(STDOUT)' -e:1:in `<main>': uninitialized constant Logger (NameError) logger = Logger.new(STDOUT)      ^^^^^^ require "logger" を実行すればエラーにはなりません。 $ ruby -e 'require "logger"; logger = Logger.new(STDOUT)'
pyon_kiti_jp

2024/09/25 03:32

自分も同じRuby3.3.5ですが、Loggerはrequireなしでエラーになりません。 なぜだろう。
maisumakun

2024/09/25 04:44

> 自分も同じRuby3.3.5ですが、Loggerはrequireなしでエラーになりません。 Railsコンソールから呼び出している、ということはありませんか?
pyon_kiti_jp

2024/09/25 05:22

>Railsコンソールから呼び出している、ということはありませんか? Ruby単体で使っています。 OSはWindows10で動かしていますが、関係ないかな?
guest

回答1

0

ベストアンサー

Loggerrequireが必要です。

CMD

1Z:\>ruby -v -r logger -e "p Logger" 2ruby 3.3.5 (2024-09-03 revision ef084cc8f4) [x64-mingw-ucrt] 3Logger 4 5Z:\>ruby -v -e "p Logger" 6ruby 3.3.5 (2024-09-03 revision ef084cc8f4) [x64-mingw-ucrt] 7-e:1:in `<main>': uninitialized constant Logger (NameError) 8 9p Logger 10 ^^^^^^

おそらく、別のgemをrequireしていて、そのgemからrequire "logger"されているのでしょう。そういうのはよくあります。

CMD

1Z:\>ruby -v -r selenium-webdriver -e "p Logger" 2ruby 3.3.5 (2024-09-03 revision ef084cc8f4) [x64-mingw-ucrt] 3Logger

追記

requireするgemとしないgemの違いは?

質問にストレートに回答していませんでした。
Gemはすべてrequireが必要です。
「Gemだけど、自分でrequireを書かなくても使える」というのは、上述の通り「requireしている別のGemの中でrequireされている」場合です。

ライブラリーには大きく3種類あります。

  1. 組み込みライブラリ
    https://docs.ruby-lang.org/ja/latest/library/_builtin.html にあるもの
    requireは不要で使える
  2. 標準添付ライブラリ
    https://docs.ruby-lang.org/ja/latest/library/index.html にあるもの(先頭の組み込みを除く)
    requireが必要だがRuby本体をインストールすれば使える
    Gemのもの(gem list で表示される)と、Gemでないもの(gem list に出てこない)があります
  3. 標準添付でないGem
    Ruby本体インストール後に、自分でインストールする(または第三者がRuby本体と一緒に配布しているかも)

Rubyのバージョンアップで、Gemじゃなかった標準添付ライブラリーが、Gemになることがあります。
参考: https://www.ruby-lang.org/ja/news/2020/12/25/ruby-3-0-0-released/ の下の方。

投稿2024/09/25 13:37

編集2024/09/25 14:22
otn

総合スコア85901

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

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

pyon_kiti_jp

2024/09/26 00:32

>otnさん ご回答ありがとうございます。 ずばり! selenium-webdriverを利用していました。 なので、Loggerがrequireしなくても利用できたいたのですね。 組み込みライブラリは、Rubyがバージョンアップされるたびに標準添付ライブラリに格上げされていくイメージなのですね。勉強になりました。
otn

2024/09/26 09:31

> 組み込みライブラリは、Rubyがバージョンアップされるたびに標準添付ライブラリに格上げされていくイメージなのですね。 私はそんなことは一言も書いてないのですが、どの部分を見てそう思ったのでしょうか?
pyon_kiti_jp

2024/09/30 06:19

>otn そうでしたか。すいません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問