前提
- Travis、Herokuを使ってWebアプリケーションやAPIなどを開発していること
- 外部サービスのAPIキーなどバージョン管理にそのまま載せたくない値を使用していること
結論を先に
- 秘密の値は環境変数で用意しよう
- Travis、Herokuの仕組みを正しく使おう
- ローカル環境では手動で値を用意するより便利な仕組みを導入したほうが良い
各環境でどのように秘密の値を扱うか
方向性
ローカル、Travis、Herokuの3つともでうまく値を扱うためには環境変数を使って値を用意する必要があります。
言わずもがなですが環境変数とはこんなやつですね。
$ export SECRET_VALUE=hogehoge
$ echo $SECRET_VALUE
hogehoge
Travis
Travisとは設定ファイルひとつで手軽にWebサービスやアプリでCIができる人気の高いCIサービスです。
Travisには環境変数を秘密で指定できる方法があります。
ドキュメントはこちら
具体的な方法としては以下のコマンドを実行していくだけです。
#travisコマンドを使えるようにする。初回のみ必要
$ gem install travis
#値をTravisにしか復元できない値として暗号化し、設定ファイルに追記する
$ travis encrypt SECRET_VALUE=hogehoge --add
たったこれだけの設定をすればTravisのビルド時には環境変数 SECRET_VALUE
が使えるようになります。
Heroku
HerokuとはPaaSのひとつでサクッとサーバが用意できるかなり便利なサービスです。
HerokuもTravisと同じくかなり簡単に秘密の値を扱えます。
方法は基本的には二つあります。
ドキュメントはこちら
まず一つ目はherokuコマンドを使う方法です。
コマンドインストール後、ワンコマンドで値を設定することができます。
$ heroku config:set SECRET_VALUE=hogehoge
もうひとつはWebのUI画面から設定する方法です。
対象のappのダッシュボードから「Config Variables」を探して入力してください。
ローカル
ローカルでは普通に環境変数を設定すれば秘密の値を扱うことができます。
$ export SECRET_VALUE=hogehoge
しかし開発前のタイミングなどでいちいちこのコマンドを実行するのはとても面倒です。
かといって特定のプロジェクトでしか使わない値を.bash_profile
などに書いておくのも気持ちが悪いです。
そこで登場するのがdirenv
です。
direnv
を使えば「特定のディレクト内でのみ自動で環境変数を追加する」ことができます。
公式リポジトリはこちら。
導入方法はいくつかありますが例えばMacユーザーならhomebrewですぐにインストールできます。
$ brew install direnv
インストールできたら初期設定をします。
初期設定と言っても.bash_profile
に1~2行追記するだけです。
$ tail .bash_profile
...
...
export EDITOR=vim
eval "$(direnv hook bash)"
$ source bash_profile
これで準備は完了です。
ディレクトリ内だけで有効になる環境変数を用意してみましょう。
$ direnv edit . #設定したい環境変数を編集する
$ cat .envrc #このファイル内に値が記載される
export SECRET_VALUE=hogehoge
export SOME_VALUE=some-hogehoge
$ pushd ..
#環境変数が未設定の状況に戻る
$ popd
# $SECRET_VALUE と $SOME_VALUE が設定される
.envrc
はバージョン管理しないようにしておきましょう。(gitなら.gitignore
に追記する)