LoginSignup
6
8

More than 5 years have passed since last update.

秘密の値をローカル、Travis、Herokuで扱うには

Posted at

前提

  • 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に追記する)

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8