🦉

Railsで環境変数を使う(dotenv-rails)

2024/02/25に公開

初めに

こんにちは、大学生の独学エンジニアです。
今回は、デプロイする際やチーム開発の際に必要になってくる環境変数について学びたいと思います。

環境変数とは

環境変数というのは、その名の通りに環境が持つ変数のことでございます。
環境とは、OSのことです。OSが提供するデータ共有として一つの機能になります。
環境変数を扱うことで、メルアドや、パスワードなど第三者への情報漏洩を防ぐことができます。

また、Githubにもアップロードされないという点もございます。

何を環境変数にするべきか

どういったものを環境変数にするべきかというと、セキュリティ上の問題がある値(情報)や開発環境に依存する設定値を環境変数にします。すごく簡単に言うと公にしたくないような値(情報)になります。
公にしたくない値というのは、例で言うと、パスワードや個人用のAPIキーなどになります。

その他にシステムやプロジェクトで共通に使用する変数を環境変数として扱いこともあります。

dotenv-railsとは

dotenv-railsとは、環境変数を管理する事ができるRailsのgemです。

dotenv-railsを扱い環境変数を管理する事で、3つのメリットが考えられます。
・開発したアプリが開発環境に依存してしまう事を防ぐことができる。
・パスワードや外部APIキーの情報を漏洩することがない。
・環境変数は、Githubなどにアップロードされない。
上記のようなメリットが考えられます。

dotenv-railsの導入

初めに、Railsにdotenv-railsを導入して行きます。

Gemfile
+ gem 'dotenv-rails'

上記のように記述をしたら、次にインストールをしていきます。

bundle install

dotenv-railsのインストールが完了したら、次に.envファイルを作成していきます。

.envファイルの作成

Railsアプリのフォルダ直下に.envファイルを作成していきます。

touch .envで.envファイルを作成してください。

.envファイルで環境変数の定義

作成した.envファイルに環境変数にコードを記述していきます。

今回は、一つの例として下記に記述して行きます。

.env
SECRET_KEY=13579

以上で環境変数を設定しましたので、rails cで確認してみます。

rails cは、>より右側が入力する部分になります。
環境変数の中身を見るには、ENV['SECRET_KEY]と入力します。

3.1.2 :001> ENV['SECRET_KEY']

上記と同じように入力すると、環境変数の値が以下のように表示されると思います。

3.1.2 :001> ENV['SECRET_KEY']
=> "13579"

こちらのように定義した環境変数を確認できたと思います。

もし、出力結果が、 nilまたは"0"となっていた場合は、プリロードされたプロセスが残っている原因も考えられますので、exitと入力して、rails consoleから抜けて、spring stopというコマンドを実行してください。

実行した後に、再度rails cで環境変数の確認をしてみてください。

ソースコード内で環境変数を使用

今回は、例として先ほどのENV['SECRET_KEY]をコントローラーのindexアクションで使用してみます。

app/controllers/contents_controller.rb
def index
+ puts "設定値 #{ENV['SECRET_KEY']}"
  @contents = Content.all
end

定義した後に、rails sでrailsサーバーを起動すると、
ターミナルの標準出力のところに、設定値 13579という出力が確認できると思います。

こちらでソースコード内で指定する方法がわかりました。
ソースコード内でENV['指定した変数']で環境変数を使用することが出来るので、試して見てください。

gitignoreに.envファイルを追加

次は、Githubに環境変数を定義している.envファイルをあげないようにしていきます。
こちらも重要なことなので、覚えておいて損はないと思います。

Gitの管理下から除外

gitの管理下に置きたくないフォルダやファイルは、.gitignoreファイルを利用して設定します。

gitの管理下から除外するために.gitignoreファイルの最終行に/.env と記述します。

.gitignore
# See https://help.github.com/articles/ignoring-files for more about ignoring files.
#
# If you find yourself ignoring temporary files generated by your text editor
# or operating system, you probably want to add a global ignore instead:
#   git config --global core.excludesfile '~/.gitignore_global'
.
.
.
.
+ /.env

下記のコマンドを実行して、.envファイルがgitの管理下から除外されたか確認してみます。

$ git status

コマンドを実行して結果を確認すると、.envファイルが表示されていないと思いますので、これでgitの管理下から除外することが出来ました。

まとめ

エンジニアで業務をする際に環境変数を利用する場面というは、出てくると思い、このような記事を作成していただきました。
環境変数を利用することで、パスワードやAPIの情報漏洩を防ぐことができるため、とても重要なことでもです。
これからも、大学が終えWebエンジニアになるので、もっと情報発信や学習したことを投稿して行きたいと思います。

Discussion