credentials.yml.encを環境ごとに使い分ける【Ruby on Rails】

はじめに

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ファイルで秘匿情報を管理することができます。

導入までの流れ

STEP.1
gemをインストール
group :development, :test do
  gem 'rails-env-credentials'
end
Bundle install

production環境はデフォルトのcredentials.yml.encを使えばいいので、development環境など(と必要ならtest環境なども)に対してインストールするようGemfileに入力してBundle installしましょう。

STEP.2
development環境用のcredentialsファイルを作成する
EDITOR="vim" be rails env_credentials:edit -e development

上記のようなコマンドでdevelopment環境用のcredentialsファイルが生成されます。

コマンド的には『development環境用のcredentialsファイルを編集する』コマンドなのですが、初めてこのコマンドを入力したタイミングでmaster-development.keycredentials-development.yml.encが生成されます。これらがdevelopment環境用のcredentialsファイルとそのmaster keyになります。

また同タイミングできちんとgitignoremaster-development.keyの追加もしてくれる親切設計です。

環境ごとのmaster keyを持っているか、環境変数RAILS_MASTER_KEY_DEVELOPMENTにkeyの内容を設定すれば編集や参照が可能になります。

STEP.3
credentialsを編集・参照する

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
STEP.4
完了!

おわりに

今回は秘匿情報を一元管理できるcredentialsファイルを環境ごとに使い分けできる便利なgem『rails-env-credentials』をご紹介しました。

比較的新しい仕組みなので早めに慣れておきたいですね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください