HerokuとGitHubの両方にプッシュできるようになったのはいいけど、例えばTwitterのOAuth認証用のトークンとか、何かのAPIを利用するためのAPIキーとか、あるいはもっと大事な何かのパスワードなど、秘密にしておきたい情報はGitHubにプッシュしてしまうと全世界に公開されるので非常にマズい。
かといって書いておかないと、Herokuにプッシュしたときに情報が足らなくてアプリが正常に動かない。どうするん? 毎回消したり書いたりするの?って悩んでたら、Herokuヘビーユーザーな先人達が既に解決していた。
herokuコマンドでconfigオプション
解決策を読んでみると、heroku
コマンドにはそのためのオプションがちゃんと用意されていて、それを使えばスマートに処理できるとのこと。ようは、heroku
コマンドで秘密にしておきたい情報を仕込んでおけば、rubyスクリプト内でそれを呼び出せるようになる。
$ heroku config:add HOGE="ほげほげ"
上記のように設定すると、rubyスクリプト内で以下のようにして ENV['addで指定したキー'] 経由で呼び出せる。
get '/hoge' do
ENV['HOGE']
end
これでHerokuにプッシュして、http://heroku-hello-world.heroku.com/hogeにアクセスすれば、addで指定した値である「ほげほげ」がちゃんと表示される。また、GitHubにはこのままプッシュしても値は表示されないので何も問題がない。
削除したいときはremove
設定した情報を削除したいときremove
を使って、
$ heroku config:remove HOGE
で消せる。全部のENV情報を消すclear
というのもあるんだけど、これは将来的なバージョンで使えなくなるっぽい。現在設定されている情報の一覧はheroku config
で表示できる。Herokuって素晴らしいですね。
ローカルプレビューの時は?
問題はローカルプレビューの時はどうするのかな?と。上記のやり方はheroku
コマンドを利用したときのみに有効になるっぽいので、ローカルでテストしているときは使えない。
今のところ、ENV['HOGE']
の値がnil
だったら、秘密情報が書かれたローカル用のファイルをrequire
する、というような記述をして、そのファイルに定数として値を持たせる方法を使っている。で、そのファイルは.gitignore
でアップロードしないように、と。
この方法はあんまりスマートじゃない気がするけど、一応目的は満たせている。もっと良い方法があったら教えてください。