Rails5(確か5.2から?)から新しく入った `credential`機能があります。
これは、定数などを暗号化して格納してくれる機能です。例えば部外者から見られたくないパスワードなどの情報をここに保管することでセキュリティを高めることができます。
なんと、rails6ではこのcredentialファイルが環境別に分けることができるようになりました。ので、そのやり方をまとめていきたいと思います。
credentialファイルの編集
まずはcredentialファイルの編集方法についてまとめます。
暗号化がかかっているファイルをどのように編集するのでしょうか?
編集コマンド
railsのコマンドでしか編集ができないようになっています。
編集コマンドは下記です。このコマンドを打つと vi
が立ち上がり、credentialファイルが編集できるようになります。
$ EDITOR=vi rails credentials:edit
デフォルトで下記のようになっている(はず)。
# aws:
# access_key_id: 123
# secret_access_key: 345
これに、例に倣って定数を追加していきます。試しにやってみましょう。
編集して保存
master_user_name: abcdefg
追記したら `:wq`で保存します。
File encrypted and saved.
となったら成功です。
ではプロジェクトから呼び出してみましょう。
呼び出す
コンソールから呼び出してみましょう。
$ rails c
> Rails.application.credentials.master_user_name
=> "abcdefg"
出ましたね。さて、これからが新機能の紹介です。次は `test`環境用の credentialを編集してみましょう。
環境を指定する
どうやって環境別のcredentialファイルを編集するのか。それは先ほど行った編集コマンドに環境を指定することで可能になります。
$ EDITOR=vi rails credentials:edit --environment test
先ほどのコマンドに `–environment`オプションを指定します。
ファイルがこのようになっていますでしょうか?先ほど追記した `master_user_name`がありませんね。そうです、先ほどのは `development`環境用で、今回開いたのが `test`環境用だからです。実質的にこれらは別ファイルという扱いになります。
では先ほどを同じように `master_user_id`というキーで追加していきます。
master_user_id: AAABBBBCCCDDDEEEZZZZZZZ
では呼び出してみましょう
test環境用の定数を呼び出す
今回は `test`環境で実行する必要があるので下記のようにコンソールを出します。そして同じようにcredentialの `master_user_name`を取得してみます。
$ RAILS_ENV=test rails c
> Rails.application.credentials.master_user_name
=> "AAABBBBCCCDDDEEEZZZZZZZ"
成功しましたね。このように、rails6ではcredentialを編集するときに環境を指定することができるようになりました。
まとめ
rails5では自分で、環境別に定数をネストしていたところを、編集時に環境変数が使えるようになったのは大きなプラスだと思います。便利そうなので使っていきたいと思います。
最後まで読んでくださりありがとうございました。