Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
The story that a non-engeneer create PHP site and laravel site.
Search
lukamenda26
December 12, 2019
Technology
0
190
The story that a non-engeneer create PHP site and laravel site.
This is a document showed at "OTWEB" event on 12/12/2019.
lukamenda26
December 12, 2019
Tweet
Share
Other Decks in Technology
See All in Technology
データベース02: データベースの概念
trycycle
0
150
DevOpsDays History and my DevOps story
kawaguti
PRO
9
2.5k
開発生産性大幅アップ!Postman VS Code拡張機能
nagix
2
370
Azure犬駆動開発の記録/GlobalAzureFukuoka2024_20240420
nina01
1
210
MapLibreとAmazon Location Service
dayjournal
1
150
検証を通して見えてきたTiDBの性能特性
lycorptech_jp
PRO
6
3.7k
よく聞くけど使ったことないソフトウェアNo.1 KafkaとSnowflake
foursue
4
350
web-application-security
matsuihidetoshi
0
150
自己改善からチームを動かす! 「セルフエンジニアリングマネージャー」のすゝめ
shoota
6
360
日本におけるデータエンジニアリングのこれまでとこれから
foursue
16
4.2k
20分で完全に理解するGrafanaダッシュボード
hamadakoji
3
350
私が trocco を推す理由
__allllllllez__
1
210
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
357
22k
Gamification - CAS2011
davidbonilla
76
4.6k
How to train your dragon (web standard)
notwaldorf
73
5.2k
Scaling GitHub
holman
457
140k
Thoughts on Productivity
jonyablonski
58
3.8k
Web development in the modern age
philhawksworth
202
10k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3k
BBQ
matthewcrist
80
8.8k
How To Stay Up To Date on Web Technology
chriscoyier
782
250k
RailsConf 2023
tenderlove
4
540
The Invisible Side of Design
smashingmag
294
49k
From Idea to $5000 a Month in 5 Months
shpigford
377
45k
Transcript
ඇΤϯδχΞ*1 ͕̍ϲ݄ͰPHPͱ LARAVELͷCRUD*2 αΠτΛ࡞Δ·Ͱ 2019/12/12()ɹදࢀಓWebษڧձ Ruka Menda ը૾ެࣜαΠτ͔Βഈआ͍ͯ͠·͢ɻ
༻ޠͷઆ໌ 1. ඇΤϯδχΞɾɾɾITܥͷձࣾʢͱ͍͏͔ɺ͠Webܥձ ͚ࣾͩʁ͘͠ࢲͷલͷ৬͚ͩʁʁʣʹ͓͚ΔɺΤϯδ χΞҎ֎ͷ৬छͷਓʢӦۀetc.ʣͷਓͷ͜ͱɻ࣌ʹ൴Β͕ࣗ ͷ͜ͱΛࣗẍؾຯʹʮඇΤϯδχΞʯͱࣗশ͢Δ͜ͱɻ 2. CRUDɾɾɾΫϥουͱಡΉɻͦΕͧΕCreate, Read, Update,
DeleteΛҙຯ͠ɺ͜ΕΒΛ࣮ͨ͠αΠτʹϒϥβ͔Βͷ ಈ࡞ʹΑΓɺσʔλϕʔεʹରͯ͜͠ͷ̐ͭͷใૢ࡞શͯ ͕࣮ߦՄೳͰ͋ΔαΠτͷ͜ͱΛࢦ͢ʢৄࡉޙड़ʣɻ
ൃදऀʹ͍ͭͯ -ܦྺ • ւಓग़ • 2015ଔʢେଔʣˠ৽ଔͰҩྍػثϝʔΧʔब৬ʢӦۀʣ • 2017ɿւ֎ϘϥϯςΟΞ • 2018ɿWebܥͷձࣾPೖࣾʢӦۀʣ
• 201911݄͡Ίɿͱ͋Δ͖͔͚ͬͰʮϓϩάϥϛϯάͷษڧΛຊؾͰΖ͏ɺΩϟϦΞνΣϯδ͠Α ͏ʂʯͱࢥཱ͍ͪɺPHPͷษڧΛ࢝ΊΔɻ • ಉ݄த०ɿPࣾΛٳ৬ɻ͜ͷ͜Ζʹܝࣔ൘αΠτͷʢCRUDػೳ͋ΓɻPHP ϑϨʔϜϫʔΫͳ͠ʣ • ಉ݄Լ०ɿPࣾΛਖ਼ࣜʹୀ৬ɻ͜ͷ͜ΖʹޱίϛαΠτͷʢCRUDͷ͏ͪCR + ϩάΠϯػೳ PHP ϑϨʔϜϫʔΫLaravel)
ຊLTͷత • స৬׆ಈ • ̍͜͜ϲ݄ͷϓϩάϥϛϯάֶशͷՌใࠂ • αʔόʔαΠυϓϩάϥϛϯάॳֶऀ͕͑ ͓͖ͯ͘ʢʁʣࣝͷհɹ˞ΞϖϯσΟ Ϋεʹͯ
Ռ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
Ռ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Λ༻
Ռͷ࡞Λ௨ֶͯ͡Μͩ ͜ͱɾۤ࿑ͨ͜͠ͱ • 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 ͷར༻ํ๏
ࠓޙΓ͍ͨ͜ͱ • LaravelͷΑΓਂ͍ཧղ • AWSͷษڧʢDBͷෳߏͱίʔυͷؔͳͲʣ • Javaͷֶशʢ੩తܕ͚ݴޠͷֶशʣ • ϙʔτϑΥϦΦαΠτͷ࡞ʢWordPressͷ༻Λ ఆʣ
ͷͨΊͷ̏ݪଇʢϓϩά ϥϛϯάʹݶΒͣʣ 1. ຊਓͷదਖ਼ɾ࠽ೳʢੜ·Ε࣋ͬͨݸੑʣ 2. ྗ 3. ϝϯλʔ 1ͳΜͱͳΒͳ͍ɺͰ̎ͱ̏ࣗ ྗͰͳΜͱ͔Ͱ͖Δʂʂʂ
͓ࣄΛ͝հ͍ͩ͘͞ʂ ͝࿈བྷɺ͓ख͓͔͚͍ͨ͠·͕͢ʮcompassʯˠຊΠϕϯ τͷࢀՃऀҰཡˠʮRukaʯΛ͓୳͍͖ͨͩ͠ɺ͔ͦ͜Β FacebookΞΧϯτˠϝοηϯδϟʔΑΓ͓͍߹Θͤ͘ ͍ͩ͞ʂʢFacebook໓ଟʹΞΫηε͠ͳ͍ͷͰɺ༑ୡਃ ͳͲͰͳ͘ϝοηϯδϟʔͰ͝࿈བྷΛ͓ئ͍͠·͢ʣ ɹࢿྉʹؒҧ͍ʢࢲ͕צҧ͍͍ͯ͠Δ෦ͳͲʣͳͲ͋Ε ࢦఠ͍͚ͯͨͩ͠Δͱ͋Γ͕͍ͨͰ͕͢ɺ୯ͳΔ㒷ᨱதই ইͭ͘ͷͰΊ͍ͯͩ͘͞ɾɾɾɻ ϑΫϩͷࣸਅ͕ҹͰ͢ɻ
बۀઌܾ·Γ·ͨ͠ɻ෭ۀͱ͓ͯ͠͠ख͍Ͱ ͖Δ͜ͱ͕͋͠ΕɺԿଔΑΖ͓͘͠ئ͍͍ͨ͠ ·͢ɻ
ΞϖϯσΟΫε ֓೦ͷઆ໌ ͓͢͢Ίͷॻ੶ͳͲ
ˎ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
ˎ3 PDO • PDO = PHP Data Object = PHP͔Βσʔλϕʔεʹଓͯ͠ߦ͏ϝ
ιουΛ·ͱΊͨΫϥεɻ • ϝϦοτ̍ɿυϥΠόʢσʔλϕʔεΛ੍ޚ͢ΔػೳʣΛΓସ ͑ΕɺMySQL͚ͩͰͳ͘PostgreSQLଞͷDBMSෳૢ࡞Մ ೳɻυϥΠόΞϓϦέʔγϣϯͱDBMSͷؒͷநϨΠϠʢந ʹಉ͡Α͏ͳػೳใ͕·ͱ·͍ͬͯΔɺϨΠϠʹʣͱ͠ ͯଘࡏ͍ͯ͠ΔͨΊɺ͜ͷΑ͏ͳར༻͕ՄೳͱͳΔɻ • ϝϦοτ̎ɿηΩϡϦςΟͷ্ʢϓϦϖΞϝϯτεςʔτϝϯ τɺhtmlspecialcharsؔͷར༻ʣ ࢀߟɿʮPHP7ʴMariaDBʗMySQLϚελʔϒοΫʯpp218
// 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
ˎ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Λআ͘
ˎ5 HEROKU • ແྉͰWebαΠτΛҰൠެ։͢Δ͜ͱ͕Մೳɻͨͩ͠ར༻ʹࡍͯ͠ɺ͍ͭ͘ ͔ؾΛ͚ͭΔ͖͋Γɻ • MySQLΛར༻͢Δ߹ɺΞυΦϯʹʮClearDBʯͷࢦఆʢherokuཁΫϨ δοτΧʔυใొʣͱɺʮMySQL Workbenchʯͱ͍͏ΞϓϦΛPCʹΠϯ ετʔϧ͢Δඞཁ͕͋Δʢޙऀͳ͍͚ͯ͘Δ͔ɾɾɾʣɻ
• LaravelͰը૾ߘ࣌ʹऔಘͨ͠ը૾σʔλΛ storage/app/public/images ʹอ ଘˠ public/images ͷΤΠϦΞεΛઃఆͯ͠ը૾දࣔɹͱ͍͏ΈΛਪ ͍ͯ͠Δ͕ɺherokuͩͱͦΕ͕Ͱ͖ͳ͍ʢը૾͕දࣔ͞Εͳ͍ʣɻͷͰɺը ૾ΛϑΥϧμʹอଘΛΊͯɺόΠφϦσʔλΛσʔλϕʔεʹॻ͖ࠐ Ή༷ʹมߋͨ͠ʢͷͰɺ࣮Githubʹެ։͍ͯ͠Διʔείʔυͱheroku ʹެ։͍ͯ͠ΔαΠτͷͦΕɺը૾औಘ෦ͷ͕ؔҧ͏ͷͰ͢ɾɾɾʂʣ
// 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 ɾɾɾΜʁ͍ͯ͏͔ରϑΝΠϧҧ͘ͳ͍ʁ
ˎ6 MVCϞσϧ • ·ͣσβΠϯͱϩδοΫͷ • σβΠϯʹը໘දࣔʢग़ྗʣʹView • ϩδοΫʹॲཧʢDBMSσʔλૢ ࡞ɺͷఆ ͳͲɺ֘ΞϓϦݻ
༗ͷॲཧʣʹϏδωεϩδοΫʹ Model • ͰModelͷॲཧ݁ՌʹԠͯ͡View Λม͑Δ࣌ʁը໘ΛભҠ͢Δ࣌ ʁ୭͕ͦͷৼΓ͚Λஅ͢Δʁ ˠ͜ΕΛ୲͏ͷ͕Controller ը૾ԼهαΠτ͔Β͓आΓ͠·ͨ͠ɻ IUUQTIBDLFSOPPODPNUIJOLJOHJOSFEVYXIFOBMM ZPVWFLOPXOJTNWDDBE .7$ͷ֓೦ཧղ͓ΑͼαΠτߏங࣌ͷํ๏ʹ͍ͭͯɺ ॻ੶ʮϓϩʹͳΔͨΊͷ8FCٕज़ೖʯQQd͕ͱͯ Θ͔Γ͍͢Ͱ͢ɻ
Before MVCແཧղͰߏங͢Δͱɾɾɾ FAT CONTROLLER • Controllerʹͨ͘͞ΜͷॲཧΛॻ͖ɺControllerʹϏδωεϩδοΫͷ࣮ߦ ͔ΒViewͷৼΓ͚·ͰɺϚϧνλεΫΛഎෛΘͤΔ͜ͱˠϓϩάϥϛϯ άͷੈքͰΑΖ͘͠ͳ͍ࣄଶʢϝϯςφϯε͕ͮ͠Β͘ͳΔͳͲʣ • ࠓճɺServiceͳΔͷΛ৽ͨʹ࡞͠ɺcontrollerʹͨ͘͞Μॻ͍͍ͯ
ͨॲཧΛͦͷαʔϏεҠߦ͢Δ͜ͱͰରॲ͠·ͨ͠ʢherokuͰެ։͠ ͍ͯΔαΠτ·ͩमਖ਼Ͱ͖͓ͯΒͣɺfat controllerͷ··Ͱ͢ɾɾɾʣ Model Controller View After Model Controller View Service
ࢀߟॻ੶ • খ༟հʰʮϓϩʹͳΔͨΊͷ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