Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

システム開発において、公開したくないデータを環境変数として保持しておきプログラムから参照する方法は、実務でよく利用されるプログラマーなら覚えておきたい知識の1つです。

本記事では、プログラミング言語Rubyで環境変数から値を取得するENVオブジェクトの利用方法をご紹介していきます。

そもそも環境変数って何?


環境変数は、オペレーティング・システムが提供するデータ共有機能です。

公開したくないデータを環境変数として定義しておき、プログラムからデータを参照することで必要に応じて利用することが可能となります。

利用用途

例えば、ログイン用のパスワードなどの情報をプログラムで利用する際、ソースコードに直接記述してしまうと、ソースコードを参照出来る人が全員パスワードを知ることが出来てしまうのはもちろん、GitHubなどでパスワード自体を公開してしまう可能性も否定出来ません。

このようなセキュリティリスクを避けるために、あくまで実際のパスワードはローカルコンピューター上に保持しておき、必要に応じてプログラム上から実際の値を取得するような実装で利用されます。

環境変数の設定方法

環境変数は「~/.bash_profile」や「~/.bashrc」の設定ファイルに記述されます。

「~/.bash_profile」はログイン時のみ設定されるファイルで、「~/.bashrc」はbashを起動するたびに毎回設定されるファイルです。

処理の順番としては「~/.bash_profile」が読み込まれた後、「~/.bashrc」を読み込む形となります。

OSを再起動した際には両方のファイルが再読み込みされますが、bashを再起動した際には、「~/.bash_profile」の再読み込みは行われません。

環境変数をどちらのファイルに記述しなければいけないといった決まりはなく、どちらかに設定しておけば利用可能です。

ポテパンダの一言メモ

この説明はMac環境のユーザーを想定しています。

RubyのENVオブジェクトで環境変数を読み込む


ではRubyで設定した環境変数を読み込むにはどうすれば良いのかというと、ENVオブジェクトを利用して値を取得します。

基本構文

記述方法は簡単で下記の形式で取得出来ます。

ENV["キー名"]

例えば「SAMPLE」という環境変数の値を取得したい場合には、下記のように記述します。

ENV["SAMPLE"]

.bash_profileから読み込む

サンプルとして「~/.bash_profile」に「SAMPLE」という変数を定義してRubyプログラムから取得してみましょう。

bash_profileに下記の文言を記述しておきます。

.bash_profile

export SAMPLE="test"

次に「sample.rb」というファイルを作成し、下記のコマンドを記述しました。

sample.rb

puts ENV["SAMPLE"]

ターミナルからRubyのコマンドを実行して取得出来るか確認してみましょう。

ruby_sample $ ruby sample.rb
test

環境変数として指定した値が取得出来ていることをご確認頂けます。

.bashrcから読み込む

今度は「~/.bashrc」に記述した環境変数をENVオブジェクトで取得出来るのか確認してみましょう。

.bashrcに下記の文言を記述しておきます。

export SAMPLE_BASHRC="bashrc"

sample.rbファイルは取得したい環境変数に修正しておきます。

sample.rb

puts ENV["SAMPLE_BASHRC"]

ターミナルからrubyのコードを実行してみましょう。

ruby_sample $ ruby sample.rb
bashrc

このように「.bashrc」ファイルからも環境変数として設定した値を取得出来ていることが確認出来ました。

RubyではENVのfetchメソッドでも環境変数が読み込める


RubyのENVオブジェクトの利用方法を上述してきましたが、ENVオブジェクトではfetchメソッドを利用して環境変数の値を読み込む方法も利用可能です。

基本構文

fetchメソッドを利用した場合、下記のように記述して環境変数を取得します。

ENV.fetch("キー名"){"デフォルト値"}

デフォルト値の項目が追加されており、指定したキー名が存在しなかった場合に、返却する値を設定することが出来ます。

例えば、「SAMPLE」というキー名が存在しなかった場合に「SAMPLEは存在しませんでした。」という文言を返却するのであれば下記のような記述となります。

ENV.fetch("SAMPLE"){"SAMPLEは存在しませんでした。"}
ポテパンダの一言メモ

fetchを使用する場合、キー名の指定方法が[]から()に変わるため注意が必要です。

環境変数に存在する値を取得するサンプル

まずは上記のENVオブジェクトサンプルで利用した環境変数をそのままfetchメソッドで取得してみましょう。

sample.rb

puts ENV.fetch("SAMPLE"){"SAMPLEの環境変数は存在しませんでした。"}
puts ENV.fetch("SAMPLE_BASHRC"){"SAMPLE_BASHRCの環境変数は存在しませんでした。"}

ターミナルからコードを実行してみます。

ruby_sample $ ruby sample.rb
test
bashrc

環境変数に設定した値が取得出来ていることをご確認頂けます。

環境変数に存在しない値を指定したサンプル

続いて環境変数に存在しない値を指定した場合の挙動を確認してみましょう。

sample.rbのコードを下記のように修正します。

sample.rb

puts ENV["SAMPLE_TEST1"]
puts ENV.fetch("SAMPLE_TEST1"){"SAMPLE_TEST1の環境変数は存在しませんでした。"}
puts ENV.fetch("SAMPLE_TEST2"){"SAMPLE_TEST2Cの環境変数は存在しませんでした。"}

ターミナルからコードを実行してみます。

ruby_sample $ ruby sample.rb

SAMPLE_TEST1の環境変数は存在しませんでした。
SAMPLE_TEST2Cの環境変数は存在しませんでした。

実行結果を確認していただくと、1行目は空白行として処理されており、2行目以降のfetchメソッドを利用した環境変数の取得では、デフォルト値に指定した値が表示されています。

ENV[“キー名”]の指定で環境変数を取得しようとした際、キーが存在しない場合には「nil」が返却されるため、何も表示されません。

一方で、fetchメソッドを利用して取得する場合、デフォルト値を指定出来ることから、指定したキーの環境変数が取得出来なかった場合には任意の値を返却することが可能となり、このような結果の違いが生まれています。。

さいごに: ENVオブジェクトを利用した環境変数の取得処理はRubyプログラム開発の必須知識


本記事では、 RubyのENVオブジェクトを使用して、プログラムから環境変数に設定された値を取得する方法についてご紹介してきました。

環境変数を利用して、パスワードなどの重要な情報をコンピューター上に保持し、プログラム上から取得するという処理は実務ではよく利用される方法です。

今回ご紹介したRubyでの環境変数取得方法を把握するのはもちろん、他のプログラミング言語でも環境変数を利用したデータ保持の考え方は同じですので、きちんと仕組み自体を理解してRuby以外のプログラム開発でも対応出来るように学習しておきましょう。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。