Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

The story that a non-engeneer create PHP site a...

Avatar for lukamenda26 lukamenda26
December 12, 2019

The story that a non-engeneer create PHP site and laravel site.

This is a document showed at "OTWEB" event on 12/12/2019.

Avatar for lukamenda26

lukamenda26

December 12, 2019
Tweet

Other Decks in Technology

Transcript

  1. ൃදऀʹ͍ͭͯ -ܦྺ • ๺ւಓग़਎ • 2015೥ଔʢେଔʣˠ৽ଔͰҩྍػثϝʔΧʔ΁ब৬ʢӦۀʣ • 2017೥ɿւ֎΁ϘϥϯςΟΞ΁ • 2018೥ɿWebܥͷձࣾP΁ೖࣾʢӦۀʣ

    • 2019೥11݄͸͡Ίɿͱ͋Δ͖͔͚ͬͰʮϓϩάϥϛϯάͷษڧΛຊؾͰ΍Ζ͏ɺΩϟϦΞνΣϯδ͠Α ͏ʂʯͱࢥཱ͍ͪɺPHPͷษڧΛ࢝ΊΔɻ • ಉ݄த०ɿPࣾΛٳ৬ɻ͜ͷ͜Ζʹܝࣔ൘αΠτͷ׬੒ʢCRUDػೳ͋ΓɻPHP ϑϨʔϜϫʔΫͳ͠ʣ • ಉ݄Լ०ɿPࣾΛਖ਼ࣜʹୀ৬ɻ͜ͷ͜ΖʹޱίϛαΠτͷ׬੒ʢCRUDͷ͏ͪCR + ϩάΠϯػೳ PHP ϑϨʔϜϫʔΫ͸Laravel)
  2. ੒Ռ෺1 -ܝࣔ൘ • αΠτ໊ɿܝࣔ൘ • ίϯηϓτɿCRUDػೳΛ໢ཏͨ͠ܝࣔ൘ • ػೳɿ౤ߘ(Create)ɺಡࠐ(Read)ɺฤू (Update)ɺ࡟আ(Delete) •

    URL: https://maysite.herokuapp.com/index.php • ιʔείʔυ: https://gitlab.com/ruka04/bbc/tree/ div14 • ࢖༻ݴޠ/ϑϨʔϜϫʔΫ: PHP / (ͳ͠) • Webαʔό: Apache • σʔλϕʔε(RDBMS): MySQL
  3. ੒Ռ෺2 -ޱίϛαΠτ • αΠτ໊ɿྉཧຊ͓͢͢ΊαΠτɹMyϨγϐϒοΫ • ίϯηϓτɿྉཧܥͷຊͷޱίϛ×ʮ࡞ͬͨΑʯίϝϯ τʢʹΫο˓ύοτͷͭ͘ΕΆɺ΋͘͠͸ΠϯελͰͷ ྉཧࣗຫతͳ౤ߘͱಉٛʣ • ػೳɿ౤ߘ(Create)ɺಡࠐ(Read)ɺϩάΠϯೝূ

    • URL: https://lit-springs-31811.herokuapp.com/home • ιʔείʔυ: https://github.com/lukamenda26/MyRecipeBooks • ࢖༻ݴޠ/ϑϨʔϜϫʔΫ: PHP / Laravel5.5, JavaScript / Vue.js • Webαʔό: Nginx ˎެ։αΠτ͸Apache • σʔλϕʔε(RDBMS): MySQL • ͦͷଞɿ։ൃ؀ڥʹDocker (Laradock)ΛɺϞδϡʔϧ؅ཧ ʹLaravel MixΛ࢖༻
  4. ੒Ռ෺ͷ࡞੒Λ௨ֶͯ͡Μͩ ͜ͱɾۤ࿑ͨ͜͠ͱ • PHPͷؔ਺ • Ϋϥεͷར༻ʢΫϥε࡞੒ɺΠϯελϯε࡞੒ɺϝ ιουͷར༻ɺܧঝʣ • CRUDɹ*2 •

    PDOͷར༻ɹ*3 • MySQLͷར༻ɺίϚϯυ͔ΒͷRDBMૢ࡞ɺσʔλ ϕʔεͷ֓೦ཧղɹ*4 • σʔλϕʔεઃܭʢERਤͷ࡞੒ʣ • Heroku (https://dashboard.heroku.com)Λར༻ͨ͠α Πτެ։ํ๏ɹ*5 • Laravel ϑϨʔϜϫʔΫͷར༻ํ๏ • DockerΛར༻ͨ͠։ൃ؀ڥͷߏஙํ๏ • MVCϞσϧ΁ͷཧղɹ*6 • ը૾ͷૠೖʢ͑ɺfile()ؔ਺ͬͯɺग़ྗ݁Ռ഑ྻͳ ͷɾɾɾʁͰԿճ΋ϋϚͬͨΓʣ • ORϚοϐϯάˍRDBར༻࣌ͷN+1໰୊ˠEager loader ͰରॲՄೳ • ϑϩϯτΤϯυϑϨʔϜϫʔΫͱͷซ༻ɺWebpack ͷ׆༻ • GitͰͷιʔείʔυ؅ཧํ๏ɺ͓ΑͼGithub, GitLab ͷར༻ํ๏
  5. ˎ2 CRUD • ӈਤͷΑ͏ͳERਤͰࣔͤΔσʔλϕʔε ͷ৘ใ܈ʹର͠ҎԼͷૢ࡞Λ͢Δ͜ ͱɻ • Createʢσʔλͷੜ੒ʣINSERT tableA into

    dataB; • ReadʢσʔλͷऔಘʣSELECT hoge FROM tableA • Updateʢσʔλͷߋ৽ʣUPDATE tableA SET price=1000 where id=1; • Deleteʢσʔλͷ࡟আʣDELETE FROM tableA where id=1; ը૾ࢀরݩɿhttps://www.mysql.com/common/ images/products/ MySQL_Workbench_Visual_Design_Windows.gif
  6. ˎ3 PDO • PDO = PHP Data Object = PHP͔Βσʔλϕʔεʹ઀ଓͯ͠ߦ͏ϝ

    ιουΛ·ͱΊͨΫϥεɻ • ϝϦοτ̍ɿυϥΠόʢσʔλϕʔεΛ੍ޚ͢ΔػೳʣΛ੾Γସ ͑Ε͹ɺMySQL͚ͩͰͳ͘PostgreSQL౳ଞͷDBMS΋ෳ਺ૢ࡞Մ ೳɻυϥΠό͸ΞϓϦέʔγϣϯͱDBMSͷؒͷந৅ϨΠϠʢந ৅ʹಉ͡Α͏ͳػೳ΍৘ใ͕·ͱ·͍ͬͯΔɺϨΠϠʹ૚ʣͱ͠ ͯଘࡏ͍ͯ͠ΔͨΊɺ͜ͷΑ͏ͳར༻͕ՄೳͱͳΔɻ • ϝϦοτ̎ɿηΩϡϦςΟͷ޲্ʢϓϦϖΞϝϯτεςʔτϝϯ τɺhtmlspecialcharsؔ਺ͷར༻ʣ ࢀߟɿʮPHP7ʴMariaDBʗMySQLϚελʔϒοΫʯpp218
  7. // create.php $sql_cg = "INSERT INTO posts (name, comment, postdate,

    image, imgsize) VALUES ( :name, :comment, :postdate, :image, :imgsize )"; // dbconnect.php $stmh = $pdo->prepare($sql); $stmh->bindValue(':name', $nm, PDO::PARAM_STR ); $stmh->bindValue(':comment', $cm, PDO::PARAM_STR ); $stmh->bindValue(':postdate', $tm, PDO::PARAM_STR ); $stmh->bindValue(':image', $ip, PDO::PARAM_STR ); $stmh->bindValue(':imgsize', $is[3], PDO::PARAM_STR ); $stmh->execute(); // controller.php <p> <!-- ౤ߘ೔࣌ --> <span><?=htmlspecialchars($value['postdate'], ENT_QUOTES)?> JST. </span> <!-- ໊લ --> <span><?=htmlspecialchars($value['name'], ENT_QUOTES)?> ͞Μ͔Βͷ౤ߘɿ</span> </p> <p> <!-- ςΩετ --> <span><? =htmlspecialchars($value['comment'], ENT_QUOTES)? ></span> </p> ϓϦϖΞϝϯτεςʔτϝϯτͷ ར༻ʢ໊લ෇͖ϓϨʔεϗϧμʣ ɾɾɾSQLΠϯδΣΫγϣϯʢΞϓϦέʔγϣϯ͔ΒͷSQLࢦࣔ Λ্ॻ͖͠ɺຊདྷͷҙਤͱҟͳΔσʔλϕʔεૢ࡞Λߦ͏͜ͱ Ͱɺݸਓ৘ใͳͲͷػີ৘ใͷऔಘͳͲΛૂ͏߈ܸʣͷ๷ࢭ htmlspecialcharsؔ਺ͷར༻ ɾɾɾม਺಺ʹؚ·ΕΔՄೳੑͷ͋ΔHTMLλάΛແޮԽ͠ɺΫϩε αΠτεΫϦϓςΟϯάʢѱҙ͋ΔεΫϦϓτΛର৅ͷαΠτʹ஫ೖ ͠ɺͦͷαΠτΛӾཡͨ͠ਓ͕ͦͷεΫϦϓτͷϦϯΫΛ։͘Α͏࢓ ޲͚Δˠ։͘ͱѱҙ͋ΔผαΠτʹඈͿΑ͏ʹʣͷ๷ࢭ PDO -੒Ռ෺1(ܝࣔ൘)Ͱͷར༻ྫ ࢀরݩɿԼهιʔείʔυʢܝࣔ൘ʣͰ͢ʂ https://gitlab.com/ruka04/bbc/tree/div14
  8. ˎ4 σʔλϕʔε • DB = Database = ίϯϐϡʔλ্Ͱѻ͏৘ใͷू߹ɻେ఍͸ DBMSΛࢦ͍ͯ͠Δɻ •

    DBMS = Database Management System = σʔλϕʔεΛߏங͠ѻ ͏ͨΊͷιϑτ΢ΣΞɻex. MySQL, PostgreSQL, OracleDatabase, Amazon Aurora etc. • RDBMS = Relational Database Management System = ϦϨʔγϣφ ϧɾσʔλϕʔεʢෳ਺ͷදͱͦΕΒͷؔ܎ΛఆٛʣΛѻ͏ DBMS • Cf. RDS = (Amazon) Relational Database Service = AWSͷొ࿥঎ඪɻ AWS্ͰDBMSΛ༰қʹηοτΞοϓɾӡ༻ɾεέʔϦϯάͰ͖ ΔʢΒ͍͠ʣϚωʔδυܕγεςϜɻhttps://aws.amazon.com/jp/rds/ ࢀߟɿʮϓϩʹͳΔͨΊͷWebٕज़ೖ໳ʯpp135,136ɹˎRDSΛআ͘
  9. ˎ5 HEROKU • ແྉͰWebαΠτΛҰൠެ։͢Δ͜ͱ͕Մೳɻͨͩ͠ར༻ʹࡍͯ͠ɺ͍ͭ͘ ͔ؾΛ͚ͭΔ΂͖఺͋Γɻ • MySQLΛར༻͢Δ৔߹͸ɺΞυΦϯʹʮClearDBʯͷࢦఆʢheroku΁ཁΫϨ δοτΧʔυ৘ใొ࿥ʣͱɺʮMySQL Workbenchʯͱ͍͏ΞϓϦΛPCʹΠϯ ετʔϧ͢Δඞཁ͕͋Δʢޙऀ͸ͳͯ͘΋͍͚Δ͔΋ɾɾɾʣɻ

    • LaravelͰ͸ը૾౤ߘ࣌ʹऔಘͨ͠ը૾σʔλΛ storage/app/public/images ʹอ ଘˠ public/images ΁ͷΤΠϦΞεΛઃఆͯ͠ը૾දࣔɹͱ͍͏࢓૊ΈΛਪ঑ ͍ͯ͠Δ͕ɺherokuͩͱͦΕ͕Ͱ͖ͳ͍ʢը૾͕දࣔ͞Εͳ͍ʣɻͷͰɺը ૾ΛϑΥϧμʹอଘΛ΍ΊͯɺόΠφϦσʔλΛ௚઀σʔλϕʔεʹॻ͖ࠐ Ή࢓༷ʹมߋͨ͠ʢͷͰɺ࣮͸Githubʹެ։͍ͯ͠Διʔείʔυͱheroku ʹެ։͍ͯ͠ΔαΠτͷͦΕ͸ɺը૾औಘ෦෼ͷؔ਺͕ҧ͏ͷͰ͢ɾɾɾʂʣ
  10. // app/Services/MakePostService.php // ຊͷ໊લ if(!empty($req->img_pass)) { $make->img_pass = $req->img_pass- >storeAs('public/images',

    'IMG_'.$req- >id . '.jpg'); } else { $make->img_pass = "public/ images/NoImage.png"; } // app/Http/Controllers/ PhotosController.php // ຊͷ໊લ if(!empty($request->img_pass)) { // heroku༻ʹฤूɿड͚औͬͨը૾σʔλ Λbase64ͰΤϯίʔυ // $image = base64_encode(file_get_contents($reque st->image->getRealPath())); $image = base64_encode(file_get_contents($reque st->img_pass)); // $make->img_pass = $request->img_pass->storeAs('public/ images', 'IMG_'.$request->id . '.jpg'); $make->img_pass = $image; } else { $make->img_pass = base64_encode(file_get_contents("image s/NoImage.png")); } // app/Http/Controllers/ MakePostController.php public function confirm(Make $make) { return view('photos/confirm', [ ɹɹɹ// লུɹɹɹɹ 'img_pass' => str_replace('public/', 'storage/', $make->img_pass), ]); } Github্ͷίʔυ https://github.com/lukamenda26/MyRecipeBooks ެ։தαΠτ(Heroku)ͷίʔυ https://lit-springs-31811.herokuapp.com/home ɾɾɾΜʁ͍ͯ͏͔ର৅ϑΝΠϧҧ͘ͳ͍ʁ
  11. ˎ6 MVCϞσϧ • ·ͣ͸σβΠϯͱϩδοΫͷ෼཭ • σβΠϯʹը໘දࣔʢग़ྗʣʹView • ϩδοΫʹॲཧʢDBMSσʔλૢ ࡞ɺ஋ͷ൑ఆ ͳͲɺ౰֘ΞϓϦݻ

    ༗ͷॲཧʣʹϏδωεϩδοΫʹ Model • Ͱ͸Modelͷॲཧ݁ՌʹԠͯ͡View Λม͑Δ࣌͸ʁը໘ΛભҠ͢Δ࣌ ͸ʁ୭͕ͦͷৼΓ෼͚Λ൑அ͢Δʁ ˠ͜ΕΛ୲͏ͷ͕Controller ը૾͸ԼهαΠτ͔Β͓आΓ͠·ͨ͠ɻ IUUQTIBDLFSOPPODPNUIJOLJOHJOSFEVYXIFOBMM ZPVWFLOPXOJTNWDDBE .7$ͷ֓೦ཧղ͓ΑͼαΠτߏங࣌ͷ෼཭ํ๏ʹ͍ͭͯ͸ɺ ॻ੶ʮϓϩʹͳΔͨΊͷ8FCٕज़ೖ໳ʯQQd͕ͱͯ ΋Θ͔Γ΍͍͢Ͱ͢ɻ
  12. ࢀߟॻ੶ • খ৿༟հʰʮϓϩʹͳΔͨΊͷWebٕज़ೖ໳ʯ ――ͳͥɺ͋ͳͨ͸WebγεςϜΛ։ ൃͰ͖ͳ͍ͷ͔ʱɺٕज़ධ࿦ࣾɺ2010೥ɺhttps://www.amazon.co.jp/dp/4774142352/ ref=cm_sw_em_r_mt_dp_U_jCS6DbQRER8YC • Ӭాॱ৳ʰPHP7ʴMariaDBʗMySQLϚελʔϒοΫʱɺϚΠφϏɺ2018೥ɺhttps:// www.amazon.co.jp/dp/4839962340/ref=cm_sw_em_r_mt_dp_U_QES6DbCW523QV •

    ஛ᖒ༗وଞʰPHPϑϨʔϜϫʔΫ Laravel WebΞϓϦέʔγϣϯ։ൃ όʔδϣϯ 5.5 LTSରԠʱɺιγϜɺ2018೥ɺhttps://www.amazon.co.jp/dp/4802611846/ ref=cm_sw_em_r_mt_dp_U_YGS6DbYK27VW6 • mioʰجૅ͔ΒֶͿ Vue.js ʱɺγʔΞϯυΞʔϧݚڀॴɺ2018೥ɺhttps:// www.amazon.co.jp/dp/4863542453/ref=cm_sw_em_r_mt_dp_U_6IS6DbRR49SF0