PHP未経験者を育てる独自フレームワークの作り方

02886e95c50822b9aa2552da1e518491?s=47 Takayuki
February 11, 2020

 PHP未経験者を育てる独自フレームワークの作り方

弊社、株式会社Re:Buildは現在、沖縄拠点で全社員で7人。エンジニアインターン1人。そのうち正社員でエンジニアが6人いますが、ほぼ全員Web開発初心者の状態で入社しました。
また、大学生インターンや若手Web開発初心者の採用も積極的に行ってきました。採用後は7人という少人数の会社ながらも3ヶ月の研修カリキュラムをみっちり行って頂き、Laravelで実務開発するまでサポートしてきました。実際に昨年の1月にWeb開発初心者で入社した方は3ヶ月の研修を経て、今では設計から開発、Laravel、Vue.jsでのSPAのWebアプリ開発までこなすまで成長してくれています。

02886e95c50822b9aa2552da1e518491?s=128

Takayuki

February 11, 2020
Tweet

Transcript

  1. PHPະܦݧऀΛҭͯΔ ಠࣗϑϨʔϜϫʔΫͷ࡞Γํ ླ໦޹೭

  2. Agenda 2.ฐࣾͰͷΤϯδχΞͷҭͯํ 1.ࣗݾ঺հɾձࣾ঺հ 3.ݚम಺༰

  3. ࣗݾ঺հɾձࣾ঺հ

  4. Copyright Re:Build.inc All Rights Reserved. ࣗݾ঺հ 1 ◆໊લ ླ໦ ޹೭(Suzuki

    Takayuki) ※ಉ੏ಉ໊ଟͯ͘ࠔͬͯ·͢ɻɻɻ ◆ࣗݾ঺հ ɾ1990೥ɺਆಸ઒ݝੜ·Εɻ ɾࣾձਓʹͳ͔ͬͯΒɺϓϩάϥϛϯάΛ࢝ΊΔɻ ɾ2015೥ʹϑϧεϐʔυʹೖࣾ͠ɺ2017೥ʹಠཱɻ ɾϑϦʔϥϯεͰϦϞʔτϫʔΫΛ൒೥΄Ͳ΍ͬͨޙʹԭೄͰىۀ ◆झຯ ίεϓϨɺԻָϥΠϒɺϚϥιϯେձʹग़Δɺ໺ٿ؍ઓ ◆εΩϧ ɾPHP, Symfony2,CakePHP3,Laravel6 ɾJavaScript, backbone.js,Angular4,Vue.js,Nuxt.js BDD(Ϗʔνۦಈ։ൃ)
  5. Copyright Re:Build.inc All Rights Reserved. 1 ࣗݾ঺հ

  6. Copyright Re:Build.inc All Rights Reserved. ձࣾ঺հ 1 ◆ձ໊ࣾ גࣜձࣾRe:Build ◆ॅॴ

    ԭೄݝಹ೼ࢢٱໜ஍2-2-2 λΠϜεϏϧ ◆ࣄۀ಺༰ ɾࣗࣾWEBαʔϏεͷاըɾ։ൃɻ ɾडୗ։ൃ ◆ࣾһ 7໊ ◆ΤϯδχΞͷಇ͖ํ ϦϞʔτϫʔΫՄೳͳࣗ༝ͳಇ͖ํΛਪ঑ͯ͠·͢ʂ
  7. Copyright Re:Build.inc All Rights Reserved. 7 ɾαʔϏε໊ Tadoru
 https://tadoru.work/
 


    ɾγεςϜ֓ཁ ΤϯδχΞಛԽܕͷ ϦϑΝϥϧ Ϋϥ΢υιʔγϯά 1 ձࣾ঺հ
  8. ฐࣾͰͷΤϯδχΞͷҭͯํ

  9. ೖࣾ࣌ͷ͍͍ͩͨͷଐੑɾεΩϧηοτ ୈೋ৽ଔͰ20୅લ൒ ͘Β͍͕த৺ HTML,CSS,JS͸ษڧ͍ͯ͠Δɻ ϓϩάϥϛϯάεΫʔϧͷॳڃฤ͸ ऴΘ͍ͬͯΔ͘Β͍ͷΠϝʔδ ࣾձਓͷجૅεΩϧ͸͋Δɻ ΤϯδχΞͱͯ͠ͷ։ൃ࣮຿͸ະܦ ݧɻ

  10. ฐࣾͰͷ-BSBWFM࣮຿·Ͱͷ4UFQ εΫʔϧ΍ಠֶͰHTMLɺ CSSɺJS͘Β͍͸΍͓ͬͯ ͍ͯ΋Β͏ ݚमᶃ ੜͷPHPͰಠࣗ ϑϨʔϜϫʔΫͰϒϩά੍࡞ ݚमᶄ LaravelͰϒϩά੍࡞ ݚमᶅ

    LaravelͰ࣮຿ 200࣌ؒ 150࣌ؒ~300࣌ؒ (2ϲ݄ΠϯλʔϯͰݚम) ਓʹΑͬͯਐḿΛݟͯมಈ 300࣌ؒ (2ϲ݄ΠϯλʔϯͰݚम) OJT։࢝
  11. 2.ฐࣾͰͷະܦݧΤϯδχΞͷҭͯํ ݚमͰ͸Լهͷ߲໨Λॏ఺తʹڭ͑Δ 1.࣭໰ͷ࢓ํ 2.ࣗݾεέδϡʔϧ؅ཧ 3.άάΔྗ 4.ϑϨʔϜϫʔΫʹґଘ͠ͳ͍ਂ͍ཧղ

  12. 2.ฐࣾͰͷະܦݧΤϯδχΞͷҭͯํ ࣾ಺Ͱͷڭҭମ੍ɺจԽͮ͘Γʹ͍ͭͯͷ޻෉ 1.ݚम୲౰ऀΛଐਓԽͤ͞ͳ͍ɻϝΠϯ୲౰ऀ͸͚ͭΔ ͕ɺ୭Ͱ΋ڭ͑ͯOKͷମ੍ʹ͢Δɻ 2.ձࣾͱͯ͠৽ਓʹڭ͑ΔจԽΛఆணͤ͞Δɻ 3.৽ਓڭҭΛධՁ੍౓ʹ΋૊ΈࠐΉɻ 4.ݚमੜʹݚमҎ֎ͷࡶ຿ΛͳΔ΂͘ɺ΍Βͤͳ͍ɻ

  13. ݚम಺༰

  14. ݚम಺༰ ੜͷPHPͰಠࣗϑϨʔϜϫʔΫͰϒϩά੍࡞ # PHPͰͷϒϩά࡞੒ݚम ## ཁ݅ - ੜͷPHPͷΈͰ࡞੒͢Δ͜ͱ(ϑϨʔϜϫʔΫ͸࢖Θͳ͍) ## ػೳҰཡ

    ɹ- Ϣʔβొ࿥ػೳ ɹ- ϩάΠϯػೳ ɹ- ϩάΞ΢τػೳ ɹ- هࣄొ࿥ػೳ ɹ- هࣄ࡟আػೳ ɹ- هࣄݕࡧػೳ ɹ- هࣄฤूػೳ ɹ- هࣄҰཡϖʔδϯάػೳ ɹ- ΧςΰϦొ࿥ػೳ ɹ- ΧςΰϦ࡟আػೳ ɹ- ΧςΰϦฤूػೳ ɹ- ΧςΰϦҰཡػೳ ɹ- λάొ࿥ػೳ ɹ- λά࡟আػೳ ɹ- λάฤूػೳ ɹ- λάҰཡػೳ ## ηΩϡϦςΟରࡦ ɹ- CSRFରࡦग़དྷ͍ͯΔࣄ ɹ- XSSରࡦ͕ग़དྷ͍ͯΔࣄ ɹ- SQLΠϯδΣΫγϣϯରࡦ͕ग़དྷ͍ͯΔࣄ ## MVCϞσϧ͕࣮ݱͰ͖͍ͯΔ͜ͱ ## ֤ೖྗ߲໨ʹରͯ͠όϦσʔγϣϯ͕ग़དྷ͍ͯΔࣄ(PHPଆͰߦ͏) - ඞਢνΣοΫ - ਺ࣈνΣοΫ - ϝʔϧΞυϨεܗࣜνΣοΫͳͲ ## psr-12ʹ४ڌ͍ͯ͠Δ͔ https://www.php-fig.org/psr/psr-12/ ## ࢖༻͢Δٕज़ php7,apache,mysql ## ظݶ ◦/◦◦·Ͱ
  15. RubyͰݴ͏Sinatraʹ͍ۙͪΐ͏Ͳྑ͍ϑϨʔϜϫʔΫ͕ແ͍(Slim͕͍͕ۙυΩϡ ϝϯτ͕গͳ͍)ͷ΋͋ΓɺಠࣗϑϨʔϜϫʔΫͷΧϦΩϡϥϜΛ΍͍ͬͯ·͢ɻ PHPجૅ ಠࣗϑϨʔϜϫʔΫ Laravel - ͔ͬ͠Γͱͨ͠
 νϡʔτϦΞϧ͸·ͩແ͍ Rubyجૅ Sinatra

    Rails - RailsνϡʔτϦΞϧ Rails Laravel ͳͥੜͷ1)1ͰಠࣗϑϨʔϜϫʔΫΛ΍Δͷ͔ʁ Rubyͷܰྔ ϑϨʔϜϫʔΫ
  16. ͜ΕΒΛڭ͑ͳ͍ͱԿʹࠔΔͷ͔ʁ CSRFτʔΫϯͬͯͷͰΤϥʔ͕ग़ ͯͨΜͰɺτʔΫϯফͯ͠Έ·ͨ͠ʂ XSSରࡦͬͯԿͰ͔͢ʁ ViewͰมͳؔ਺ݺ͹ΕͯͨͷͰɺফ͓͖ͯ͠ ·ͨ͠ʂ ORMͷfindϝιουͰ্ख͘σʔλ औΕͳ͍ΜͰ͕͢ɺSQLͲ͏͢Ε͹ ྑ͍Ͱ͔͢ʁ

  17. ϒϩάΞϓϦ࡞੒ͷաఔ ①PHPͰϑΥʔϜ͔ΒσʔλΛड͚औͬͯΈΔʢGETͱPOSTʣ ②ঃʑʹϒϩάΞϓϦΛ࡞͍ͬͯ͘ɻ ③MVCԽ͢Δ ④ηΩϡϦςΟରࡦΛࣗ࡞ͰೖΕΔ ϨϏϡʔ ϨϏϡʔ

  18. ݚम ੜͷPHPͰಠࣗϑϨʔϜϫʔΫͰϒϩά੍࡞ index.php router controller Model View Database 1 2

    3 4 5 9 6 7 8 DB͔ΒσʔλΛऔಘ σʔλΛऔಘ όΠϯυͨ͠HTMLΛฦ٫ σʔλΛHTMLʹόΠϯυ HTMLΛฦ٫ ࠷ॳ͸index.phpΛ ܦ༝͢Δ /loginͷURL͕ ୟ͔ΕΔ URLʹඥͮ͘ Controller͸ݺ͹ΕΔ શମߏ੒ਤ ਤͷࢀߟ:https://railstutorial.jp/chapters/toy_app?version=4.2
  19. ݚम ੜͷPHPͰಠࣗϑϨʔϜϫʔΫͰϒϩά੍࡞ index.php router controller Model View Database 1 2

    3 4 5 9 6 7 8 DB͔ΒσʔλΛऔಘ σʔλΛऔಘ όΠϯυͨ͠HTMLΛฦ٫ σʔλΛHTMLʹόΠϯυ HTMLΛฦ٫ ࠷ॳ͸index.phpΛ ܦ༝͢Δ /loginͷURL͕ ୟ͔ΕΔ URLʹඥͮ͘ Controller͸ݺ͹ΕΔ શମߏ੒ਤ ਤͷࢀߟ:https://railstutorial.jp/chapters/toy_app?version=4.2 ໾ׂ ɾΤϯτϦʔϙΠϯτ ɾΦʔτϩʔυ ɾrouterΛݺͼग़͢
  20. ݚम ੜͷPHPͰಠࣗϑϨʔϜϫʔΫͰϒϩά੍࡞ index.php router controller Model View Database 1 2

    3 4 5 9 6 7 8 DB͔ΒσʔλΛऔಘ σʔλΛऔಘ όΠϯυͨ͠HTMLΛฦ٫ σʔλΛHTMLʹόΠϯυ HTMLΛฦ٫ ࠷ॳ͸index.phpΛ ܦ༝͢Δ /loginͷURL͕ ୟ͔ΕΔ URLʹඥͮ͘ Controller͸ݺ͹ΕΔ શମߏ੒ਤ ਤͷࢀߟ:https://railstutorial.jp/chapters/toy_app?version=4.2 ޻෉఺ ɾCSRFରࡦೖΕΔ ɾϩάΠϯνΣοΫೖΕΔ ͳͲ
  21. ݚम ੜͷPHPͰಠࣗϑϨʔϜϫʔΫͰϒϩά੍࡞ ࣗ࡞routingͷྫ ແཧ͘Γ΍͍ͬͯ Δ͕ɺ΋ͬͱ៉ྷ ʹ͸ॻ͚ͦ͏…ɻ

  22. ݚम ੜͷPHPͰಠࣗϑϨʔϜϫʔΫͰϒϩά੍࡞ Modelͷྫ ඞཁͳDB઀ଓͷઃ ఆͳͲ͸਌ͷModel ʹ·ͱΊΔɻ ܧঝ

  23. ݚम ੜͷPHPͰಠࣗϑϨʔϜϫʔΫͰϒϩά੍࡞ ׬੒Πϝʔδ

  24. ݚम ੜͷPHPͰಠࣗϑϨʔϜϫʔΫͰϒϩά੍࡞ ׬੒Πϝʔδ

  25. ݚम ੜͷPHPͰಠࣗϑϨʔϜϫʔΫͰϒϩά੍࡞ ׬੒Πϝʔδ

  26. ·ͱΊ

  27. ·ͱΊ ɾϑϨʔϜϫʔΫʹґଘ͠ͳ͍ਂ͍PHPͷཧղͯ͠΋Β͍ɺ௕ظతͳ໨ઢ Ͱ༏लͳΤϯδχΞΛҭͯΔɻ ɾখن໛ͷձࣾͰະܦݧΤϯδχΞΛड͚ೖΕΔ৔߹͸ɺ ࣾ಺Ͱͷڭҭମ੍΍จԽͮ͘Γ͕େ੾ɻ ɾฐࣾͰͷPHPಠࣗϑϨʔϜϫʔΫݚम͸ΦʔμʔϝΠυཁૉ͕ڧ͍ͷͰ େਓ਺Ͱͷݚम͸޲͍͍ͯͳ͍͕ɺ࣮֬ʹ1~2ਓΛݚम͢Δʹ͸ޮՌΛൃ ش͢Δͱࢥ͍·͢ɻ

  28. ࠂ஌ 2020೥6~7݄ࠒʹ ϑϩϯτΤϯυΧϯϑΝ ϨϯεԭೄΛ։࠵༧ఆʂ

  29. ࠂ஌ 2020೥10݄ࠒʹ PHPΧϯϑΝϨϯε ԭೄΛ։࠵༧ఆʂ