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
Code language: PHP (php)

これに、例に倣って定数を追加していきます。試しにやってみましょう。

編集して保存

master_user_name: abcdefg
Code language: HTTP (http)

追記したら `:wq`で保存します。

File encrypted and saved.

となったら成功です。

ではプロジェクトから呼び出してみましょう。

呼び出す

コンソールから呼び出してみましょう。

$ rails c > Rails.application.credentials.master_user_name => "abcdefg"
Code language: PHP (php)

出ましたね。さて、これからが新機能の紹介です。次は `test`環境用の credentialを編集してみましょう。

環境を指定する

どうやって環境別のcredentialファイルを編集するのか。それは先ほど行った編集コマンドに環境を指定することで可能になります。

$ EDITOR=vi rails credentials:edit --environment test

先ほどのコマンドに `–environment`オプションを指定します。

ファイルがこのようになっていますでしょうか?先ほど追記した `master_user_name`がありませんね。そうです、先ほどのは `development`環境用で、今回開いたのが `test`環境用だからです。実質的にこれらは別ファイルという扱いになります。

では先ほどを同じように `master_user_id`というキーで追加していきます。

master_user_id: AAABBBBCCCDDDEEEZZZZZZZ
Code language: HTTP (http)

では呼び出してみましょう

test環境用の定数を呼び出す

今回は `test`環境で実行する必要があるので下記のようにコンソールを出します。そして同じようにcredentialの `master_user_name`を取得してみます。

$ RAILS_ENV=test rails c > Rails.application.credentials.master_user_name => "AAABBBBCCCDDDEEEZZZZZZZ"
Code language: PHP (php)

成功しましたね。このように、rails6ではcredentialを編集するときに環境を指定することができるようになりました。

まとめ

rails5では自分で、環境別に定数をネストしていたところを、編集時に環境変数が使えるようになったのは大きなプラスだと思います。便利そうなので使っていきたいと思います。

最後まで読んでくださりありがとうございました。

By user