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

ちいさくPHPUnitをつくり、仕組みと拡張ポイントを探る

Avatar for asumikam asumikam
June 28, 2025
170

 ちいさくPHPUnitをつくり、仕組みと拡張ポイントを探る

2025/06/28 PHP Conference Japan 2025
https://fortee.jp/phpcon-2025/proposal/dc468fc0-d847-4ee5-8b3c-6a9ece13997e

リンク集

身近なツールで始めるコードリーディング入門~「PHPUnit」の場合
https://codezine.jp/article/detail/20106

フレームワークで見るObserverパターン
https://fortee.jp/phperkaigi-2022/proposal/ce8e0d69-a885-4b22-946b-b184fa735dc5

プロダクトコードとOSSに学ぶ例外処理の選択肢 — キャッチするのか、投げっぱなしにするのか
https://speakerdeck.com/asumikam/learn-exception-by-oss

Avatar for asumikam

asumikam

June 28, 2025
Tweet

More Decks by asumikam

Transcript

  1. 1)16OJU͸৭Μͳ͜ͱ͕Ͱ͖Δ w ଟ༷ͳΞαʔγϣϯͰॊೈʹݕূͰ͖Δ w ϞοΫ΍ελϒΛ࢖ͬͯςετΛ૊ΈཱͯΒΕΔ w Τϥʔ΍ྫ֎ͷൃੜ΋֬ೝͰ͖Δ w ςετલޙͷॲཧΛϥΠϑαΠΫϧϑοΫͰ௥ՃͰ͖Δ w

    ΧόϨοδ΍ϨϙʔτΛࣗಈͰग़ྗͰ͖Δ w +40/΍+6OJU9.-ͳͲͷܗࣜͰ݁ՌΛग़ྗͰ͖Δ w ಠࣗΞαʔγϣϯΛఆ֦ٛͯ͠ுͰ͖Δ w ΠϕϯτσΟεύονϟΛ࢖ͬͯಈ࡞ΛΧελϚΠζͰ͖Δ
  2. 1)16OJU͸৭Μͳ͜ͱ͕Ͱ͖Δ w ଟ༷ͳΞαʔγϣϯͰॊೈʹݕূͰ͖Δ w ϞοΫ΍ελϒΛ࢖ͬͯςετΛ૊ΈཱͯΒΕΔ w Τϥʔ΍ྫ֎ͷൃੜ΋֬ೝͰ͖Δ w ςετલޙͷॲཧΛϥΠϑαΠΫϧϑοΫͰ௥ՃͰ͖Δ w

    ΧόϨοδ΍ϨϙʔτΛࣗಈͰग़ྗͰ͖Δ w +40/΍+6OJU9.-ͳͲͷܗࣜͰ݁ՌΛग़ྗͰ͖Δ w ಠࣗΞαʔγϣϯΛఆ֦ٛͯ͠ுͰ͖Δ w ΠϕϯτσΟεύονϟΛ࢖ͬͯಈ࡞ΛΧελϚΠζͰ͖Δ
  3.  ΞαʔγϣϯΛͭ͘Δ w BTTFSU4BNF w BTTFSU&RVBMT  ςετ࣮ߦεΫϦϓτΛͭ͘Δ w $-*͔Β࣮ߦͰ͖Δ͜ͱ

    w ʮʯʮ'ʯͳͲͷ݁Ռ͕Θ͔Δ͜ͱ ͲͷΑ͏ʹ࡞͍͔ͬͯ͘   ͍ͪͭ͘͘͞Δ
  4. ͍ΖΜͳΞαʔγϣϯΛͲ͏࡞͍ͬͯΔʁ w ઌ΄Ͳ࡞ͬͨʮ͍ͪͭ͘͘͞Δʯ͸ BTTFSU4BNF BTTFSU&RVBMT͚͕ͩͩͬͨ ࣮ࡍ͸΋ͬͱͨ͘͞ΜͷΞαʔγϣϯ͕ ͋Δ w ͍ΖΜͳΞαʔγϣϯΛͲͷΑ͏ʹ࡞ͬ ͍ͯΔʁ࢖͍ͬͯΔʁ

    BTTFSU&RVBMT BTTFSU4BNF BTTFSU5SVF BTTFSU$PVOU BTTFSU&NQUZ BTTFSU'BMTF BTTFSU&RVBMT$BOPOJDBMJ[JOH BTTFSU0CKFDU&RVBMT BTTFSU$POUBJOT BTTFSU4BNF4J[F BTTFSU(SFBUFS5IBO -FUTFYQMPSF ֦ுϙΠϯτΛ୳Δ
  5. ͜ͷΫϥεͷଞͷϝιουΈͯΈΔͱɺ Πϯελϯεͷҧ͍͸͋ΕͲશͯಉ͡࡞Γʹͳ͍ͬͯΔ BTTFSU4BNF BTTFSU5SVF BTTFSU&NQUZ BTTFSU/VMM w *T*EFOUJDBMΠϯελϯεΛ࡞͍ͬͯΔ w BTTFSU5IBUʹ౉͍ͯ͠Δ

    w *T&NQUZΠϯελϯεΛ࡞͍ͬͯΔ w BTTFSU5IBUʹ౉͍ͯ͠Δ w *T5SVFΠϯελϯεΛ࡞͍ͬͯΔ w BTTFSU5IBUʹ౉͍ͯ͠Δ w *T/VMMΠϯελϯεΛ࡞͍ͬͯΔ w BTTFSU5IBUʹ౉͍ͯ͠Δ ֦ுϙΠϯτΛ୳Δ
  6. 4USBUFHZύλʔϯͷ࢖͍ॴ *OHFOFSBM *O1)16OJU w ΞϧΰϦζϜ΍ॲཧํ๏Λಈతʹࠩ͠ସ͍͑ͨͱ͖ w ৚݅෼ذʢJGTXJUDIʣΛഉআͯ͠εοΩϦ͍ͤͨ͞ͱ͖ w ͞·͟·ͳൺֱॲཧ͸$POTUSBJOUΫϥεʹ෼཭͞Ε֤ͯʑͰ࣮૷ w

    ݺͼग़͠ଆ͸۩ମతͳൺֱϩδοΫͷ࣮૷Λҙࣝͤͣɺ౷Ұతʹѻ ͑Δ ֦ுϙΠϯτΛ୳Δ ˞ิ଍ຊདྷͷ4USBUFHZύλʔϯ͸ܧঝͰ͸ͳ͘ΠϯλʔϑΣʔε͕Ұൠత
  7. ςετͷલޙॲཧ͸Ͳ͏ࠩ͠ࠐΜͰΔʁ w ઌ΄Ͳ࡞ͬͨʮ͍ͪͭ͘͘͞ΔʯͰ͸ ग़͖ͯͳ͍෦෼ w ςετલޙʹΧελϜॲཧΛڬΊΔ w TFU6Q UFBS%PXO w

    TFU6Q#FGPSF$MBTT UFBS%PXO"GUFS$MBTT w ͲͷΑ͏ͳઃܭʹͳ͍ͬͯΔʁ TFU6Q UFBS%PXOΛ࢖ͬͨςετίʔυʢྫʣ -FUTFYQMPSF ֦ுϙΠϯτΛ୳Δ
  8. WFOEPSCJOQIQVOJU 1)16OJUa5FYU6*a "QQMJDBUJPO 1)16OJUa5FYU6* 5FTU3VOOFS 1)16OJUa'SBNFXPSLa 5FTU4VJUF 1)16OJUa'SBNFXPSLa5FTU$BTF ςετਚ͖Δ·Ͱ ϧʔϓ

    ˞஫໨͍ͨ͠ॲཧΛݟ΍͘͢͢ΔͨΊɺదٓίʔυ͸লུ͍ͯ͠·͢ ςετΛ࣮ߦ͢Δͱʜ ֦ுϙΠϯτΛ୳Δ
  9. w TFU6QUFBS%PXOͱಉ͡ܥྻͷϝιουΛࣗ࡞Ͱ͖Δ w "UUSJCVUFΛ࢖͍ɺ<#FGPSF>΍<"GUFS>ଐੑΛ࢖͑͹ɺ TFU6Q Ҏ֎ͷ೚ҙͷϝιουʹ΋લޙॲཧΛׂΓ౰ͯՄೳ w ࣮ߦॱͷ༏ઌॱҐΛࢦఆͰ͖Δ w <#FGPSF

    QSJPSJUZ >ͷΑ͏ʹIPPLϝιουͷॱংΛ੍ޚͰ͖Δ w QSF$POEJUJPOQPTU$POEJUJPOͱ͍͏IPPL΋͋Δ w Ξαʔγϣϯͷ௚લɾ௚ޙʹॲཧΛࠩ͠ࠐΊΔಛघͳϙΠϯτ .PSFςετͷલޙॲཧͷ֦ு ֦ுϙΠϯτΛ୳Δ
  10. w ֦ுϙΠϯτͭΊͷଓ͖ w ౤͛ͨྫ֎͸Ͳ͜Ͱั·͑ͯͲ͜Ͱग़ྗʁ w ग़ྗ΋ͬͱͨ͘͞Μ͋ΔͷͰͲͷΑ͏ʹʁ w ʮ&ʯSSPS w ʮ4ʯLJQQFE

    w ʮ*ʯODPNQMFUF ʮʯʮ'ʯҎ֎ͷ݁Ռ͸Ͳ͏ग़ྗ͍ͯ͠Δʁ w ʮ/ʯPUJDF w ʮ8ʯBSOJOH w ʮ%ʯFQSFDBUJPO -FUTFYQMPSF ˞஫໨͍ͨ͠ॲཧΛݟ΍͘͢͢ΔͨΊɺదٓίʔυ͸লུ͍ͯ͠·͢ ֦ுϙΠϯτΛ୳Δ
  11. w େ͸খΛ݉ͶΔɺ݉Ͷͨ w ֦ுੑʹະདྷ΁ͷඋ͑ w ͦͷઃܭʹlͳͥz͕͋Δͱڧ͍ w ʮ஌͍ͬͯΔʯ͜ͱ͸େࣄ w ϐϯͱ͖ʹ͍͘ઃܭύλʔϯɺ࣮͸਎ۙʹӅΕͯΔ͔΋ʁ

    w ʮ໊લ͚ͩ஌ͬͯΔઃܭύλʔϯʯ͔Βɺʮ͋ͷΫϥε ͕࢖ͬͯͨΜͩʯʹมΘΔͱཧղͷ࣭͕มΘΔ ֦ுੑͷ͋ΔઃܭΛֶͿ