RubyのENVオブジェクト
この記事では、以下のトピックを探検します。
-
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.=
メソッド - 002- 次に、
AN_ENV_VARIABLE
メソッド - 003-
AN_ENV_VARIABLE
を'great!'
にENV.=
メソッド - 004- このように、環境変数を変更することができます。 環境変数
AN_ENV_VARIABLE
をENV.delete
メソッドで削除する - 005-
AN_ENV_VARIABLE
にアクセスし、存在しない場合はENV.fetch
メソッドでデフォルト値を提供する
を使って AN_ENV_VARIABLE
環境変数に 'cool!'
値を設定する
を使ってその値にアクセスする
を使って修正する
よろしいですね! しかし、システム環境変数はどこにあるのでしょうか。
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
モジュールを拡張しますが、例えば each
や each_pair
のようにモジュールの多くのメソッドをオーバーライドします
irb> ENV.singleton_class.included_modules
=>
復習すると、ENV
とはグローバル定数に格納されている Object
の「列挙可能」インスタンスのことを指します。
さらなる情報については、hash.c ファイルを自由にブラウズしてください。