今回は、Rails5.2以降で追加された「credentials.yml.enc」と「master.key」の使い方について解説したいと思います。テキストエディタはVScodeを用いて解説するので、その点だけ注意してください。
「credentials.yml.enc」と「master.key」について曖昧な方は、こちらの記事を参考にしましょう。

事前準備
まずは新しくアプリケーションを立ち上げましょう。
今回では、CredentialsTestという名前でアプリケーションを作成します。
$ rails new CredentialsTest
ファイル場所
では、「credentials.yml.enc」と「master.key」の場所について確認しておきます。テキストエディタ(今回はVScode)で先ほど作成したCredentialsTestファイルを開き、configディレクトリ以下を見てみましょう。

このように「credentials.yml.enc」と「master.key」はconfigディレクトリに格納されていることが分かりますね。
credentials.yml.encの設定
続いて「credentials.yml.enc」を編集してみましょう。
「credentials.yml.enc」の中身を見てみると、以下のようによく分からない記述が書いてあると思います。これは中身が暗号化されているためです。
↓ credentials.yml.enc
rrqhKtnyI5+lil0A4fF21cTPxaJjFIlS16lVXfF59VE1rQTC〜〜〜
「credentials.yml.enc」は特別なファイルで、中身が暗号化されているためこのまま編集することはできません。テキストエディタに「credentials.yml.enc」を編集できる設定を加えていきましょう。
テキストエディタを開き、「command+shift+p」を押してコマンドパレットを開きます。続いて「shell」と入力し、「PATH内に’code’コマンドをインストールします」という項目をクリックします。(下図)

shellとは簡単に言うと、ユーザーから送られてきたコマンドをカーネル(OS)に分かるように翻訳してくれるものです。
分かりやすい図があったので、参考に載せておきます。

それでは実際に、「credentials.yml.enc」を編集していきましょう。ターミナルで以下のコマンドを打ち込みます。
↓ ターミナル
$ EDITOR='code --wait' rails credentials:edit
すると、このように復号化された情報がテキストエディタに表示されると思います。

以下の記述のコメントアウトを外してみましょう。
# aws:
# access_key_id: 123
# secret_access_key: 345
↓コメントアウトを外す
aws:
access_key_id: 123
secret_access_key: 345
コメントアウトを外したら、ファイルを保存し閉じます。
それでは今設定した「credentials.yml.enc」を呼び出してみましょう。ターミナルで「rails c」と打ち込み、コンソール画面を開きます。
↓ ターミナル
$ rails c
そのコンソール画面で、以下のコマンドを打ってみてください。すると、先ほど見たsecret_key_baseの中身が表示されるはずです。
↓ ターミナル
irb(main):001:0> Rails.application.credentials[:secret_key_base]
次に、以下のコマンドを打ち込んでみましょう。同じように、先ほど見たaccess_key_idの中身が表示されるはずです。
↓ ターミナル
irb(main):002:0> Rails.application.credentials[:aws][:access_key_id]
carrierwaveで設定する際は以下のような記述になるので覚えておきましょう。
CarrierWave.configure do |config|
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: Rails.application.credentials[:aws][:access_key_id],
aws_secret_access_key: Rails.application.credentials[:aws][:secret_access_key],
region: 'ap-northeast-1'
}
end
↓carrierwaveの設定についてはこちら

master.keyの設定
では次に「master.key」について見ていきましょう。
「master.key」とは、暗号化された「credentials.yml.enc」の記述を復号化するための鍵のようなものです。
「master.key」をメモ帳などに貼り付けておいたら、試しに「master.key」の記述を消してみましょう。「master.key」の記述を消した後に、再びsecret_key_baseの中身を見てみます。
↓ ターミナル
$ rails c
irb(main):001:0> Rails.application.credentials[:secret_key_base]
すると、「ActiveSupport::MessageEncryptor::InvalidMessage 」というエラーが出て内容を参照できないことがわかります。(下図)

では、先ほどの「masster.key」を環境変数にセットしましょう。その後、以下のコマンドを打ち込んでください。
↓ ターミナル
$ export RAILS_MASTER_KEY=(先ほどコピーしたキー)
「master.key」として使用する環境変数名は必ず「RAILS_MASTER_KEY」にしなければなりません。
間違えると動作しないので注意しましょう。
master.keyの管理方法
「master.key」は、間違ってGithubなどパブリックな場所に送られてしまわないように、アプリケーションを新しく立ち上げた時から「.gitignore」に入っています。
この記述を間違って消さないように気をつけてください。
↓.gitignore
# 省略
# Ignore master key for decrypting credentials and more.
/config/master.key
また、チーム開発など複数人で1つのアプリケーションを管理するときは、「master.key」をLINEやSlackなどプライベートな方法で送り合う必要があります。
アプリケーションを立ち上げた人(rails newした人)は、「master.key」を同じチームメンバーに送ることを忘れないようにしましょう。
まとめ
- 「credentials.yml.enc」と「master.key」はconfig以下に格納されている
- 「credentials.yml.enc」を開くコマンドは「$ EDITOR=’code –wait’ rails credentials:edit」
- 「master.key」は「credentials.yml.enc」を復号化するための鍵
- 「master.key」はプライベートな方法で送る必要がある
今回は、Rails5.2以降で追加された「credentials.yml.enc」と「master.key」の使い方について解説しました。アプリケーションをデプロイする上で必須の知識なので、ぜひこの機会に覚えてくださいね。