Ruby on Rails環境変数の設定

こんにちは、皆さん!

今回はRailsにおいて環境変数を安全に設定していきたいと思います。


  • トピック:
  1. 環境変数とは?
  2. なぜ環境変数を使うのか?
  3. なぜ環境変数を安全に保護しないといけないのか?
  4. どうやって安全にキープするのか?
  5. では、試してみましょう!!


  • 学習した内容:
  1. Herokuですごく簡単に環境変数を設定できる!


  • リソース:
  1. https://richonrails.com/articles/environment-variables-in-ruby-on-rails


環境変数とは?

簡単に言いますと、外部から与えられるデータのことです。直接コードの中ではそのものを書かずに他のファイルからそれを読み取ります。


なぜ環境変数を使うのか?

Google Mapをアプリケーションに応用しようと思ったときにAPIというものが必要になってきます。相手側のサービスを利用するにあたっての個人のIDみたいなものです。権利書みたいでもあり、そのAPIがないと利用できません。

なぜ環境変数を安全に保護しないといけないのか?

ウェブ上のコードというのはとても簡単に他人に見られます。先ほどのAPIというのはいうと、数字とアルファベットの羅列です。だから、見られたらそのまま盗まれます。そして、あなたの名義でその権利書を使い、その人のアプリケーションを作る。料金のかかるAPIですと、他人のために金を払うことになります。だから、環境変数にその危ない部分を移し、なおかつその環境変数を含んだファイルを見られないようにすることが大事なのです。


どうやって安全にキープするのか?

まず、Railsでは下記のように環境変数にアクセスできます。

ENV['API_KEY']

ローカルでは他のファイルに保存しておけば、アクセスできます。
プロダクション、つまり、オンラインではconfigに環境変数を保存すれば安全にキープできます。

では、試してみましょう!!

僕のコードをhttps://github.com/Eric1015/environment_testに載せておきましたので、参考にしてください。
おススメはそのコードをダウンロードして、この記事通りに見て、そして、ローカルやHerokuで試してみることです。
まず、リソースのウェブ通りにconfig/initializers/environment_variables.rbを作って下記のコードをコピーペースト!

module EnvironmentVariablesExample
  class Application < Rails::Application
    config.before_configuration do
      env_file = Rails.root.join("config", 'environment_variables.yml').to_s

      if File.exists?(env_file)
        YAML.load_file(env_file)[Rails.env].each do |key, value|
          ENV[key.to_s] = value
        end # end YAML.load_file
      end # end if File.exists?
    end # end config.before_configuration
  end # end class
end # end module

簡単に説明すると、configフォルダー内のenvironment_variables.ymlが存在するか調べて、あるのなら、ENV[]に内容を保存できます。


config/environment_variables.ymlは下記のような内容で大丈夫です。
このファイルを忘れずに.gitignoreに追加してください!!

development:
  GMAIL_USERNAME: myemail@gmail.com
  GMAIL_PASSWORD: monkey123
production:
  GMAIL_USERNAME: myemail@mydomain.com
  GMAIL_PASSWORD: myproductionpassword123

ここで、変数の名前や内容を好きなように設定できます。


僕は今回のコードの中で下記のように環境変数にアクセスしています。

<%= ENV['GMAIL_USERNAME'] %>

ここまではローカルの場合です。ローカルとHerokuでそれぞれサイトを開いて確認してみてください。違いが分かりましたか?


Heroku上で何かが足りないと思ったら、正解です。実は、肝心の環境変数を含んだファイルは危険なため、Herokuにはプッシュしません。ですので、Heroku上では必要な内容へアクセスできないのです。
では、次はHerokuでどうやって設定するかです。
まずはHerokuのconfigを確認してみましょう!

$ heroku config

すると、下記のような内容が出てきます。(いくつか内容を消したものがありますが)

DATABASE_URL:             
LANG:                     en_US.UTF-8
RACK_ENV:                 production
RAILS_ENV:                production
RAILS_LOG_TO_STDOUT:      enabled
RAILS_SERVE_STATIC_FILES: enabled
SECRET_KEY_BASE:          

そこで、下記のコマンドを入力して、configに環境変数を追加しましょう!

$ heroku config:set GMAIL_USERNAME=myemail@gmail.com

GMAIL_USERNAMEのところは好きに変えて自分の必要な環境変数を追加しましょう!
ここで、またコマンドでconfigを開くと、

GMAIL_USERNAME:           myemail@gmail.com

この内容が追加されています。
そうすると、Herokuのサイト上でもアクセスできるようになります!!


まとめ

今回は環境変数を有効かつ安全に使う方法について見てきました。
僕もはじめはこんなに簡単に設定できるのかと感心しました。
みなさんの役に立つことを願います!
では、また次回まで✌