Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

Takayuki
PRO
February 11, 2020

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

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

Takayuki
PRO

February 11, 2020
Tweet

More Decks by Takayuki

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

  3. ࣗݾ঺հɾձࣾ঺հ

    View Slide

  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(Ϗʔνۦಈ։ൃ)

    View Slide

  5. Copyright Re:Build.inc All Rights Reserved.
    1
    ࣗݾ঺հ

    View Slide

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

    View Slide

  7. Copyright Re:Build.inc All Rights Reserved.
    7
    ɾαʔϏε໊
    Tadoru

    https://tadoru.work/


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

    View Slide

  8. ฐࣾͰͷΤϯδχΞͷҭͯํ

    View Slide

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

    View Slide

  10. ฐࣾͰͷ-BSBWFM࣮຿·Ͱͷ4UFQ
    εΫʔϧ΍ಠֶͰHTMLɺ
    CSSɺJS͘Β͍͸΍͓ͬͯ
    ͍ͯ΋Β͏
    ݚमᶃ
    ੜͷPHPͰಠࣗ
    ϑϨʔϜϫʔΫͰϒϩά੍࡞
    ݚमᶄ
    LaravelͰϒϩά੍࡞
    ݚमᶅ
    LaravelͰ࣮຿
    200࣌ؒ
    150࣌ؒ~300࣌ؒ
    (2ϲ݄ΠϯλʔϯͰݚम)
    ਓʹΑͬͯਐḿΛݟͯมಈ
    300࣌ؒ
    (2ϲ݄ΠϯλʔϯͰݚम)
    OJT։࢝

    View Slide

  11. 2.ฐࣾͰͷະܦݧΤϯδχΞͷҭͯํ
    ݚमͰ͸Լهͷ߲໨Λॏ఺తʹڭ͑Δ
    1.࣭໰ͷ࢓ํ
    2.ࣗݾεέδϡʔϧ؅ཧ
    3.άάΔྗ
    4.ϑϨʔϜϫʔΫʹґଘ͠ͳ͍ਂ͍ཧղ

    View Slide

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

    View Slide

  13. ݚम಺༰

    View Slide

  14. ݚम಺༰ ੜͷPHPͰಠࣗϑϨʔϜϫʔΫͰϒϩά੍࡞
    # PHPͰͷϒϩά࡞੒ݚम
    ## ཁ݅
    - ੜͷPHPͷΈͰ࡞੒͢Δ͜ͱ(ϑϨʔϜϫʔΫ͸࢖Θͳ͍)
    ## ػೳҰཡ
    ɹ- Ϣʔβొ࿥ػೳ
    ɹ- ϩάΠϯػೳ
    ɹ- ϩάΞ΢τػೳ
    ɹ- هࣄొ࿥ػೳ
    ɹ- هࣄ࡟আػೳ
    ɹ- هࣄݕࡧػೳ
    ɹ- هࣄฤूػೳ
    ɹ- هࣄҰཡϖʔδϯάػೳ
    ɹ- ΧςΰϦొ࿥ػೳ
    ɹ- ΧςΰϦ࡟আػೳ
    ɹ- ΧςΰϦฤूػೳ
    ɹ- ΧςΰϦҰཡػೳ
    ɹ- λάొ࿥ػೳ
    ɹ- λά࡟আػೳ
    ɹ- λάฤूػೳ
    ɹ- λάҰཡػೳ
    ## ηΩϡϦςΟରࡦ
    ɹ- CSRFରࡦग़དྷ͍ͯΔࣄ
    ɹ- XSSରࡦ͕ग़དྷ͍ͯΔࣄ
    ɹ- SQLΠϯδΣΫγϣϯରࡦ͕ग़དྷ͍ͯΔࣄ
    ## MVCϞσϧ͕࣮ݱͰ͖͍ͯΔ͜ͱ
    ## ֤ೖྗ߲໨ʹରͯ͠όϦσʔγϣϯ͕ग़དྷ͍ͯΔࣄ(PHPଆͰߦ͏)
    - ඞਢνΣοΫ
    - ਺ࣈνΣοΫ
    - ϝʔϧΞυϨεܗࣜνΣοΫͳͲ
    ## psr-12ʹ४ڌ͍ͯ͠Δ͔
    https://www.php-fig.org/psr/psr-12/
    ## ࢖༻͢Δٕज़
    php7,apache,mysql
    ## ظݶ
    ○/○○·Ͱ

    View Slide

  15. RubyͰݴ͏Sinatraʹ͍ۙͪΐ͏Ͳྑ͍ϑϨʔϜϫʔΫ͕ແ͍(Slim͕͍͕ۙυΩϡ
    ϝϯτ͕গͳ͍)ͷ΋͋ΓɺಠࣗϑϨʔϜϫʔΫͷΧϦΩϡϥϜΛ΍͍ͬͯ·͢ɻ
    PHPجૅ ಠࣗϑϨʔϜϫʔΫ
    Laravel
    - ͔ͬ͠Γͱͨ͠

    νϡʔτϦΞϧ͸·ͩແ͍
    Rubyجૅ Sinatra
    Rails
    - RailsνϡʔτϦΞϧ
    Rails
    Laravel
    ͳͥੜͷ1)1ͰಠࣗϑϨʔϜϫʔΫΛ΍Δͷ͔ʁ
    Rubyͷܰྔ
    ϑϨʔϜϫʔΫ

    View Slide

  16. ͜ΕΒΛڭ͑ͳ͍ͱԿʹࠔΔͷ͔ʁ
    CSRFτʔΫϯͬͯͷͰΤϥʔ͕ग़
    ͯͨΜͰɺτʔΫϯফͯ͠Έ·ͨ͠ʂ
    XSSରࡦͬͯԿͰ͔͢ʁ
    ViewͰมͳؔ਺ݺ͹ΕͯͨͷͰɺফ͓͖ͯ͠
    ·ͨ͠ʂ
    ORMͷfindϝιουͰ্ख͘σʔλ
    औΕͳ͍ΜͰ͕͢ɺSQLͲ͏͢Ε͹
    ྑ͍Ͱ͔͢ʁ

    View Slide

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

    View Slide

  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

    View Slide

  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Λݺͼग़͢

    View Slide

  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ରࡦೖΕΔ
    ɾϩάΠϯνΣοΫೖΕΔ
    ͳͲ

    View Slide

  21. ݚम ੜͷPHPͰಠࣗϑϨʔϜϫʔΫͰϒϩά੍࡞
    ࣗ࡞routingͷྫ
    ແཧ͘Γ΍͍ͬͯ
    Δ͕ɺ΋ͬͱ៉ྷ
    ʹ͸ॻ͚ͦ͏…ɻ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  26. ·ͱΊ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide