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
PHPStan拡張のコードから読み解く静的解析の威力と可能性 / PHPStan extens...
Search
tzmfreedom
December 21, 2024
3
410
PHPStan拡張のコードから読み解く静的解析の威力と可能性 / PHPStan extension code reading
tzmfreedom
December 21, 2024
Tweet
Share
More Decks by tzmfreedom
See All by tzmfreedom
Alpine.js を活用した Laravel MPA フロントエンド最適化戦略 / Alpine.js MPA
tzmfreedom
1
1.6k
php-srcを読んでみよう / php-src codereading
tzmfreedom
1
2.5k
DBGpを使って PHPのデバッガーをつくろう / DGBp PHP Debugger
tzmfreedom
1
2.3k
独自フレームワークPHPアプリケーションの改善戦略 / Original Framework PHP Kaizen
tzmfreedom
5
4.7k
PHPでPHPを実装する〜プログラミング言語実装入門〜
tzmfreedom
0
1k
Salesforceのツールの作り方
tzmfreedom
0
650
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
Designing Experiences People Love
moore
142
24k
Building Adaptive Systems
keathley
43
2.8k
What's in a price? How to price your products and services
michaelherold
246
12k
Agile that works and the tools we love
rasmusluckow
331
21k
The Invisible Side of Design
smashingmag
301
51k
The Straight Up "How To Draw Better" Workshop
denniskardys
237
140k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Code Review Best Practice
trishagee
72
19k
Transcript
גࣜձࣾΤεɾΤϜɾΤεɹా࣮ 1)14UBO֦ுͷίʔυ͔ΒಡΈղ͘ ੩తղੳͷҖྗͱՄೳੑ
ࣗݾհ w ా࣮!U[N@GSFFEPN w גࣜձࣾΤεɾΤϜɾΤεͷΤϯδχΞ w 1)1ྺʙ͘Β͍ w 1)1ܥΧϯϑΝϨϯεͰͷొஃ̎ͿΓʜʂʂ w
QIQDPOಠࣗϑϨʔϜϫʔΫ1)1ΞϓϦέʔγϣϯͷվળઓུ w 1)1FSLBJHJ%#(QΛͬͯ1)1ͷσόοΨʔΛͭ͘Ζ͏ w QIQDPOQIQTSDΛಡΜͰΈΑ͏
1)14UBOͬͯ·͔͢ʂʁ
1)14UBOͱʜʁ͏ྑ͍Ͱ͢ΑͶʁʁ w 1)1ͷ੩తղੳπʔϧIUUQTQIQTUBOPSH w ΧϯϑΝϨϯε8FCهࣄͰ1)14UBOͷΛΑ͘ݟΔ͘Β͍ σϑΝΫτ͔ͭ͞Ε͍ͯΔπʔϧͷ̍ͭ w Ϡόͦ͏ͳίʔυΛεΫϦϓτΛ࣮ߦͤͣʹݕͯ͘͠ΕΔ
Ϡόͦ͏ͳίʔυʁ w ະఆٛมͷࢀর w ଘࡏ͠ͳ͍ΫϥεɺϓϩύςΟɺϝιουͷࢀরɺݺͼग़͠ w ϝιουҾͷܕͷؒҧ͍ w ϝιουͷΓͷఆٛͱ࣮ͷΓ͕ҧ͏ w
ར༻͍ͯ͠ͳ͍Ҿ w VTF࿙Ε w ඞͣUSVFGBMTFʹͳΔذ w ʜ
ͦΜͳ୯७ͳϛε͢Δͱࢥͬͨʁʁ w ΈΜͳϛε͢Δ͠Զ͢Δ w ࣾαʔϏε΄Ͳ1)14UBOͷಋೖܦݧ͕͋Γ·͕͢ɺલड़ͷΤϥʔશ ͯ͋Γ·ͨ͠ w ಛʹςετ͕ेॻ͔Ε͍ͯͳ͍ΞϓϦέʔγϣϯʹରͯ͠ઈେͳޮՌΛ ൃش͠·͢ w
ͲΜͳαʔϏεͰಋೖݕ౼͢ΔՁेʹ͋Γ·͢ w ·ͣ-FWFM͔Βͷద༻Ͱྑ͍͠ɺͨ͘͞ΜJHOPSF&SSPSͯ͠ྑ͍ͷͰɺ ͍ܰؾ࣋ͪͰೖΕͪΌ͍·͠ΐ͏ʂ
ͱ͍͑ɺ1)14UBOͷίΞػೳ͚ͩͰ ΧόʔͰ͖ͳ͍έʔε͋Δ
1)14UBOͷίΞػೳ͚ͩͰΧόʔͰ͖ͳ͍ͱ͜Ζ w ϚδοΫϝιουͰϓϩύςΟΓͷܕ͕ޮ͔ͳ͍ w ओʹ&MPRVFOUͳͲͷ03.ΫΤϦϏϧμʔ w ˞TUVC1)1%PDͰͷରԠ͕ݱ࣮తͰͳ͍߹ w ίʔυܗҎ্ͷίʔσΟϯάنɾ໋໊نଇΛద༻͍ͨ͠߹ w
ಛఆͷΫϥεΛ໌ࣔతʹΠϯελϯεԽͤͣʹ%*Λ͏Α͏ʹ͍ͨ͠ w ಛఆͷϝιουͷར༻Λېࢭ͍ͨ͠
&MPRVFOUϞσϧͱ1)14UBOͷྫ
ͦ͜Ͱ1)14UBO֦ு
-BSBTUBOͷྫܕਪͷ֦ு ΧϥϜͷܕ͔Βਪ͕Ͱ͖ΔΑ͏ʹͳΔ ΫΤϦϏϧμʔͷΓ͕(FOFSJDTͳܕʹͳΔ
͜ͷτʔΫͰ͢͜ͱ w 1)14UBOͷ֦ுػೳͱʁ w ֦ுػೳͷछྨ w ࣮ࡍͷ֦ுػೳ͕ͲͷΑ͏ʹͯ͠ಈ͍͍ͯΔͷ͔ w ֦ுػೳͷॻ͖ํɾಡΈํ w
͔ͦ͜ΒಘΒΕΔ։ൃମݧͱ1)1ͷՄೳੑ
1)14UBOͷ֦ுػೳͱʁ
1)14UBOͷ֦ுػೳͱ w 1)14UBOͷৼΔ͍Λ֦ுͰ͖Δػೳ w 1)14UBOͷݕϧʔϧͳͲ֦ுػೳΛ࣮ͬͯ͞Ε͍ͯΔ ʢΈࠐΈͷ֦ுػೳʣ w ओʹҎԼͷ̏छྨ͕ΘΕΔʢଞʹ͋Δ͕ࠓճׂѪʣ w $VTUPN3VMF
w %ZOBNJD3FUVSO5ZQF&YUFOTJPOT w $MBTT3F fl FDUJPO&YUFOTJPOT
$VTUPN3VMF w ݕϧʔϧΛՃ͢Δػೳ w ྫ͑ʜ w ಛఆͷϝιουΛར༻ෆՄʹ͢ΔWBS@EVNQ FDIP ʜ w
ݫີൺֱΛڧ੍͢ΔJO@BSSBZ w fi OBMΛڧ੍ͨ͠ΓܧঝΛېࢭ͢Δ w εʔύʔάϩʔόϧมͷར༻Λېࢭ͢Δ w ໋໊نଇͷద༻ʢQSF fi Y TV ff i Y ʜʣ
$MBTT3FGMFDUJPO&YUFOTJPO w ϚδοΫϝιουʢ@@TFU @@HFU @@DBMM ʣͷԾతͳϓϩύς ΟɾϝιουΛఆٛ͢Δ֦ுػೳ w
ྫ͑ʜ w &MPRVFOUͷϓϩύςΟͷܕΛਪ͢Δ w &MPRVFOUͷΫΤϦϏϧμʔͷϚδοΫϝιουΛਪ͢Δ ʢXIFSF999ͳͲʣ w 1)1%PDͷ!QSPQFSUZ!NFUIPEΛղऍ͢Δػߏ͜ͷ֦ுػೳͰ ࣮͞Ε͍ͯΔ
%ZOBNJD3FUVSO5ZQF&YUFOTJPOT w ϝιουͷҾͷʹԠͯ͡ಈతʹΓܕΛม͑Δػೳ w ྫ͑ʜ w KTPO@EFDPEF ͷΓ w EBUF
ͷΓ
࣮ࡍͷ֦ுػೳ͕Ͳ͏࣮͞Ε͍ͯΔͷ ͔ݟ͍͖ͯ·͢👀
-BSBTUBO
-BSBTUBO w IUUQTHJUIVCDPNMBSBTUBOMBSBTUBO w -BSBWFM༻ͷ1)14UBO֦ு w &MPRVFOUϞσϧͷϓϩύςΟΫΤϦϏϧμͷϝιουɺ'BDBEF ͳͲΛྑ͍ײ͡ʹܕਪͯ͘͠ΕΔ w -BSBWFMΞϓϦέʔγϣϯΛ1)14UBOͰݕࠪ͢Δ߹ɺ͜Ε͕ͳ͍
ͱݫ͍͠
&MPRVFOUϞσϧͷϓϩύςΟͷܕਪ $MBTT3F fl FDUJPO&YUFOTJPOͰϚδοΫ ϝιουͳϓϩύςΟʹܕΛ͚ͭΔ HFU1SPQFSUZ ͰϓϩύςΟܕΛฦ͢
ςʔϒϧͷΧϥϜใͷऔಘ ͋Β͔͡Ίηοτ͍ͯͨ͠ΧϥϜͷ ܕใΛͬͯϓϩύςΟܕΛ࡞
ϚΠάϨʔγϣϯͷ1)1ϑΝΠϧΛ ύʔεͯ͠εΩʔϚใΛߏங
&MPRVFOUϓϩύςΟͷܕਪͷΈ w 1)1ͷϚΠάϨʔγϣϯϑΝΠϧΛશͯύʔεͯ͠εΩʔϚใΛ Έཱͯ w $MBTT3F fl FDUJPO&YUFOTJPOͰ্هεΩʔϚใΛͬͯܕਪ͢ Δ w
࣮ࡍʹ%#Λ্ཱͪ͛ͨΓɺεΩʔϚ͕%#ʹө͞Ε͍ͯͳͯ͘ ಈ͘ͷ͕໘ന͍ϙΠϯτ
ߟܕ͖03.ͱ-BSBTUBO w --Ͱܕͷ͕ग़͕ͪɻ1)14UBOͦͷ̍ͭɻ w 03.1SJTNB /PEFKT5ZQF4DSJQU ͳͲܕ͖ͷ03.͕·Ε Δ w &MPRVFOUϞσϧϚδοΫϝιουࡇΓͰͦΕ͚ͩͰܕਪ͕ݫ
͍͠ͷ͕ͩɺ1)14UBO-BSBTUBOʹΑΓܕ͖03.ʹਐԽ͍ͯ͠Δ w ͨͩ͠ɺίʔυิ1)14UBOͰิ͑ͳ͍ͷͰ ผ్ΤσΟλͷϓϥάΠϯMBSBWFMJEFIFMQFSΛ͏ܗʹͳΔ
ิ4RVBTI42-ରԠ͍ͯ͠Δ 42-ϑΝΠϧΛಡΈࠐΜͰύʔε w ͜ΕʹΑΓɺ%#εΩʔϚΛผͷϚΠάϨʔγϣϯํ๏Ͱཧ͠ ͍ͯΔ-BSBWFMΞϓϦέʔγϣϯͰରԠͰ͖ͨΓ͠·͢
QIQTUBOECB
QIQTUBOECBʁ w IUUQTHJUIVCDPNTUBBCNQIQTUBOECB w 1%0%PDUSJOFͷ1)14UBO֦ு w 1%04UBUFNFOUGFUDI"MM ʹܕ͕͘ w ͭ·Γ42-ͷΫΤϦ݁Ռʹܕ͕͘
w ଞͷ֦ுػೳͱൺΔͱઃఆ͕গ͠ಛघ
GFUDI"MM ʹܕ͕͘
ઃఆϑΝΠϧྫ
%ZOBNJD.FUIPE3FUVSO5ZQF&YUFOTJPOʹΑΔ࣮ 1%0Ϋϥεͷ RVFSZ ϝιου͕ର ୈҰҾΛͬͯܕਪΛ͍ͯ͠Δ
ΫΤϦΛ࣮ߦɺϩʔϧόοΫɺܕใऔಘ 1%0ͰΫΤϦΛ࣮ߦ ΧϥϜใΛऔಘ ϩʔϧόοΫ
QIQTUBOECBͷΈ ࣮ࡍͷ%#ʹଓɾΫΤϦൃߦΛߦ͍HFU$PMVNO.FUB ͰΧϥϜ ͷϝλใΛऔಘ͢Δ ͦͷϝλใΛ1%04UBUFNFOUͷܕͷதʹ͍ΕΔ TUNUGFUDI ͨ͠ͱ͖ʹ্هͷܕใΛ͍ɺGFUDINPEFʹ
Ԡͨ͡ܕͰฦ͢ 42-ͷύʔεͰͳ࣮͘ࡍʹ࣮ߦ͍ͯ͠ΔͷͰ ॊೈɾਖ਼֬ʹܕใΛऔಘͰ͖Δͷ͕QIQTUBOECBͷઃܭͰྑ͍ͱ͜Ζ
ߟ42-࣮ߦ݁Ռͷܕ͚ w TRMD1SJTNB5ZQFE42-ͳͲੜ42-ͷ࣮ߦ݁Ռʹରͯ͠ܕΛ͚ͭ ͍ͨχʔζ͕͋Δ w QIQTUBOECBʹΑͬͯ1%0ͷੜ42-ͷ࣮ߦ݁Ռʹܕ͕ͭ͘ w ͨͩ͠ίʔυิͰ͖ͳ͍ w ίʔυิ·Ͱߟ͑ΔͱTRMD5ZQFE42-ͷΑ͏ͳίʔυੜܥͷ
Ξϓϩʔνྑ͍͕ɺࣗಈੜͱ͍͏ϫϯΫογϣϯͷॲཧ͕ೖΔ ͨΊར༻ͷख͕ܰ͞ແ͘ͳͬͯ͠·͏
ϓϥΠϕʔτϝιουͷςετΛ ॻ͖ͨ͘ͳΔͱ͖͋Γ·͢ΑͶʁ
WJTJCMF'PS5FTUJOH w ࡞IUUQTHJUIVCDPNU[NGSFFEPNQIQTUBOFYUFOTJPOT w QSJWBUFϝιουQVCMJDϝιουܦ༝Ͱςετͨ͠ΓɺQSJWBUF ϝιουͷॲཧΛผΫϥεʹ͢ΔͳͲͷΞϓϩʔνΘ ্͔ͬͨͰɺQSJWBUFϝιουΛςετ͍ͨ͠ͱ͍͏ؾ࣋ͪࣗମ ݈શͰ͋Γଚॏ͍ͨ͠ w +BWBͷϥΠϒϥϦ'MVUUFSͰ!WJTJCMF'PS5FTUJOHͱ͍͏ςε
τίʔυͷΈQVCMJDѻ͍͢Δ੩తղੳ༻ͷΞϊςʔγϣϯ͕͋Δ
WJTJCMF'PS5FTUJOH ରϝιουʹ"UUSJCVUFΛ༩ QVCMJDͳݺͼग़͠Τϥʔ 5FTU$BTF͔Βݺͼग़͠0,
WJTJCMF'PS5FTUJOHͲ͏࣮͞Ε͍ͯΔ͔ ϝιουݺͼग़͠ʹରͯ͠ݕࠪ ݕࠪରͷϊʔυ ࠓճ.FUIPE$BMM ੩తղੳͷείʔϓ ͦͷ࣌ͷܕใΛऔಘͰ͖Δ
WJTJCMF'PS5FTUJOHͲ͏࣮͞Ε͍ͯΔ͔ WJTJCMF'PS5FTUJOHͳϝιου͔Ͳ͏͔ͷผ 1)16OJUa'SBNFXPSLa5FTU$BTF͔Βͷ ݺͼग़͠Ͱ͋ΕΤϥʔʹ͠ͳ͍ QSJWBUFͱΈͳͨ͢Ίಉ͡Ϋϥε͔Βͷ ݺͼग़͠Ͱͳ͚ΕΤϥʔ
WJTJCMF'PS5FTUJOHͷΈ w ରͷϝιουQVCMJDͰWJTJCMF'PS5FTUJOHଐੑΛ͚͓ͭͯ͘ w ϝιουݺͼग़͠ .FUIPE$BMM ʹର͢Δ$VTUPN3VMFΛ࣮ w ݺͼग़͢ϝιουʹWJTJCMF'PS5FTUJOHଐੑ͕͍͍ͭͯΔ߹ݕࠪ ରͱ͢Δ
w 5FTU$BTFΛܧঝͨ͠ΫϥεಉҰΫϥε͔Βͷݺͼग़͠Ͱ͋Ε0, w ͦ͏Ͱͳ͚ΕΤϥʔ
੩తղੳͰ1)1ͷݴޠ༷Λӽ͑Δ w ಠࣗͷՄࢹੑΛදݱͰ͖Δ w ಛఆͷঢ়گͰͷΈݺͼग़ͤΔՄࢹੑʢ!WJTJCMF'PS5FTUJOHʣ w 1)1ͷඇରশՄࢹੑΈ͍ͨͳͷ w ಠࣗͷมએݴ w
ϩʔΧϧͰ࠶ೖͰ͖ͳ͍Α͏ʹ͢ΔʢDPOTUʣ w ੩తܕ͚ݴޠͷΑ͏ʹ࠶ೖͰܕΛݕࠪ͢Δ
·ͱΊ w 1)14UBO֦ுͷ࣮ํ๏ͱ࣮ྫʹ͍ͭͯઆ໌͠·ͨ͠ w 1)14UBO֦ுΛ͏ͱΑΓߴͳݕ͕ࠪͰ͖·͢ w ϑϨʔϜϫʔΫΛΑΓݎ࿚ʹͰ͖·͢ w 1)1ͷݴޠ༷Λཧతʹ֦ு͢Δ͜ͱͰ͖·͢
੩తղੳΛ͍͜ͳͯ͠ 1)1ΛΑΓ࠷ߴͳݴޠʹ͍͖ͯ͠·͠ΐ͏💪