[Rails]Rails6以降は秘密情報をgitにプッシュしても大丈夫!

Rails
Railsを使っていて、api用のtokenとかsecretとかを管理したい!

けど、環境変数とかで管理するとgitで管理できないのいやだなーと思っていたら、Rails6からは秘密情報もgitで管理出来るではないか。

なので、どのように管理していくのかをいかに記載する。

秘密情報の管理方法

Rails6では、秘密情報をcredentials.yml.encというファイルで秘密情報を保持して管理する。

このファイルは暗号化されて保存されるのだが、デフォルトで.gitignoreされているファイルのmaster.keyをもとに復号を行う。

このため、master.keycredentialsを編集、取得するサーバや共同者等に配布する必要がある。

秘密情報編集方法

以下のコマンドで秘密情報を編集する。なお、EDITOR変数を最初に指定する必要があるが、使い慣れたEDITORを使用するとよい。

筆者はvimを常用するため、EDITORにはvimを指定している。
EDITOR=vim bundle exec rails credentials:edit

編集画面に入るとyml形式で編集する必要がある。
test:
  hoge: aaaa

なお、credentialsは環境ごとに指定可能で、例えばdevelopment環境で使用する秘密情報を作成したい場合は以下のコマンドを利用する。
EDITOR=vim bundle exec rails credentials:edit --environment development
この場合、config/credentialsフォルダにdevelopment.yml.encファイルが出来上がる

秘密情報利用方法

よく使われるのは、データベースへの接続情報だろう。
credentialsの中身が以下の通りとなっている場合、
db:
  host: aaa
  database: bbb
  username: ccc
  password: ddd
config/database.ymlは以下のようにかける
production:
  <<: *default
  host: <%= Rails.application.credentials.db[:host] %>
  database: <%= Rails.application.credentials.db[:database] %>
  username: <%= Rails.application.credentials.db[:username] %>
  password: <%= Rails.application.credentials.db[:password] %>

コメント