$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
防衛的 PHP: 多様性を生き抜くための PHP 入門 / Defensive PHP
Search
Naoki Ikeguchi
March 24, 2023
Programming
2
1.4k
防衛的 PHP: 多様性を生き抜くための PHP 入門 / Defensive PHP
Naoki Ikeguchi
March 24, 2023
Tweet
Share
Other Decks in Programming
See All in Programming
実はマルチモーダルだった。ブラウザの組み込みAI🧠でWebの未来を感じてみよう #jsfes #gemini
n0bisuke2
3
1.3k
AIコーディングエージェント(Manus)
kondai24
0
200
TerraformとStrands AgentsでAmazon Bedrock AgentCoreのSSO認証付きエージェントを量産しよう!
neruneruo
4
1.2k
Navigation 3: 적응형 UI를 위한 앱 탐색
fornewid
1
420
AI 駆動開発ライフサイクル(AI-DLC):ソフトウェアエンジニアリングの再構築 / AI-DLC Introduction
kanamasa
10
2.9k
手が足りない!兼業データエンジニアに必要だったアーキテクチャと立ち回り
zinkosuke
0
790
AIコーディングエージェント(skywork)
kondai24
0
190
AtCoder Conference 2025「LLM時代のAHC」
imjk
2
550
AIエージェントを活かすPM術 AI駆動開発の現場から
gyuta
0
450
Socio-Technical Evolution: Growing an Architecture and Its Organization for Fast Flow
cer
PRO
0
390
脳の「省エネモード」をデバッグする ~System 1(直感)と System 2(論理)の切り替え~
panda728
PRO
0
110
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
6
3.8k
Featured
See All Featured
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
0
40
Code Reviewing Like a Champion
maltzj
527
40k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
63
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
2
61
The Spectacular Lies of Maps
axbom
PRO
1
400
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
47
33k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
260
Believing is Seeing
oripsolob
0
12
Prompt Engineering for Job Search
mfonobong
0
120
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Transcript
Ӵత 1)1 ଟ༷ੑΛੜ͖ൈͨ͘Ίͷ 1)1ೖ !TO@KQ QIQFSLBJHJ B
XIPBNJ • αʔόαΠυΤϯδχΞ !ΏΊΈ • ࡾͷ൧ΑΓ੩తܕ͚͕͖ • 1)1 3VTU (P
$ FUD • -BSBWFMΑΓ 4ZNGPOZ • +FU#SBJOT৴ऀ • 3VTU Ͱ 1)1ͷ 4"1*Λ࣮͢Δ ͷ͕झຯ 2 @s6n_jp
੩తղੳͬͯԿ 3
'PSNBUUFS Ձͳίʔυͷ··εϖʔγϯάΠϯσϯτɼෆཁͳτʔΫϯ ͳͲΛ͑Δ 4 $foo = (function ($a, $b, $c)
{})(); $bar = array(“a”, “b”,); $foo= ( function($a,$b, $c ){ }, )(); $bar = [ ‘a’, ‘b’, ];
-JOUFS -JOU • ͳॻ͖ํɼݹ͍ॻ͖ํɼҰൠʹΑ͘ͳ͍ͱ͞ΕΔॻ͖ํ ͳͲΛݕ͢Δɾผͷॻ͖ํʹม͑Δ • ഁյతͳมߋΛߦ͏ɾఏҊ͢Δ߹͋Δ • ͨͱ͑ 1)1Ͱ
declare(strict_types=1); ΛՃ͢Δ ϧʔϧ͕͜Εʹ͋ͨΔ • ࣗಈతʹमਖ਼Ͱ͖ͳ͍ͷ͋Δ 5
5ZQF$IFDLFS • ܕΛݕࠪ͢Δ ͦͷ·· 6
ଞͷݴޠʹ͓͚Δ੩తղੳ 7
1)1ͷ੩తղੳπʔϧ • 1)1@$PEF4OJGGFS • 1)1$4'JYFS • 1)1.FTT%FUFDUPS • 1)14UBO •
1TBMN • 3FDUPS FUDʜ 8
9 ଟ͗͢Δ ͷͰͱΓ͋͑ͣೖΕ͓͖ͯ͘ ͭΛհ͠·͢
8IZ੩తղੳ 10
ܕͷऑ͔ͬͨݴޠ͕ܕΛٻΊ͍ͯΔ 11
ਓྨܕΛٻΊΔ • ਓखଓ͖ܕݴޠʹ;ΕΔͱߴจ຺ͳίʔυΛੜ࢈͢Δ • ܕߟ͑Δ͜ͱΛ࠷খʹ͢ΔखஈͰ͋Δ 12
ϏϧυλΠϜͰΕΔʹӽͨ͜͠ͱͳ͍ ͋͞օ͞Μ͝Ұॹʹɺ • ίϯύΠϧΤϥʔී௨ • ίϯύΠϧΤϥʔ͕ग़ͨΒ͋Γ͕ͱ͏ • ίϯύΠϧΤϥʔ͕ग़ͨΒେتͼ 13 l
ߐఴ྄ɽzߐఴ྄ͷ$ ೖzɽɽIUUQTF[PFSZPVHJUIVCJPDQQJOUSP
Ӵతͳίʔυϕʔε 14
ͭͷӴ • ࣗͷϛε͔ΒͷӴ • ࣗͰॻ͍ͨίʔυͷจ຺Λશʹ͍֮͑ͯΒΕΔΘ͚Ͱͳ͍ • ແବͳࢥߟ͔ΒͷӴ • ίʔυͷॻ͖ํຊ࣭Ͱͳ͍ •
ॻ͖ํΛࣗಈͰ౷Ұ͢Δ͜ͱͰίʔυ্ͷຊ࣭ʹूதͰ͖Δ • ଞਓͷॻ͘ίʔυ͔ΒͷӴ • ίʔυϕʔεதͷίʔυͷ࣭ҰఆʹอͨΕΔ͖Ͱ͋Δ • ҉ͷ ίʔσΟϯάنकΒΕͳ͍ 15
ଟ༷ੑ 16
ॻ͘ਓͷ͚ͩҧ͏ίʔυ͕ੜ·ΕΔ • Πϯσϯτεϖʔε λϒ • ԋࢉࢠͷपΓʹεϖʔεΛೖΕΔ ೖΕͳ͍ • BSSBZ@NBQBSSBZ@GJMUFSΛ͏ GPSFBDIΛ͏
• ͜ͷॻ͖ํݹ͍ ৽͍͠ ˠίʔυͷຊ࣭ͦ͜Ͱͳ͍ ˠ੩తղੳʹΑͬͯຊ࣭ʹूதͰ͖ΔΑ͏ʹ͢Δ 17
143ͱ 143 18
143ͱ • 1)1'*( 'SBNFXPSL*OUFSPQFSBCJMJUZ(SPVQ ʹΑͬͯ ࡦఆ͞ΕͨϑϨʔϜϫʔΫؒͷ૬ޓӡ༻ੑΛ֬อ͢ΔͨΊͷ ඪ४ "CTUSBDUJPO • ͨͱ͑ʜʜ
• 143143ΦʔτϩʔσΟϯά • 143143143ίʔσΟϯάελΠϧ • 143)551ϝοηʔδΠϯλʔϑΣʔε • 143$MPDLˡ/&8 19
143 • 143Λݩʹͨ͠ίʔσΟϯάελΠϧඪ४ • ͨͱ͑ʜʜ • 1)1ϑΝΠϧ -'ͷΈΛ͏ .645 •
FYUFOET JNQMFNFOUTΫϥε໊ͱಉ͡ߦʹॻ͘ .645 • 5SBJUͷ VTFจ DMBTTͷ։͔࢝ͬ͜ͷ͙͢ޙ .645 • ͯ͢ͷϝιουʹ 7JTJCJMJUZΛॻ͘ .645 • BCTUSBDU GJOBM TUBUJD 7JTJCJMJUZͷલʹॻ͘ .645 • FMTFJGͰͳ͘ FMTFJGΛ͏ 4)06-% FUDʜ 20
1)1ͷ੩తղੳೖ 21
QIQM • ҙ֎ͱΒΕ͍ͯͳ͍ ࢲΒͳ͔ͬͨ ੩తղੳπʔϧ • ࣮ߦ࣌ͷ 4ZOUBY&SSPSΛ͛Δ 22
23
1)1$4'JYFS 24 • ϧʔϧηοτ • !4ZNGPOZ !4ZNGPOZSJTLZ ͜Ε !143Λܧঝ͢Δ
• !1IQ$T'JYFS !1IQ$T'JYFSSJTLZ • !1)1.JHSBUJPO !1)1.JHSBUJPOSJTLZ • !1)16OJU.JHSBUJPOSJTLZ
25
&$4 ίϯςφ͕ಈ͔ͳ͍΄͏ 26 • 0VUPG#PYͰ͑Δ • 1)1$4'JYFSͷࡉʑͱͨ͠ϧʔϧ͑ͳ͍ • &$41)1$4'JYFS 1)1$4
4ZNQMJGZ
27
1)14UBOฤ • ϨϕϧΛ d͔Β͑ΒͿ ͕͓͢͢Ί • 4ZNGPOZͰ͏߹ &YUFOTJPOΛೖΕΔ • ΄΅
0VUPG#PYͰ͑Δ • ࠷ॳෆཁͳϧʔϧΛҰ୴ແޮԽ͍͍ͯ͠ͱࢥ͏ 28
29
3FDUPSฤ • $0%&@26"-*5: %&"%@$0%& 1)1@d1)1@ 5:1&@%&$-"3"5*0/͋ͨΓͷ 4FU-JTUΛ͏ • JNQPSU/BNFTΛઃఆ͠ͳ͍ͱ '2$/͕ॻ͔ΕΔͷͰҙ
30
31
32
੩తղੳͱ 1IQ4UPSN 33
͋ͳͨͷ 1IQ4UPSN ࠷దͳઃఆ 34
͋ͳͨͷ 1IQ4UPSN ࠷దͳઃఆ 35
36
37
͏Ε͍͠χϡʔε 38
1IQ4UPSN $* Ͱಈ͖·͢ 39
1IQ4UPSN $* Ͱಈ͖·͢ brew install jetbrains/utils/qodana qodana scan –-show-report •
+BWB ,PUMJO 1)1 1ZUIPO +BWB4DSJQU 5ZQF4DSJQU (P $ ' 7#/&5 BOENPSF • 4"3*'ܗࣜͰͷग़ྗՄೳ • ࠓͳΒແྉͰ͑·͢ 40
0OF.PSF5IJOH 41
ࠓհͨ͠πʔϧΛ·ͱΊͯಋೖͰ͖·͢ composer require --dev \ quartetcom/static-analysis-kit:~8.1 • 1)1$4'JYFS 1)14UBO 3FDUPSΛҰʹಋೖͰ͖·͢
• 0VUPG#PYͰ͑ΔͷͰ໘ͳઃఆෆཁ • ݫ͠Ίͷઃఆʹͯ͋͠ΔͷͰݫ͠Ί͕͖ͳํʹ͓͢͢Ί 42
5IBOLZPV ൃදࢿྉͪ͜Β͔ΒIUUQTTQFBLFSEFDLDPNTJLFUZBO 43