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()メソッド 実行するとデータベースへの指示が実行される(引数にプレースホルダに入る値を指定する)

またstmtstatementの略で、常套的に利用されると理解。

この方の記事もわかりやすかったです!!

www.promeshi.com



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ではそれだとうまく取り出せない・・(工夫が必要だがSecondthirdでは情報が拾えない、idを指定するのもうまく行かない)というところで時間ぎれになり終わった。

  • 削除する方法として、以下のqiitaが良さそうだったので明日以降、やってみようとおもう。

qiita.com



感想

  • ドットインストール、昔は難しくてわからなかったけれど今行ってみると引数・変数・データのやりとり・HTML・CSSの当たり方など、基本的な部分が成長したからか、楽しかった😍

  • 違う教材を使うことによって新しい切り口からの発見も多かったので楽しい(例パブリックフォルダは外から見える部分のフォルダ、workはサーバー部分のフォルダ、scriptタグをhtmlに当たるファイルの下に書くことによって読み込まれる、忘れかけていたcssのboxsizingなど・・)

  • 今日は中途半端だったPHPを完了させて、クレジットカードのミニアプリ終了後にオリジナルアプリを作成、と計画していたが、そこまで行かなかった。

  • 夜は、焦り・不安による駆られた😭

  • 一番の不安はやったことない機能の実装部分なので、その部分だけ試しに作ろう、そしたら自分が安心すると最終的に考えたため、明日の朝やろう😣!

覚書(12/29計画の見直し)

(1)やるべきこと (2)やりたいこと (3)やれること

(1)やるべきこと

  • 卒業要件の完成

(2)やりたいこと

(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


身に付ける力(ゆくゆく・覚書)

  • ドメイン駆動開発

  • 環境構築

  • 環境変数などのOS知識

  • バージョン対応力

  • データベースをインポートする力・エクスポートする

  • GitHubActions×OpenAPIGenerator(APICilent)