えむにわリソース

ITのスキマ的なあれこれを書きます。

Rails6のcredentialをファイルから生成する方法

梅雨時になってすっかりRails触っている昨今ですが、いかがお過ごしでしょうか。

Rails6から導入された credentials 、使ってますか?便利ですね。大事な情報はどんどん隠蔽しましょう。

credentialsが何かの説明は、ここ とか ここ を読むと良いでしょう。

要はサービストークンやパスワードなどの秘密の情報をRailsフレームワーク内で暗号化する仕組みです。

最初に rails credentials:edit とかで秘密鍵を作りながら暗号化する情報を書くのですが、
EDITOR 環境変数にエディタを設定して書き込みます。

秘密にする項目が多いと、面倒ですよね。自動で生成したい!!!

そこで、 credentials:edit をファイルから生成してみましょう。

f:id:m2wasabi:20200613110248p:plain

手順

1. ひな形ファイルを用意する

設定ファイルのひな形になるファイルをどこかに置きましょう。
あるいはこれをsedなんかでカスタマイズしてもいいかもしれません。

.credentials_template.yml

secret_key_base: '0123456789'
mysql:
  host: 'localhost'
  database: 'default'
  user: 'user'
  password: 'secret'
redis:
  url: 'redis://localhost:6379/1'
mail:
  server: 'smtp.example.com'
  domain: 'example.com'
  port: 587
  user: 'mailuser'
  password: 'secret'
  authentication: 'cram_md5'

2. ひな形ファイルからcredentialsを生成する

おもむろに以下のコマンドを実行しましょう。 Linux系のシェル用です。Windows民はWSL使いましょう。

EDITOR="cat ./.credentials_template.yml > "  bundle exec rails credentials:edit -e development

staging, produntion 用の鍵も同様に作ります。 -e の引数変えればできますね。

解説

EDITOR の中の > がミソです。
credentials:edit の中では ${EDITOR} #{tmp_path} みたいなコマンドを発行しているので、
リダイレクトで流し込めばいいのですね。

3. 秘密鍵を持ち帰ろう

環境の新規作成はできました。

任意の環境でデプロイするには秘密鍵を持ち帰らなければなりません。

./config/credentials/*.key にあるので、 プライベートクラウドに上げるなり、アーカイブして持ち帰るなりしましょう。

できあがり

簡単ですね!ではよい自動化ライフを!