Rails 5.2 で Rails 6 の credentials 機能を使う

f:id:masm11:20210205220317p:plain

こんにちは、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.encconfig/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.rbrequire "rails" っぽい行の下に以下の行を追加。
require_relative '../lib/backport_rails_six_credentials'
  • config/boot.rbrequire "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 で使う方法をご紹介しました。

インゲージではエンジニアを募集中です。詳しくは以下のページへ!

https://ingage.co.jp/recruit

ではまた!