20201128_アウトプット(商品情報編集機能・商品削除機能・PAYJP)
今日行ったこと 6時間
商品情報編集機能👉LGTM✨
商品削除機能👉LGTM✨
クレジットカード決済機能ミニアプリを作成
新しい発見
PAYJPの実装方法
前提
顧客のお金に関する重要な情報を取り扱う場合には、一定のセキュリティ基準(PCI DSS)をクリアしていなければならない。(大変)
ユーザーが使用するカード会社ごとに事務的手続きをして連携しなければならない。(手間)
これらの理由からECサイト等のアプリケーションは、手数料はかかるが「クレジットカード決済代行サービス」を利用することが多いことを理解。(今回学ぶPAYJP以外にも、「GMOペイメントゲートウェイ」「PayPal」「Stripe」など多種多様に存在。)
トークン化の義務付け
安全に処理をするために、トークン(1回限り有効なパスワード)を、
(1)クライアント側から決済サービス側へ
(2)クライアント側からサーバーサイド側へ
を上記2つに送信して決済処理を行うことが義務付けられている。つまり、アプリケーションのサーバーサイド側でクレジットカード情報を保持してはいけない。
-
これらのルールを踏まえて実装!
上記のような仕組みだと理解。
ポイントだと思ったのは、「アプリケーションのサーバーサイドに保存できないからこその実装方法」
クライアント側からPAYJPにクレジットカード情報を送る際は、JavaScriptのフォームを活用する。
アプリケーションのデータベースにはカラムがなく通常であれば保存・活用できないので、
attr_accessor
を利用する。attr_accessor :token
という形でアプリケーションのモデルに書くことによって、バリデーションをかけらたり、コントローラーのストロングパラメーターの一部としてマージできるようになる。フォームオブジェクトについて
「モデルに対応するテーブルのカラム名以外の属性を扱いたい場合はattr_accessorを用いて追加する」考え方は、フォームオブジェクトにも応用できるとのことだった。
そもそもフォームオブジェクトってなんだろうと思った時に、以下の記事がとても分かりやすかった。コントローラもモデルも肥大化させすぎると複雑になるために、フォーム自体を独立させて機能として持たせるということだった。何故必要なのか、HOWだけでなくWHYが明確でとてもすっきりした。その他の記事も「WHY」が沢山あって、簡潔で分かりやすい!本を購入してみたので届くのが楽しみ♪
感想
どれか一つは、ミスなしでLGTMをもらいたいと思っていたため商品情報編集機能でそれが実現できて嬉しかった。
1週間で5つ機能の実装できた!自分が一番理想としていたペースで実装できたので、自分で自分に驚いた。
何故だろうかと振り返ってみると
①とにかく実装が楽しかった(気がついたら時間が経っていた)
②ここにきて「”HOW”より”WHY”を大事にする」と勉強してきたことが活きてきた(ヒントをもとに実装する際、応用しやすい)
③情報収集(10個の機能の実装のうち、最初と最後の実装が重いと聞いていたのでそれを時間を確保できる土日にあてられた)
④思ったよりも理解していた(実装方法が思いつかなかったのはJavaScriptでそれ以外は”あのあたりを実装すればできるかな”と予測が立てられるくらいまで知識が頭に入っていた)
⑤最終実装で失敗したことは翌日以降の実装で役に立った(どこの実装をしたくて今どこの機能を編集していてエラーが出ているのか一つ一つ捉えながら着実に進めることが一番近道と実感) と振り返ってみて思った。今週55時間15分勉強してた😲「楽しかった」を深ぼってみると、自分の理解が浅かったところの知識に気づき、知ることができた時に知的好奇心が満たされる感じの楽しさだった。
今日、久しぶりのカリキュラムを見ていたけれどベースが分かってからのカリキュラムは、初めて知る概念があっても、昔に比べると一層理解しやすいように感じた。