はじめに
Rails 5.2から実装されたcredentials.yml.encですが、development, productionのような環境ごとに使い分けることができず、ちょっと不便だなぁと思っていました。
しかしいろいろググってると環境ごとに使い分けができる便利なgemを見つけられたのでそのご紹介です。
参考 Rails 5.2 の Credentials を各環境でも使えるようにする gem を作りましたアジャイルSEの憂鬱credentials.yml.encとは?
そんなに詳しいわけではないのでさらっと。
データベースのユーザー名、パスワード、APIのトークンなど、プログラム中にハードコーディングするのがよろしくない値に関して、環境変数を利用して隠したりすると思います。
しかし環境変数を利用しなくても、credentials.yml.encという暗号化されたファイルで秘匿情報を一元管理し、そこから読み出して利用することができます。
昔はよく似た役割を担っていたsecrets.ymlというものがあったらしいですが、Rails5.2からこのcredentials.yml.encという暗号化ファイルが取って代わったようです。
credentials.yml.encに関して基本的なことなどはこちらの記事↓がとてもわかり易いのでオススメです(Qiita内でもよく紹介されています)。
参考 Rails5.2から追加された credentials.yml.enc のキホンQiita↑の内容はある程度わかってないと以下で書いてあることの意味がわからないかもしれません。
環境ごとに使い分けられるようにするgem『rails-env-credentials』
そんなcredentials.yml.encですが、環境ごとに使い分けることができず、ちょっと使いづらいなぁと思っていたところ、今回ご紹介するgemにたどり着きました。
『rails-env-credentials』というgemですが、こちらを利用するとすごく簡単に環境ごとに異なるcredentialsファイルで秘匿情報を管理することができます。
導入までの流れ
group :development, :test do gem 'rails-env-credentials' end
Bundle install
production環境はデフォルトのcredentials.yml.encを使えばいいので、development環境など(と必要ならtest環境なども)に対してインストールするようGemfileに入力してBundle install
しましょう。
EDITOR="vim" be rails env_credentials:edit -e development
上記のようなコマンドでdevelopment環境用のcredentialsファイルが生成されます。
コマンド的には『development環境用のcredentialsファイルを編集する』コマンドなのですが、初めてこのコマンドを入力したタイミングでmaster-development.key
、credentials-development.yml.enc
が生成されます。これらがdevelopment環境用のcredentialsファイルとそのmaster keyになります。
また同タイミングできちんとgitignore
にmaster-development.key
の追加もしてくれる親切設計です。
環境ごとのmaster keyを持っているか、環境変数RAILS_MASTER_KEY_DEVELOPMENT
にkeyの内容を設定すれば編集や参照が可能になります。
development用のcredentialsファイルを編集するには、先ほどの
EDITOR="vim" be rails env_credentials:edit -e development
です。
値の読み出しはもちろん通常のcredentials.yml.encと同じで
Rails.application.credentials.aws[:access_key_id]
みたいな感じでOKです。
development環境で起動していれば勝手にcredentials-development.yml.enc
を読んでくれるし、production環境で起動していれば勝手にcredentials.yml.enc
を読んでくれるので気にしなくてもうまいことやってくれます。
ファイルの書き方も通常のcredentials.yml.encと同じなので特に言うことはありません。一応サンプルも書いておきます。
# aws: # access_key_id: 123 # secret_access_key: 345 slack: app_id: 123456789 app_secret: abcdefgh # Used as the base secret for all MessageVerifiers in Rails, including the one protecting cookies. secret_key_base: qwertyuiop
おわりに
今回は秘匿情報を一元管理できるcredentialsファイルを環境ごとに使い分けできる便利なgem『rails-env-credentials』をご紹介しました。
比較的新しい仕組みなので早めに慣れておきたいですね。