credential.ymlとmaster_keyについて 簡単なメモ

はじめに

チーム開発においてpayjp導入を担当する事になりました。 導入にあたり、早々にエラーが発生したのですが、そのおかげ(?)で表題について勉強する事が出来ました。

環境 rails (~> 5.2.3)

この記事で言いたいこと(最後の"まとめ"にも記載)

payjp(をはじめとするAPI)を利用するにあたり、APIキーをcredential.ymlという”宝箱”にしまうというやり方がある。(※他に、環境変数から参照する方法もある)

宝箱にしまわれたAPIキーを、宝箱を開けた上で見る(復号化)には、1アプリに1つしかないmaster_keyが必要。(暗号化された文章を、読める形に戻すことを復号化と言う)

エラー発生までの間に実行した内容

クレジットカード決済機能を実装したく、gemfileにgem 'payjp'を追記のうえ、bundle install実行。

payjpのシークレットキーをcredentials.yml.encに追加するため、ターミナルでEDITOR="vi" bin/rails credentials:editを実行。

ターミナル上に表示された内容

Adding config/master.key to store the master encryption key: 26fe97030a3ebb1817f57ba3fff16e2a Save this in a password manager your team can access. If you lose the key, no one, including you, can access anything encrypted with it. create config/master.key

そのしばらく後の文章に

ActiveSupport::MessageEncryptor::InvalidMessageエラーが表示されました。

エラーの内容

たくさんググって調べたのですが、自己解決に至らずメンターさんに相談させて頂きました。

今回の場合は、『今持っている鍵では宝箱が開かないよ!』というエラーである事がわかりました。

私たちのチームでは、私以外のAさんがrails newを実行しアプリを作成しました。

つまりAさんが今回のアプリのmaster_keyの値を把握しているということになります。

(rails newの際にcredential.ymlとmaster_keyが生成されます)

我々はアプリ立ち上げ当初から今までmaster_keyの情報共有をしていませんでした。

本来であれば、master_keyの情報共有をし、(rails newを実行したAさん以外の)メンバーが、各自のconfig/master.keyのファイルの内容を、master_keyの値に上書きしていれば起きていなかったエラーでした。

まとめ

・payjp(をはじめとするAPI)を利用するにはAPIキーを、credential.ymlという”宝箱”にしまうというやり方がある。(※他に、環境変数から参照する方法もある)

・宝箱にしまわれたAPIキーを、宝箱を開けた上で見る(復号化)には、1アプリに1つしかないmaster_keyが必要。(暗号化された文章を、読める形に戻すことを復号化と言う)

・master_keyはrails newした人しか知らないため、チームメンバー間で共有する必要がある。

rails newした人以外のメンバーは各自、エディタ(私たちはVS CODEを使用)上で、master.keyファイルに記載されている値を、共有したmaste_keyの値に書き換える。(メンバー全員がやらないと、API使用にあたり支障が生じる。同じ宝箱の中身(今回はpayjpのAPIキー)を共有したいのであれば鍵を共有する必要がある)

感想

初見のエラーにぶち当たった瞬間は割と絶望的な気分になるものの、

自分でいろいろ調べたり、メンターさんに対して工夫しながら質問した上で頂いた回答を『○○という理解でよろしいですか?』とまとめる作業を経て、エラー解決に至る、というプチ成功体験をすると、大きなインパクトが自分の中で残り知識定着に繋がると感じました。

以上です。

初学者のメモ用記事です。何か誤っている内容等あればご指摘いただければ幸いです。 ご覧いただきありがとうございました!

スクールに入学して早くも1ヶ月半が経過しました。

早い。。あっという間すぎる。。

学習内容のことも色々とありますが、何よりも大きな変化として自分自身でびっくりしているのは、 1日10時間前後の勉強が当たり前になったということ。

学習開始時はまだコロナによる緊急事態宣言が出ていなかったので、スクールでみっちり勉強できたし、 休日はカフェで入り浸って(迷惑な客ですね)勉強していたし。 最近は自宅学習で、自分一人で自宅にいる環境でも集中力を保って勉強できています。 (元々私は自宅学習では全く集中できない人間なので、自宅学習を余儀なくされた時は本当に途方にくれてしまったんですが、 人間慣れるもので、今は全然大丈夫です)

