Encrypted Credentials を噛み砕く

## 近況報告
●自己投資について
　自己投資は，自分を高めるために自分に対して時間ないしはお金を費やす行為を自分は定義しています。そして成果は時間とお金のかけ算です。時間の最低値は０，お金の最低値は１です。いくらいいサービスを受けても時間を時間を費やさなければ意味がないです。

　自己投資に関してもっとも大切なのは「おかね」の部分の考え方でだと思います。時間は誰でも生み出すことができますが，ここでのお金は生み出すものではなく消費するものです。やはりせっかく得たものを消費すると考えてしまうと金銭投資に躊躇が生じてしまいます。しかし，その投資の先に投資をペイできる自分がいると考えられたら，未来の自分の栄養になるものと考えられます。ひとときの消費を躊躇い，時間を１０にするか，未来の自分に爆速で近くためにお金を５投資して時間を２にし，残った８の時間を他の努力にあてるか。一概に掛け算ではないし独学は悪じゃないけど，常に考えていくべきことですよね。私は後者を選んでテックキャンプに投資しました。

# 今回のお題
Encrypted Credentials ってなによ

## こういうこと
Encrypted（暗号化された） Credentials（資格情報）
rails5.2よりAPIキーなどセキュリティ的に外部に公開してはいけない値の管理をおこなう機能。

## 環境
rails 5.2.1
VSコードで実行

## 噛み砕くよ

### railsのリファレンスより引用

>Rails 5.1 introduced encrypted secrets, which **gives you two places to put your secrets -- secrets.yml and secrets.yml.enc**. This causes a bit of confusion on when you should use normal secrets or encrypted secrets.

>Rails 5.2 **replaces both secrets with encrypted credentials**. You cannot use plain text credentials. There's only credentials.yml.enc.

>**Encrypted Credentials**
**To use encrypted credentials, you need a key. Without this encryption key, you won't be able to decrypt your credentials**. It's safe to commit the encrypted file to your repository but you should never commit the encryption key.

>**The key, located on config/master.key is created when you run rails new**. It's also added to .gitignore so it doesn't get committed to your repository.

>The encrypted credentials are saved on config/credentials.yml.enc. **Don't edit the file directly.** To add credentials, run

>**bin/rails credentials:edit**
**Your text editor will open an unencrypted version of your credentials**. If you don't have EDITOR set, you can run EDITOR=vi bin/rails credentials:edit or use your favorite text editor.

>After saving the file, the encrypted version will be saved to config/credentials.yml.enc.
 
こんな感じ。いきなりなんだよってかんじですよね。箇条書きすると↓
・今までsecretファイルが２つあったけど１つに統一できるようにしたよ。
・わざわざ作らなくてもrails newすれば自動生成するよ。
・ファイルはgitignoreで指定しとくね。
・編集するときはrails credentials:editって打ってね。編集方法はおまかせ。

補足
・５．２の環境でもsecret.ymlは利用できるよ。
・credentials.yml.encに認証情報は環境変数で保存される。
・↑を編集するにはcredentialsファイルごとに存在するmaster.keyが必要だよ。
・もし無くしたらcredentialsファイルを削除してbin/rails credentials:editすると再度作り直せるよ。⇨**認証エラーが生じた際に有効**

### 扱い方
vsコード　⇨あらかじめVSコード上で環境変数を変換して表示する機能を付与（Command + Shift + Pのちにshellと記入）

・編集方法

```アプリケーションのディレクトリ.
'code --wait' rails credentials:edit
```
'code --wait' は編集する場所を指定。今回はVSコード

・値の取り出し方

```terminal.
$ rails c
$ Rails.application.credentials[:secret_key_base]
⇨読み込みたい値を[]内に
$ Rails.application.credentials[:aws][:access_key_id] 
⇨ネストされている場合
```

### 本番環境

**本番環境の環境変数ファイルに直打ち**
ローカルの環境変数のファイルはGithubにないので，本番環境にありません。認証を得るためにローカルのcredentials.yml.encにアクセスしますが，このファイルはmaster.keyの情報がなければ解錠しません。ローカル環境のmaster.keyは本番環境から参照できません。なので，本番環境にマスターキーの情報を直打ちします。

```EC2.
$ sudo vim /etc/environment
⇨i
⇨RAILS_MASTER_KEY='master.keyの値'
⇨:wq
$ exit
⇨設定を反映させるために一回ログアウトする。
$ env | grep RAILS_MASTER_KEY
⇨EC2で反映できたらOK
```

## おわりに
自分が出会ったエラーについて書いておきます
・rails sで認証エラー
　⇨コラボレーターはクローンした際，各々マスターキーが生成される。これらはクローンであっても他のクローンの起動では使うことはできない（同じ形をした家でも他人の鍵で自宅に入られたらイヤですよね）。もし認証エラーが生じたら，credentials.yml.encを消してrails credentials:editで再生成すればよし。
・デプロイ時のエラー
　⇨アセットコンパイルらへんで生じるかも。ローカル環境のマスターキーと本番環境のマスターキーが異なっている可能性があるので確認する。

微量でも参考になったらLGTM，ご指導はコメント欄にお願いします！