開発環境、テスト環境のsecret_key_base
- Rails5.2から自動生成されるようになった
- Railsアプリケーション名をMD5したものを利用していた
- Add credentials using a generic EncryptedConfiguration class (#30067) · rails/rails@69f976b
- アプリケーション名から生成すると値が推測できてしまってセキュリティ的によろしくない、ということでRails6.0からは
SecureRandom.hex(64)に変更された- 値は
tmp/development_secret.txtに書き込むようになった - Fix possible dev mode RCE · rails/rails@4c74358
- 値は
- テスト環境でも使うので
tmp/development_secret.txtという名前は良くない、ということでtmp/local_secret.txtにリネームされた(Rails7.1.0.beta1) - Rails v7.2.0.beta1以降、Rails.application.secrets削除コミットの影響で、開発環境及びテスト環境のsecret_key_baseは
tmp/local_secret.txtの値が決め打ちになっていた- 過去には
ENV["SECRET_KEY_BASE"]やRails.application.credentials.secret_key_baseも使えていた - Use
secret_key_basefrom ENV or credentials when present locally by p8 · Pull Request #53705 · rails/rails - Rails 8.0.2及び7.2.3(2025/01/27時点で未リリース)でバグフィックスが入り、
ENV["SECRET_KEY_BASE"]やRails.application.credentials.secret_key_baseがまた使えるようになる
- 過去には
- Rails5.2から自動生成されるようになった
Rails7.1から、
rails assets:precompile用のダミーsecret_key_baseの設定ができるようになった- デプロイ環境でassetsのビルドまで行う等、必ずしも
rails assets:precompileをする環境にRAILS_MASTER_KEY(つまりsecret_key_base)が設定されているとは限らないので、ワークアラウンドとしてENV["SECRET_KEY_BASE_DUMMY"]があればSecureRandom.hex(64)をsecret_key_baseとして使うようになった - Allow assets:precompile to be run in a production build step without … · rails/rails@a3e392f
- デプロイ環境でassetsのビルドまで行う等、必ずしも
本番のsecret_key_base