これは自分でも驚きだし、大きな成長と捉えたいです。

ということで毎日コツコツ学習することが定着しました。 ツイッターでの毎日のアウトプット以外にも、別ツールもそろそろ使って行こうということで、 このブログやQiitaも積極的に更新していきたいと思っています。

近況 ・スクールの課題で個人アプリを開発しました。1週間前に、ZOOMを使ってライフコーチの方や同期・後輩の方々にプレゼンしました。  自分の作品の魅力を発表するのにワクワクしました。このブログで今後発表したいです。 ・個人アプリ開発のあと、チーム開発に移行しました。間も無く1週間経過です。  GithubVS Code、slack、LINE、ZOOMを駆使してパーツパーツを組み合わせて1つの作品が仕上がっていくのが楽しいです。  と同時に適度な緊張感があります。

個人開発・チーム開発・その他を通して学んだことをアウトプットしていきたい。

今日はこんな感じです。↓

deviseを用いsign_up,sign_in機能を実装しています。 よくある、パスワードの文字数指定について、どこに何を追記すべきかメモしておきます。

環境 rails (5.2.4.2)

userモデルの:validatableに続けて、password_length: (指定文字数)..128と 記載すればOKです。 ※128の意味は勉強中 7文字以上としたい場合は以下のようになります。

class User < ApplicationRecord
 devise :database_authenticatable, :registerable,
 :recoverable, :rememberable, :validatable, password_length: 7..128
 validates :nickname, :password, :email, :last_name, :first_name, :ruby_last_name, :ruby_first_name, :birthdate, presence: true
 has_many :products
 has_one :ship_address
end

他にもいろいろと方法はあるようですが、比較的わかりやすいもののメモでした。 参考にさせていただいた記事 https://qiita.com/hirokihello/items/862284c60429be5e01cd 誤認識等あればご指摘いただければ幸いです🙇‍♂️

今日はもう休みます。おやすみなさい。

初投稿 〜チャットアプリ制作を終えて〜

今年の3/9からプログラミング学習のスクールに通い始めました。

入学前は、1週間で約60時間以上学習すること自体、

耐えられるのか???とかなり不安になっていたが、

いざ始まると、継続的に学習すること自体むしろ楽しさにすぐに変わりました。

 

社会人になってから今が一番勉強しているし、楽しんで勉強できていると感じます。

1日1日の積み上げをツイッターでは発信していて、ブログも並行して。。と

思っていたのですが余裕が無くて。今日が初投稿になりました。

 

約1ヶ月で学んできたこと

 HTML

 CSS

 Ruby

 Ruby on Rails

 JavaScript

 jQuery

 Git

 Github

 SQL

 RSpec

 Ajax

 インクリメンタルサーチ

 Linuxコマンド

 AWS

 デプロイ

 

この流れで本日デプロイ完了し、レビュー依頼を送ったところです。

1発でLGTMになるかは分からないけど、とりあえずは1段落しました。

 

■楽しく感じるところ

・自分なりにコーディングして、期待した通りの動きをしたとき。

 例えば、railsでメソッド、変数、引数、each文を駆使して、DBにしまってある

 情報をバーっと思い通りに表示できたとき。心の中でガッツポーズ。

・日々学べば学んだ分だけ成長しているという実感。

・同期から質問を受けて、自分の知識の引き出しから、一意的な言葉で整理して

 説明できた時。それで問題解消できた時。

 

■不安に感じていること

・エラー発生時に、自分の知識・カリキュラム・グーグル検索結果をもとに

 なんとか解消しようと考えるが、自力で解消できる確率がまだまだ低い。

 現場に出た際に高い自己解決力が求められるのは明らか。

 どんどん場数を踏んで鍛えていかなくては。

 

今後は学習内容の具体的な中身にも触れていければいいなあと思ってます。

よろしくお願いします。