外部に公開できない秘密の文字列に関して

secrets.yml

rails 4.1でrails newするとconfig/secrets.ymlが生成されます。秘密の文字列を集約する場所です。本番環境は環境変数経由でアクセスする必要があります。

development:
	secret_key_base:
test:
	secret_key_base:
production:
	secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

encrypted secretsによる暗号化

rails 5.1ではconfig/secrets.yml.encというファイルに暗号化した内容を記載します。暗号化した内容は復号化する必要があるので、復号化時に使用するキー(RAILS_MASTER_KEY)だけを別で管理するだけなので、管理コストが下がります。

config/secrets.yml.encはrails new時に作成されないので、別途コマンド($rails secrets:setup)で作成します。config/secrets.yml.encconfig/secrets.yml.keyが出力されます。

config/secrets.yml.keyが暗号化、復号化に利用する値です。コミットしないように.gitignoreへ追加されます。

secrets.yml.encは暗号化されているので直接編集できません。編集するときは$ rails secrets:editで編集します。記述フォーマットはsecrets.ymlと同じです。

本番環境ではconfig.read_encrypted_secrets = trueの設定が有効になっているので、復号キーを使ってsecrets.yml.encを読み込む設定が有効になっています。

開発環境などでは有効になっていないので、config/environments/development.rbに、config.read_encrypted_secrets = trueと記述する必要があります。

credentials

環境変数ごとで値を切り替える必要がなくなりました。

credentialsで登場するファイルや環境変数