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

フラットなPHPからオブジェクト指向で自動テストのあるPHPへ、そしてフレームワークへ #phpcon2022

Hiromi Hishida
September 24, 2022

フラットなPHPからオブジェクト指向で自動テストのあるPHPへ、そしてフレームワークへ #phpcon2022

PHP Conference Japan 2022 day1 track3 13:20〜のセッションスライドです。
---

https://fortee.jp/phpcon-2022/proposal/ef41a5ba-4efd-4a9f-b6a8-ae456df00541

フラットなPHPの書き方はわかった、では次はフレームワークへ…というとき、どんな基準でフレームワークを選んでいますか?なぜそのフレームワークを使ってアプリケーションを書くと良いのか、理解できていますか?堅牢でメンテナブルなアプリケーションを作るとき、なぜフラットなPHPでは難しいのでしょうか?
入門書や動画講座でPHPの基本文法を学んだあと、盲目的に次のステップとしてフレームワークを学習するのではなく、必要性を実感した上でフレームワークを学習してほしい、と私は常々考えています。
このトークではフラットなペラ1枚のPHPスクリプトから出発して、オブジェクト指向で自動テストのできるPHPアプリケーションへ、そして更にフレームワークを使ったアプリケーションになるまで、コードと考え方をお話しします。

◆含まれるもの

PHPのオブジェクト指向の用語と書き方
ありふれたスクリプトの中に埋め込まれた「仕事」の発見と整理の考え方
PHPUnitを使った自動テストの基本
Symfonyフレームワークを使ってHTTPリクエストを受け取ってHTTPレスポンスを返すまで
◆含まないもの

データベース操作
テーブル設計
Laravelフレームワークの使い方

Hiromi Hishida

September 24, 2022
Tweet

More Decks by Hiromi Hishida

Other Decks in Programming

