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
2
300
PHPStan拡張のコードから読み解く静的解析の威力と可能性 / PHPStan extension code reading
tzmfreedom
December 21, 2024
Tweet
Share
More Decks by tzmfreedom
See All by tzmfreedom
php-srcを読んでみよう / php-src codereading
tzmfreedom
1
2.1k
DBGpを使って PHPのデバッガーをつくろう / DGBp PHP Debugger
tzmfreedom
1
1.8k
独自フレームワークPHPアプリケーションの改善戦略 / Original Framework PHP Kaizen
tzmfreedom
4
4.2k
PHPでPHPを実装する〜プログラミング言語実装入門〜
tzmfreedom
0
970
Salesforceのツールの作り方
tzmfreedom
0
570
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.8k
How STYLIGHT went responsive
nonsquared
98
5.4k
VelocityConf: Rendering Performance Case Studies
addyosmani
328
24k
Documentation Writing (for coders)
carmenintech
67
4.6k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
The Cult of Friendly URLs
andyhume
78
6.2k
Bootstrapping a Software Product
garrettdimon
PRO
306
110k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Navigating Team Friction
lara
183
15k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
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ΛΑΓ࠷ߴͳݴޠʹ͍͖ͯ͠·͠ΐ͏💪