RubyのENVオブジェクト

4月 29, 2021
admin

The ENV object in the Ruby Ruby
Mehdi Farsi

Follow

7月19日。 2018 – 3 min read

この記事では、以下のトピックを探検します。

  • ENV オブジェクト
  • ENV と標準ライブラリ関数
  • ENV の舞台裏

Before to start

最新のプロジェクトを紹介することに興奮している。 Ruby の楽しい事実 – Volume 1

Please feel to spread the word and share this post! 🙏

ありがとうございました!

ENV は、環境変数を操作するための API を提供します。

Hash のように動作することにより、環境変数の追加、変更、削除、およびアクセスを行う一連のメソッドを提供し、間違いなく Ruby フレンドリーです

上の例では、この API を簡単に使用することができます。

  • 001- ENV.= メソッド
  • を使って AN_ENV_VARIABLE 環境変数に 'cool!' 値を設定する

  • 002- 次に、AN_ENV_VARIABLE メソッド
  • を使ってその値にアクセスする

  • 003- AN_ENV_VARIABLE'great!'ENV.= メソッド
  • を使って修正する

  • 004- このように、環境変数を変更することができます。 環境変数 AN_ENV_VARIABLEENV.delete メソッドで削除する
  • 005- AN_ENV_VARIABLE にアクセスし、存在しない場合は ENV.fetch メソッドでデフォルト値を提供する

よろしいですね! しかし、システム環境変数はどこにあるのでしょうか。

ENV と標準ライブラリ関数

ENVオブジェクトは環境変数を管理するために C 標準ライブラリ関数に依存しています。

例えば、ENV. メソッドを呼び出すと、Ruby は OS によって適切な C 標準ライブラリ関数、例えば Unix 系 OS では getenv(3) を呼び出し、適切な環境変数を取得する。

では、ENVがどのように実装されているかを見てみましょう。

ENV behind the scene

ENV はハッシュ型のオブジェクトです。 これは、Object のインスタンスであり、Hash のインスタンスと同様のメソッドをたくさん持っていることを意味します。

irb> ENV.class
=> Object

舞台裏では、ENV オブジェクトは *env(3) C function family を使うために (ENV として) ハッシュに似たメソッドをリコードしています。 つまり、ENV オブジェクトは環境変数を管理する C 関数の Ruby ラッパーに過ぎません

さらに、ENV オブジェクトは Enumerable モジュールを拡張しますが、例えば eacheach_pair のようにモジュールの多くのメソッドをオーバーライドします

irb> ENV.singleton_class.included_modules
=>

復習すると、ENV とはグローバル定数に格納されている Object の「列挙可能」インスタンスのことを指します。

さらなる情報については、hash.c ファイルを自由にブラウズしてください。

コメントを残す

メールアドレスが公開されることはありません。