こんにちは、masm11 です。 今回は久しぶりに Rails について書きたいと思います。
Rails 5.1~5.2 で credentials 機能が一新され、 credentials.yml.enc と master.key になりましたね。 そして Rails 6 ではそれを環境ごとに用意できるようになりました。
ただ、もろもろの事情でもうしばらく Rails 5.2 から離れられそうにないので、 Rails 5.2 で Rails 6 のこの機能を使う方法を探してみました。
1. 各ファイルを作る
とりあえず、
bin/rails credentials:edit
と実行すると、config/credentials.yml.enc
と config/master.key
が
作成されます。
これを config/credentials/ に置きます。
mv config/credentials.yml.enc config/credentials/development.yml.enc mv config/master.key config/credentials/development.key
以上を development, test, staging, production と、必要なだけ繰り返します。
そして、.gitignore
に
/config/credentials/*.key
の一行を追加します。*.key
は暗号化/復号に使う鍵なので、公開しないようにしましょう。
2. Rails 6 の機能を backport
以下に backport したものが公開されています。
https://gist.github.com/palkan/e27e4885535ff25753aefce45378e0cb
このページに書いてあるとおりに進めます。
backport_rails_six_credentials.rb
をダウンロードしてlib/
に置く。backport_rails_six_credentials_command.rb
をダウンロードしてlib/
に置く。config/application.rb
のrequire "rails"
っぽい行の下に以下の行を追加。
require_relative '../lib/backport_rails_six_credentials'
config/boot.rb
のrequire "bundler/setup"
の下に以下の行を追加。
require_relative '../lib/backport_rails_six_credentials_command'
config/environments/*.rb
に以下を追加します。
config.require_master_key = true
3. コマンドを使う
config/credentials/development.yml.enc
は暗号化されているので、
そのままでは中身を見ることはできません。中身を表示するには以下のようにします。
bin/rails credentials:show --environment=development
編集するには以下のようにします。環境変数 EDITOR に指定してあるエディタが起動します。
bin/rails credentials:edit --environment=development
例えば、今まで secrets.yml が
development: foo: 123 bar: 456 production: foo: 789 bar: 012
だったなら、--environment=development
では
foo: 123 bar: 456
と書き、--environment=production
では
foo: 789 bar: 012
と書きます。
4. コード内から使う
Rails.application.credentials.foo
とかで読み出せます。
もし、
foo: bar: 123
とネストしている場合は、Rails.application.credentials.foo[:bar]
です。
まとめ
以上、Rails 6 の credentials 機能を Rails 5.2 で使う方法をご紹介しました。
インゲージではエンジニアを募集中です。詳しくは以下のページへ!
ではまた!