Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
「嘘をつくテスト」の失敗例から学ぶ 良いテストコード #frontend_phpcon_do
Search
asumikam
June 06, 2026
Technology
1.2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
「嘘をつくテスト」の失敗例から学ぶ 良いテストコード #frontend_phpcon_do
フロントエンド・PHPカンファレンス北海道2026
asumikam
June 06, 2026
More Decks by asumikam
See All by asumikam
Let's Build a Tiny PHPStan
asumikam
0
96
ちいさくPHPStanをつくってみる
asumikam
1
210
ときめかないミーティングはアップデートのシグナル #scrumosaka
asumikam
8
2.4k
Harnessing the Power of Mocks and Stubs in PHPUnit / #laravellivejp
asumikam
1
1.2k
委員長たちの「コシ」
asumikam
0
580
書籍「ユーザーストーリーマッピング」が私のバイブル
asumikam
4
670
PHPUnitの「Depends」を使うと次のテストに返り値を渡せるの、なんで?読むぞ! #phpcon_odawara
asumikam
0
140
「通るまでRe-run」から卒業!落ちないテストを書く勘所
asumikam
3
1.4k
PHPコミュニティのあるきかた & ちいさく PHPUnitをつくってみる / Tech Challenge Party 2026
asumikam
0
190
Other Decks in Technology
See All in Technology
雪かき部 #7 もう怖くない!SELECT文!
foursue
0
280
私の推しは「聞いてから進む」AIです -AI-DLCに一人でアプリを作らせた話
yama3133
1
170
LLM機能を自作して分かるSnowflake Cortex AIの強み
nayuts
0
290
営業オントロジーの作り方と、エージェントからの辿り方 ── ナレッジワークの現場から
kworkdev
PRO
1
260
検証フェーズはAIの回答を判断するための学習機会
toru_kubota
2
500
Google Cloud Next Tokyo 26登壇時のスクリプト
recruitengineers
PRO
0
190
Codex概要
ymiya55
0
400
ファミコンでPHPを動かす / PHP on the Famicom side b
tomzoh
0
130
Snowflake Horizon Catalog と Apache Iceberg で作る オープンなデータ基盤
kitagawaz
0
440
事業活動を AI Ready にする攻めと守りのデータエンジニアリング / data-engineering-for-ai-ready-business
pei0804
1
180
オブザーバビリティを高める AI エージェント体験を考える / Designing AI Agent Experiences That Enhance Observability
aoto
PRO
2
300
More Freedom on the Same Shared GPU Cluster: A Small Team’s Experience with vCluster
nttcom
0
130
Featured
See All Featured
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
480
Code Review Best Practice
trishagee
74
20k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
710
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Amusing Abliteration
ianozsvald
1
330
Optimizing for Happiness
mojombo
378
71k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
570
It's Worth the Effort
3n
188
29k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Transcript
ʮӕΛͭ͘ςετʯͷࣦഊྫ͔ΒֶͿ ྑ͍ςετίʔυ BTVNJLBN
None
None
None
࣌χ
͜ΜΧχʂ ͜Μχʂ w͋͢Έ 𝕏 !BTVNJLBN wגࣜձࣾϦϯέʔδ w1)1FSΞδϟΠϧɾεΫϥϜ
ࠓ͢͜ͱ ਖ਼͍͠ςετμϒϧͷ͍ํΛͤͣ ʮӕΛͭ͘ςετʯΛॻ͍ͯ͠·ͬͨ Θͨ͠ͷ͔ͳ͍͠ετʔϦʔ
ࠓͷΰʔϧ ʮྑ͍ςετʯΛॻͨ͘Ίͷࢦ͕Θ͔Δ ʮςετμϒϧʯͱͷ͖߹͍ํ͕Θ͔Δ
ຊͷ͓͠ͳχ ςετμϒϧͱਖ਼͖͘͠߹͏ Θͨ͠ͷࣦഊྫʮӕΛͭ͘ςετʯ
ςετίʔυͷࣦഊྫ
Θͨ͠ͷ͔ͳ͍͠ετʔϦʔ Θͨ͠ͷࣦഊྫʮӕΛͭ͘ςετʯ ͲͷΑ͏ʹࣦഊ͔ͨ͠ Ͳ͕͜🙅ͩͬͨͷ͔
Θͨ͠ͷࣦഊྫʮӕΛͭ͘ςετʯ ͜Μͳঢ়ଶͷϓϩμΫτίʔυ͕͋ͬͨ ςετରγεςϜ ʢςετ͍ͨ͠ϓϩμΫτίʔυʣ ґଘ ґଘ ґଘ ґଘ
Θͨ͠ͷࣦഊྫʮӕΛͭ͘ςετʯ ςετΛॻ͖࢝ΊΑ͏ͱ͕ͨ͠ ςετରγεςϜ ʢςετ͍ͨ͠ϓϩμΫτίʔυʣ ґଘ ґଘ ґଘ ґଘ ςετ
Θͨ͠ͷࣦഊྫʮӕΛͭ͘ςετʯ ґଘͨͪͷςετσʔλ४උ͕େมͰςετ͕ॻ͖ʹ͍͘ ςετରγεςϜ ʢςετ͍ͨ͠ϓϩμΫτίʔυʣ ґଘ ґଘ ґଘ ґଘ ςετ 💪
💪 💪 💪 💦
ςετ͕ॻ͖ʹ͍͘ͳͱࢥͬͨࢲ ʮςετμϒϧʯͱ͍͏ͷΛͬͨ Θͨ͠ͷࣦഊྫʮӕΛͭ͘ςετʯ
w ςετతͰຊ൪ΦϒδΣΫτΛஔ͖͑Δ߹ͷ૯শ w ϞοΫʢϞοΫɾεύΠʣ w ελϒʢελϒɾμϛʔɾϑΣΠΫʣ w ˞ຊൃදͰϞοΫɾελϒͷΈ͢Δ ςετμϒϧ Θͨ͠ͷࣦഊྫʮӕΛͭ͘ςετʯ
IUUQTXXXNBSUJOGPXMFSDPNCMJLJ5FTU%PVCMFIUNM
ελϒʹஔ͖͑Δ Θͨ͠ͷࣦഊྫʮӕΛͭ͘ςετʯ w ࣗͷ͖ͳͰ͍͍ײ͡ʹ࡞ΕΔ w ϓϩμΫτίʔυͷϝιουҾɾΫϥεϓϩύςΟʹ ͜ΕΛ͚ͩ͢ͰɺΠέΔ
Կߦ͋ͬͨςετσʔλ·Ͱͷ४උ͕ʜ Θͨ͠ͷࣦഊྫʮӕΛͭ͘ςετʯ QIQ
ͨͬͨߦʹʂʂʂ🎉 Θͨ͠ͷࣦഊྫʮӕΛͭ͘ςετʯ QIQ ✨ ✨
Θͨ͠ͷࣦഊྫʮӕΛͭ͘ςετʯ ґଘΛςετμϒϧʹஔ͖͍͑ͯͬͨ ςετରγεςϜ ʢςετ͍ͨ͠ϓϩμΫτίʔυʣ ґଘ ґଘ ґଘ ґଘ ςετ 💪
💪 💪 💪 💦
Θͨ͠ͷࣦഊྫʮӕΛͭ͘ςετʯ ґଘΛςετμϒϧʹஔ͖͍͑ͯͬͨ ςετରγεςϜ ʢςετ͍ͨ͠ϓϩμΫτίʔυʣ ґଘ ґଘ ґଘ ςετ 💪 💪
💪 💦 ςετμϒϧ
Θͨ͠ͷࣦഊྫʮӕΛͭ͘ςετʯ ґଘΛςετμϒϧʹஔ͖͍͑ͯͬͨ ςετରγεςϜ ʢςετ͍ͨ͠ϓϩμΫτίʔυʣ ґଘ ґଘ ςετ 💪 💪 ςετμϒϧ
ςετμϒϧ
Θͨ͠ͷࣦഊྫʮӕΛͭ͘ςετʯ ࣗͷ͖ͳͰฦͤΔʂͬͨʔʂʂ ςετରγεςϜ ʢςετ͍ͨ͠ϓϩμΫτίʔυʣ ςετμϒϧ ςετμϒϧ ςετμϒϧ ςετμϒϧ ςετ ✨
ͦ͏ͯ͠ʮָ͡ΌʙΜʯͱ͍ͬͯ ςετμϒϧΛ͍·ͬͨ͘ Θͨ͠ͷࣦഊྫʮӕΛͭ͘ςετʯ
ഁ໓ Θͨ͠ͷࣦഊྫʮӕΛͭ͘ςετʯ
w ςετμϒϧʹஔ͖͑·ۭͬͯ͘ڏͷςετʹ w ΧόϨοδग़Δ͕ɺԿςετ͍ͯ͠ͳ͍ w ϓϩμΫτίʔυଆ͕มΘ͍ͬͯΔͷʹςετμϒϧ ै͍ͯ͠ͳ͍ w ʮӕΛ͍ͭͨʯςετʹͳΔ w
ଘࡏ͠ͳ͍έʔεΛςετͯ͠ɺ͔͠1BTT͍ͯ͠Δʜʜ ഁ໓ਓੜ Θͨ͠ͷࣦഊྫʮӕΛͭ͘ςετʯ
w ϓϩμΫτίʔυʹ໌Β͔ͳόά͕͋ΔʹؔΘΒͣɺ ςετ͕ޭͱ͍͏ w ςετͷ৴པ่͕ΕΔ w ྑ͘ͳ͍ςετ😞 ൵͍͠ͳςετ1"44ɺͰόά͕͋Δ Θͨ͠ͷࣦഊྫʮӕΛͭ͘ςετʯ
w ςετμϒϧΛ͏ࡍͷʮҙࢥܾఆʯ͕ؒҧ͍ͬͯͨ w ڥք͕ᐆດͳ··ʮͳΜͱͳ͘ʯͬͨ w ͲͷΑ͏ʹςετΛॻ͖͍͔ͨͷࢦඪ͕ͳ͔ͬͨ w ʮςετͷ؍ʯ͕ᐆດͩͱɺखͰॻ͍ͯɺ "*ʹॻ͔ͤͯ͜ͷ͔ͳ͍͠ετʔϦʔى͜Γ͏Δ Ͳ͕͜🙅ͩͬͨͷ͔
Θͨ͠ͷࣦഊྫʮӕΛͭ͘ςετʯ
ςετμϒϧͱਖ਼͖͘͠߹͏
ςετμϒϧͱਖ਼͖͘͠߹͏ w جຊʹཱͪฦΔ w ͳͥςετΛॻ͘ͷ͔ w ͳͥςετμϒϧΛ͏ͷ͔ w ͳͥελϒΛ͏ͷ͔ w
ͰͲ͏͢ΕΑ͔ͬͨͷ͔ w ྑ͍ςετίʔυΛॻ͍ͯΒ͏ͨΊͷ"*׆༻๏ ςετμϒϧͱਖ਼͖͘͠߹͏
ͳͥςετΛॻ͘ͷ͔ ςετμϒϧͱਖ਼͖͘͠߹͏
Θͨͨͪ͠ͷ։ൃϓϩηεΛ ָʹ͢ΔͨΊ ςετμϒϧͱਖ਼͖͘͠߹͏
ςετ͕͋Δͱخ͍͜͠ͱ w ༷ɾυΩϡϝϯτΛදݱͰ͖Δ w ίʔυϨϏϡʔΛָʹͰ͖Δ w ϦάϨογϣϯΛૣظʹݕͰ͖Δ w ઃܭΛվળͰ͖Δ ςετμϒϧͱਖ਼͖͘͠߹͏
ͳͥςετμϒϧΛ͏ͷ͔ ςετμϒϧͱਖ਼͖͘͠߹͏
ϗϯϞϊΛ͍ͬͯΔͱ ෆ߹͕ग़Δ෦ΛΧόʔ͢ΔͨΊ ςετμϒϧͱਖ਼͖͘͠߹͏
ςετμϒϧ͕͋Δͱخ͍͜͠ͱ ✔ ςετΛߴɾ҆ఆɾಠཱ࣮ͯ͠ߦͰ͖ΔΑ͏ʹ͢Δ ✔ ✔ ·࣮͕ͩଘࡏ͠ͳ͍ґଘʹରͯ͠ςετΛॻ͚Δ ςετରͷϩδοΫ͚ͩʹूதͰ͖Δ ςετμϒϧͱਖ਼͖͘͠߹͏
ςετμϒϧΛΘͳ͍ͱɺ 465ͷશͯͷ༷ʹؔ৺͕͋Δঢ়ଶ ςετμϒϧͱਖ਼͖͘͠߹͏
ςετμϒϧʹͨ͠ॴ ʮ༷ʯͷؔ৺Λ࣋ͨͳͯ͘ྑ͘ͳΔ ςετμϒϧͱਖ਼͖͘͠߹͏
ςετμϒϧʹ͢Δͱ 465ͷݕূ͍༷͕ͨ͠ΑΓࡍཱͭ ςετμϒϧͱਖ਼͖͘͠߹͏
ςετμϒϧͷදݱํ๏ ϞοΫ ελϒ εύΠ ϑΣΠΫ μϛʔ ςετμϒϧͱਖ਼͖͘͠߹͏
ςετμϒϧͷදݱํ๏ ϞοΫ ελϒ εύΠ ϑΣΠΫ μϛʔ ςετμϒϧͱਖ਼͖͘͠߹͏
w ͲͪΒςετμϒϧͷҰछ w ϞοΫ฿ʴݕূ w ελϒ฿ w ϞοΫΛ͏͖໘ w ςετμϒϧʹʮݕূʯͷ؍Λ͍ͨ͠ͱ͖
ϞοΫͱελϒ ςετμϒϧͱਖ਼͖͘͠߹͏
ελϒΛ͏ͱ͍͏બ ϗϯϞϊΛ͏ͱෆ߹͕ग़Δ ςετͰදݱ͍༷ͨ͠ʹ͓͍ͯॏཁͰͳ͍ ςετμϒϧͱਖ਼͖͘͠߹͏
w ςετμϒϧʹ͢ΔʹϗϯϞϊͩͱෆ߹͕ग़Δ w ελϒʹ͢ΔʹࣗΒʮχηϞϊʯʹ͢Δ w ʢϞοΫͰͳ͍ͷͰʣݕূ͢Β͠ͳ͍ w ϓϩμΫτίʔυͱဃ͕ग़ΔՄೳੑ͕͋Δ w ˢͷϦεΫ͕͋Δ্Ͱɺ
ςετͰදݱ͍༷ͨ͠ʹ͓͍ͯॏཁͰͳ͍ ελϒΛ͏ͱ͍͏બ ςετμϒϧͱਖ਼͖͘͠߹͏
ελϒΛ͏ҙࢥܾఆΛ͢Δ࣌ ✔ ςετͷຊ࣭ʹؔͳ͍ ✔ ✔ ଞͰςετ͞Ε͍ͯΔ͜ͱ͕࣮֬ʹอূ͞Ε͍ͯΔ ҆ఆ͍ͯ͠Δʢ͋·Γίʔυมߋ͠ͳͦ͏ͳͱ͜Ζʣ ςετμϒϧͱਖ਼͖͘͠߹͏
ελϒʹϦεΫ͕͋Δ ͜ͷϦεΫΛेཧղ্ͨ͠Ͱ͏ ςετμϒϧͱਖ਼͖͘͠߹͏
ςετͷ݁Ռʗ࣮ࡍͷৼΔ͍ ࣮ࡍͷৼΔ͍͕ ਖ਼͍͠ ࣮ࡍͷৼΔ͍͕ ؒҧ͍ ςετͷ݁Ռ ޭ ਅӄੑ ِӄੑ ςετͷ݁Ռ
ࣦഊ ِཅੑ ਅཅੑ ࢀߟॻ੶୯ମςετͷߟ͑ํʗ͍ํ ςετμϒϧͱਖ਼͖͘͠߹͏
ʮِӄੑʯʹ͍ͭͯৄ͘͠ΈΔ ࣮ࡍͷৼΔ͍͕ ਖ਼͍͠ ࣮ࡍͷৼΔ͍͕ ؒҧ͍ ςετͷ݁Ռ ޭ ਅӄੑ ِӄੑ ςετͷ݁Ռ
ࣦഊ ِཅੑ ਅཅੑ ࢀߟॻ੶୯ମςετͷߟ͑ํʗ͍ํ ςετμϒϧͱਖ਼͖͘͠߹͏
ِӄੑͱ l ୯ମςετͷߟ͑ํʗ͍ํ ୈষྑ͍୯ମςετΛߏ͢Δຊͷப ςετ͕ޭͨ͠ͷʹ͔͔ΘΒͣɺݕূ͞Εͨ ػೳʹ͕ܽؕ͋ͬͨ߹ɺͦͷςετʹ͕ ͋Δ͜ͱʹͳΓ·͢ɻ͜ͷΑ͏ʹͳͬͯ͠·͏͜ ͱΛِӄੑʢGBMTFOFHBUJWFʣͱݺͼɺʜʢུʣ ςετμϒϧͱਖ਼͖͘͠߹͏
w ِӄੑόά͕͋Δͷʹςετ͕௨Δ͜ͱ w ϓϩμΫτίʔυͱςετίʔυͷဃΛڐ͢͜ͱʹΑ ΓɺِӄੑΛҾ͖ى͜͢Մೳੑ͕͋Δ w Ұݟ͢Δͱ1"44͍ͯ͠ΔͷͰɺ͚ͬ͜͏ةݥ ελϒͷϦεΫʮِӄੑʯ ςετμϒϧͱਖ਼͖͘͠߹͏
ʮِཅੑʯʹ͍ͭͯৄ͘͠ΈΔ ࣮ࡍͷৼΔ͍͕ ਖ਼͍͠ ࣮ࡍͷৼΔ͍͕ ؒҧ͍ ςετͷ݁Ռ ޭ ਅӄੑ ِӄੑ ςετͷ݁Ռ
ࣦഊ ِཅੑ ਅཅੑ ࢀߟॻ੶୯ମςετͷߟ͑ํʗ͍ํ CUX ςετμϒϧͱਖ਼͖͘͠߹͏
ِཅੑͱ l ୯ମςετͷߟ͑ํʗ͍ํ ୈষྑ͍୯ମςετΛߏ͢Δຊͷப ςετ͕ࣦഊͨ͠ͷʹ͔͔ΘΒͣ ɺݕূ͞Εͨػೳͷৼ Δ͍͕ਖ਼͍͠߹ɺͦͷςετʹ͕͋Δ͜ͱ ʹͳΓ·͢ɻ͜ͷΑ͏ʹͳͬͯ͠·͏͜ͱΛِཅੑ ʢGBMTFQPTJUJWFʣͱݺͼɺͦͷςετӕͷܯࠂΛൃ͠ ͍ͯΔ͜ͱʹͳΓ·͢ɻ
CUX ςετμϒϧͱਖ਼͖͘͠߹͏
w ෦࣮ʹڧ͘ґଘ͠ɺϦϑΝΫλ͚ͨͩ͠Ͱ'"*- w 'SBHJMF5FTU w ࣌ࠁɾॱংɾཚʹґଘ͠ɺϥϯμϜʹյΕΔ w 'MBLZ5FTU ِཅੑʹͳΓ͍͢యܕྫ CUX
ςετμϒϧͱਖ਼͖͘͠߹͏
Ͳ͏͢ΕΑ͔͔ͬͨ ςετμϒϧͱਖ਼͖͘͠߹͏
w ͦͦελϒΛ͏ඞཁ͕ͳ͔ͬͨ w ґଘઌ͕υϝΠϯϩδοΫͦͷͷˠຊΛ͏͖໘ w ʮָ͔ͩΒʯͰελϒΛબΜͩͷ͕ؒҧ͍ w ͦͦઃܭ͕ѱ͍ͱݴ͏͔͠Εͳ͍ w ͦΜͳʹґଘઌඞཁʁͱ͔
w ʮॻ͖ʹ͍͘ʯϓϩμΫτίʔυΛݟ͢νϟϯε Λ࠶;Γ͔͑Δ ςετμϒϧͱਖ਼͖͘͠߹͏
ςετμϒϧ ศརͳಓ۩Ͱͳ͘ తͷ͋Δಓ۩ ςετμϒϧͱਖ਼͖͘͠߹͏
ྑ͍ςετίʔυΛॻ͍ͯΒ͏ͨΊͷ "*׆༻๏ ςετμϒϧͱਖ਼͖͘͠߹͏
w "*ͱʮྑ͍ςετίʔυͱԿ͔ʯΛࡲΓ߹ΘͤΔ w ͜ͷ؍ΛࣗΒ͕͍࣋ͬͯΔඞཁ͕͋Δ w ࢲʹͱͬͯͷྑ͍ςετίʔυ w ςετίʔυΛಡΜ͚ͩͩͰ༷͕Θ͔Δ͜ͱ w දݱ͍༷ͨ͠ΛཱͨͤΔͨΊʹɺෆ߹͕͋Δ෦
͚ͩϞοΫɾελϒ͕దʹΘΕ͍ͯΔ͜ͱ ྑ͍ςετίʔυΛॻ͍ͯΒ͏ͨΊͷ"*׆༻๏ ςετμϒϧͱਖ਼͖͘͠߹͏
w """ύλʔϯʢ"SSBOHF"DU"TTFSUʣΛඞͣकΒͤΔ w ςετέʔε໊ϧʔϧͰറΔPSࣗͰॻ͖ग़͢ w ༷Λ໊લʹදݱͤ͞Δ w ϞοΫɾελϒͷ͍Ͳ͜ΖΛ໌ࣔ͢Δ w ࣮ৄࡉʹറΒΕ͗ͨ͢ϞοΫͩΒ͚ςετʹͤ͞ͳ͍
w Կ͔֬Ίͳ͍ελϒͩΒ͚ςετʹͤ͞ͳ͍ ྑ͍ςετίʔυΛॻ͍ͯΒ͏ͨΊͷ"*׆༻๏ ςετμϒϧͱਖ਼͖͘͠߹͏
·ͱΊ
ࠓͷΰʔϧ ʮྑ͍ςετʯΛॻͨ͘Ίͷࢦ͕Θ͔Δ ʮςετμϒϧʯͱ͏·͖͘߹͏
ʮྑ͍ςετʯͱ ༷Λදݱ͍ͯ͠Δςετͷ͜ͱ
4FCBTUJBO#FSHNBOOࢯ ͦ͏ݴ͍ͬͯΔͷͰ؍͍ͯͩ͘͞ 1)1ΧϯϑΝϨϯεখాݪΩʔ ϊʔτ
ྑ͍ςετΛॻ͜͏ ྑ͍ςετΛॻ͔ͤΑ͏
࠷ޙʹେએ
1)1ΧϯϑΝϨϯεখాݪ ʢʣ
Thanks! Enjoy your Hokkaido! χ͕ͱ͏