Transcript

  1. 1)1ͷจ๏ w  QIQͰ͸͡·Δ w ͭͷ໋ྩ͸lzͰऴΘΔ w Λ͚ͭΔͱม਺ w *GจͰ৔߹෼͚

    w GPSจ XIJMFจͰ܁Γฦ͠ w ഑ྻͱGPSFBDI w ؔ਺ఆٛͱݺͼग़͠
  2. 1)1ͷจ๏ w  QIQͰ͸͡·Δ w ͭͷ໋ྩ͸lzͰऴΘΔ w Λ͚ͭΔͱม਺ w *GจͰ৔߹෼͚

    w GPSจ XIJMFจͰ܁Γฦ͠ w ഑ྻͱGPSFBDI w ؔ਺ఆٛͱݺͼग़͠ ΋͏ɺ؆୯ͳϓϩάϥϜͳΒ ॻ͚·͢Ͷ
  3. 1)1ͷจ๏ɺͪΌΜͱϚελʔͨ͠ʁ  QIQ 
 JG J \ 
 FDIPb"` 


    ^FMTF\ 
 FDIPb#` 
 ^ 
 
 J͕ͷͱ͖ɺͷͱ͖ɺͷͱ͖ɺͷͱ͖ͦΕͧΕ"͕ग़Δ͔#͕ग़Δ͔೴಺Ͱγ ϛϡϨʔγϣϯͰ͖·͔͢ʁ
  4. 1)1ͷΦϒδΣΫτࢦ޲  ΦϒδΣΫτͱ͸ w ෺ମɺର৅ɺ໨త w ਓؒ w ෺ w

    ݐ෺ w Πϕϯτ w ੈͷத͸ΦϒδΣΫτͰᷓΕ͍ͯΔ
  5. 1)1ͷΦϒδΣΫτࢦ޲  Ϋϥεͱ࣮ମʢΠϯελϯεʣ w ्ҩࢣΫϥε w ࡳຈࢢͷࢁా्ҩࢣʢΠϯελϯεʣ w ໊ݹ԰ࢢͷాத्ҩࢣʢΠϯελϯεʣ w

    ಈ෺Ϋϥε w ݘΫϥε w νϫϫΫϥε w ϝϦʔͪΌΜʢΠϯελϯεʣ w ౾ࣲΫϥε w ଠ࿠͘ΜʢΠϯελϯεʣ w ՖࢠͪΌΜʢΠϯελϯεʣ
  6. 1)1ͷΦϒδΣΫτࢦ޲  ϝιου w ݘʮ๸͑Δʯ͜ͱ͕Ͱ͖Δ w ϥΠΦϯ΋ʮ๸͑Δʯ͜ͱ͕Ͱ͖Δ w ͔͠͠ɺϥΠΦϯ͸ݘͰ͸ͳ͍ w

    ͜͜Ͱʮ๸͑ΔϝιουΛ͍࣋ͬͯΔ͔ΒϥΠΦϯ΋ݘͱͯ͠ѻ͏ʯͱ͍ ͏ݴޠ΋͋Δ͕ɺ1)1͸ͦ͏Ͱ͸ͳ͍ɻ
  7. 1)1ͷΦϒδΣΫτࢦ޲  1)1Ͱͷද͠ํϓϩύςΟͷಡΈॻ͖ *OUFSGBDF8BMLBCMF\^ DMBTT.BNF4IJCBJNQMFNFOUT8BMLBCMF\ 
 QVCMJDTUSJOHOBNF 
 QSPUFDUFEJOUXFJHIU 


    QSJWBUFa%BUF5JNF*NNVUBCMFCJSUI%BUF 
 ^ NZ%PHOFX.BNF4IJCB  
 NZ%PHOBNFbϙν` 
 FDIPb໊લ`NZ%PHOBNF 
 FDIPbମॏ`NZ%PHXFJHIU 
 FDIPb஀ੜ೔`NZ%PHCJSUI%BUF
  8. 1)1ͷΦϒδΣΫτࢦ޲  1)1Ͱͷද͠ํϝιουͷఆٛ *OUFSGBDF8BMLBCMF\ 
 QVCMJDGVODUJPOXBML WPJE 
 ^ 


    DMBTT%PHJNQMFNFOUT8BMLBCMF\ 
 QSJWBUFJOUIQ 
 QVCMJDGVODUJPOXBML WPJE 
 \ 
 UIJTIQา͘ͱർΕΔͷͰ)1͕ݮΔ 
 ^ 
 QVCMJDGVODUJPOFBU 'PPE*OUFSGBDFGPPE TUSJOH 
 \ 
 UIJTIQ GPPEFOFSHZ৯΂ͨΒ)1͕ճ෮ 
 SFUVSObZVN` 
 ^ 
 ^
  9. 1)1ͷΦϒδΣΫτࢦ޲  1)1Ͱͷද͠ํϝιουͷ࣮ߦ DMBTT%PHJNQMFNFOUT8BMLBCMF\ 
 QVCMJDGVODUJPOXBML WPJE 
 \ 


    ^ 
 QVCMJDGVODUJPOFBU 'PPE*OUFSGBDFGPPE TUSJOH 
 \ 
 SFUVSObZVN` 
 ^ 
 ^ 
 NZ%PHOFX%PH  
 NZ%PHXBML Ҿ਺΋ड͚औΒͣ஋΋ฦ͞ͳ͍ͷͰ͜ΕͰऴΘΓ 
 GFFECBDLNZ%PHFBU EPH'PPE Ҿ਺ͱͯ͠EPH'PPEΛ౉͍ͯ͠ΔɻPOJPO͸౉ͪ͠Όμϝɻ 
 FDIPGFFECBDLZVN͕ฦ͖͍ͬͯͯΔͷͰFDIP͢ΔͱZVN͕ೖ͍ͬͯΔ͜ͱ͕Θ͔Δ
  10. 1)1ͷΦϒδΣΫτࢦ޲  1)1Ͱͷද͠ํಛघͳϝιου DMBTT%PH\ 
 QVCMJDGVODUJPO@@DPOTUSVDU QSJWBUFJOUXFJHIU \^ 
 QVCMJDGVODUJPOJT)FBWZ

    CPPM 
 \ 
 SFUVSOUIJTXFJHIU 
 ^ 
 ^ 
 MJHIU%PHOFX%PH   
 IFBWZ%PHOFX%PH   
 WBS@EVNQ MJHIU%PHJT)FBWZ ͍ܰͷͰGBMTF 
 WBS@EVNQ IFBWZ%PHJT)FBWZ ॏ͍ͷͰUSVF
  11. 1)1ͷΦϒδΣΫτࢦ޲Λੜ͔࣮ͨ͠૷ํ๏  ೔ຊޠͰ࢓ࣄΛ੔ཧ͢Δ w 1045ͳΒ w όϦσʔγϣϯ w όϦσʔγϣϯ͕/(ͳΒ w

    ϑΥʔϜදࣔ w ϝʔϧૹ৴ w ϝʔϧૹ৴͕੒ޭͳΒ w ׬ྃը໘΁ϦμΠϨΫτ w 1045͡Όͳ͔ͬͨΒ w ϑΥʔϜදࣔ ˡ࢓ࣄͷൃಈ͢Δ৚݅ ˡ࢓ࣄͷ໊લ
  12. 1)1ͷΦϒδΣΫτࢦ޲Λੜ͔࣮ͨ͠૷ํ๏  ࢓ࣄΛ͢ΔਓʢΫϥεʣΛ෼͚Δ ೖྗΛ ड͚औΔ ॲཧ ॲཧ ग़ྗΛදࣔ Ϋϥε Ϋϥε

    Ϋϥε Ϋϥε ˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠ
  13. 1)1ͷΦϒδΣΫτࢦ޲Λੜ͔࣮ͨ͠૷ํ๏  ࢓ࣄΛ͢ΔਓʢΫϥεʣΛ෼͚Δ w 1045ͳΒ w όϦσʔγϣϯ w όϦσʔγϣϯ͕/(ͳΒ w

    ϑΥʔϜදࣔ w ϝʔϧૹ৴ w ϝʔϧૹ৴͕੒ޭͳΒ w ׬ྃը໘΁ϦμΠϨΫτ w 1045͡Όͳ͔ͬͨΒ w ϑΥʔϜදࣔ
  14. 1)1ͷΦϒδΣΫτࢦ޲Λੜ͔࣮ͨ͠૷ํ๏  ࢓ࣄΛ͢ΔਓʢΫϥεʣΛ෼͚Δ ೖྗΛ ड͚औΔ ॲཧ ॲཧ ग़ྗΛදࣔ Ϋϥε Ϋϥε

    Ϋϥε Ϋϥε ˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠ
  15. ϑϨʔϜϫʔΫͱ͸ ೖྗΛ ड͚औΔ ॲཧ ॲཧ ग़ྗΛදࣔ Ϋϥε Ϋϥε Ϋϥε Ϋϥε

    ˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠˠ