20210111_アウトプット(Docker/PHP・クレジットカードミニアプリ)
今日行ったこと 10時間
Dockerを使いながらPHPで開発(ドットインストール) 4時間45分
👉模写しながら学ぶ。(昨日の続き。todoリスト完成した😍)クレジットカード決済機能を持ったミニアプリ 5時間15分
👉商品購入機能の前まで完了。
新しい発見
Dockerを使いながらPHPで開発(ドットインストール)
まずは、ドットインストールで模写しながらコードを書き上げていき、どういう風に反映するのか見たあと、コードを見てわからない部分をパーフェクトphpの一番後ろにある索引から調べていく方式でやってみた!☺️
php
はサーバーとのやりとりできるメソッド等が、簡単にhtml
に記入できるからこそ、脆弱性に繋がる部分について対策処理を同時に書いていくと理解。
新しく知った単語
PDO
PHP Data Object
の略。PHP5.1から標準で導入された。
今までは使うデータベースによって、データベースからとってくる関数の名前がバラバラだったが、アクセスを抽象化してPDOという共通のオブジェクトにすることによって、同じ関数を使ってPHPから使っているデータベースにデータを取ってくることが出来るようになったと理解。
プリペアドステートメント
プリペアステートメントとは、値と置き換えるためのプレースホルダを含んだSQLを事前に準備して、SQL実行時に値をプレースホルダに割り当てる機能。
SQL文を使って、データベースとのやりとりをする時に、悪意のある書き換えをされないようにするため、「プレースホルダ」という正式な値が入るまでの仮置き場を作る。 「〇〇を取ってきて!」と命令するときの〇〇について、無害化処理(エスケープ)をしてから、空けておいた「プレースホルダ」に割り当てると理解。 ちなみに、〇〇には、動的パラメーターが入る。
名前 | 意味・役割 |
---|---|
PDOStatementクラス | プリペアドステートメントあるいはSQL実行後の結果セットを表すクラスのことを指す |
prepare()メソッド | こういう風にDBに対して行うよと準備する。実行するとPDOStatementクラスのインスタンスが返ってくる。 |
execute()メソッド | 実行するとデータベースへの指示が実行される(引数にプレースホルダに入る値を指定する) |
またstmt
はstatement
の略で、常套的に利用されると理解。
この方の記事もわかりやすかったです!!
Payjp_app(ミニアプリ)の作成
Payjpの実装は2回目だが、前回と違うところは「ユーザー情報」と「カード情報」を紐づけること。
復習になった部分
マイページを作る場合には、マイページへ飛ぶ
link_to
でプレフィックスを指定する際、引数にcurrent_user
を持たせること。f.text_field
にすることにより、入力可能になること。autofocus: true
を設定することにより、そこへカーソルがあたり入力待ちになる。なので、例えば「マイページ」のリンクへ飛んだ後、最初の編集できるフォームに設定しておくと、親切。アソシエーションのオプションの一つである
dependent: :destroy
は親モデル側に設定する。(親モデルを消すと子モデルも消える)「include_blank: "---"」とすることで、選択前は「---」と表示することが出来る。
JavaScriptで環境変数を扱うには、webpackerを用いること。
% touch config/initializers/webpacker.rb
ファイル内は以下のように編集↓
Webpacker::Compiler.env["PAYJP_PUBLIC_KEY"] = ENV["PAYJP_PUBLIC_KEY"]
JavaScriptのファイルも編集↓
const pay = () => { Payjp.setPublicKey(process.env.PAYJP_PUBLIC_KEY); // 省略
新しく学んだ部分
具体的なカード情報(カード番号など)をそのままデータベースに保存することは法律上禁止されているが、トークン化された情報であれば保存可能であると理解。
そのために、コントローラーにおいて、アプリの
user_id
と紐付けして、トークン化したカード情報を保存する。マイページ等で表示する際は、アプリの
user_id
を元に、PAYJP専用のメソッドを使いアクセスして復元してビュー上に、表現している。cards_controller
におけるdescription:
は、PAYJPの顧客管理の「備考」にあたると理解。例えば、userモデルに会社名などがあればそれを表示させても良いのかもしれないと感じた。現在は一度登録したら修正できない状況である。編集をするにはどうしたらいいだろう?と疑問を感じた。
実験で試してみたら
cards/new.html.erb
にあるカード登録を、users/show.html.erb
に貼り付けすると、DBにはnew
として2枚目以降のカードがDBに保存できた。取り出す際、first
ではそれだとうまく取り出せない・・(工夫が必要だがSecond
やthird
では情報が拾えない、idを指定するのもうまく行かない)というところで時間ぎれになり終わった。削除する方法として、以下のqiitaが良さそうだったので明日以降、やってみようとおもう。
感想
ドットインストール、昔は難しくてわからなかったけれど今行ってみると引数・変数・データのやりとり・HTML・CSSの当たり方など、基本的な部分が成長したからか、楽しかった😍
違う教材を使うことによって新しい切り口からの発見も多かったので楽しい(例パブリックフォルダは外から見える部分のフォルダ、workはサーバー部分のフォルダ、scriptタグをhtmlに当たるファイルの下に書くことによって読み込まれる、忘れかけていたcssのboxsizingなど・・)
今日は中途半端だったPHPを完了させて、クレジットカードのミニアプリ終了後にオリジナルアプリを作成、と計画していたが、そこまで行かなかった。
夜は、焦り・不安による駆られた😭
一番の不安はやったことない機能の実装部分なので、その部分だけ試しに作ろう、そしたら自分が安心すると最終的に考えたため、明日の朝やろう😣!
覚書(12/29計画の見直し)
(1)やるべきこと (2)やりたいこと (3)やれること
(1)やるべきこと
- 卒業要件の完成
(2)やりたいこと
追加実装を学ぶためのミニアプリ作成
オリジナルアプリの作成
PHPの勉強
面白そうだから参加したい・見たい(やめ太郎さんのキータ表彰・yahooイベント)
読書
(3)やれること
メンタル:楽しみながら、ゲーム感覚でいく🎮😎
時間で区切り(達成すればよし)
PHP 一日15分以上
オリジナルアプリ 1日1時間以上
追加実装のミニアプリを作り、引き出しを増やす
優先順位 | 内容(機能) | 締め切り | 達成度 |
---|---|---|---|
1 | AWS S3 | 12/18 | 完了(フリマアプリ)に実装) |
2 | AWS EC2 | 12/24 | 完了(フリマアプリに実装) |
3 | ウィザード形式 | 12/27 | 完了 |
4 | SNS認証 | 12/28 | 完了 |
5 | 複数条件検索 | 12/29 | 完了 |
6 | タグ付 | 12/31 | 完了 |
7 | 画像プレビュー | 1/2 | 完了※フォーク |
8 | 複数枚写真OK | 1/4 | 完了※7に追加実装 |
9 | コメント機能(即時更新) | 1/8 | 完了 |
10 | クレカ登録 | 1/10 | |
11 | パンくず | 1/14 | |
12 | 日本語エラー | 1/18 |
身に付ける力(直近)
PHP7
Docker