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
「嘘をつくテスト」の失敗例から学ぶ 良いテストコード #frontend_phpcon_do
Search
asumikam
June 06, 2026
Technology
970
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
Harnessing the Power of Mocks and Stubs in PHPUnit / #laravellivejp
asumikam
0
1k
委員長たちの「コシ」
asumikam
0
470
書籍「ユーザーストーリーマッピング」が私のバイブル
asumikam
4
600
PHPUnitの「Depends」を使うと次のテストに返り値を渡せるの、なんで?読むぞ! #phpcon_odawara
asumikam
0
84
「通るまでRe-run」から卒業!落ちないテストを書く勘所
asumikam
3
1.2k
PHPコミュニティのあるきかた & ちいさく PHPUnitをつくってみる / Tech Challenge Party 2026
asumikam
0
160
ubuntu-latest から ubuntu-slim へ移行しよう!コスト削減うれしい~!
asumikam
0
1.3k
ちいさくPHPUnitをつくり、仕組みと拡張ポイントを探る
asumikam
3
1.3k
ちいさくPHPUnitをつくってみる
asumikam
0
150
Other Decks in Technology
See All in Technology
壊して学ぶAWS CDK: そのcdk deployで消えるもの、残るもの
k_adachi_01
1
410
公式ドキュメントの歩き方etc
coco_se
1
120
AI時代のYAGNI:「爆速で無駄になった機能」からの学び / 20260720 Naoki Takahashi
shift_evolve
PRO
2
320
Type-safe IaC for Dart
coborinai
0
160
AIコード生成×サプライチェーン攻撃 — PHPが直面する“二重の信頼問題
shinyasaita
0
200
AI Agent SaaS を支える自社仮想化基盤への挑戦と実運用 / ai-agent-saas-virtualization
flatt_security
3
4.2k
LLMやAIエージェントをソフトウェアに組み込むプラクティス
shibuiwilliam
2
420
Foxgloveについて 実際にExtensionを開発して公開するまでの話 / About Foxglove: The Story of Developing and Releasing an Extension
ry0_ka
0
300
ヘルスケア領域における AI 活用と その安全性担保のための取り組み (Leveraging AI in Healthcare and Our Efforts to Ensure Its Safety) - Google I/O Extended Tokyo 2026, July 11, 2026
zettaittenani
0
430
実践!既存 Project への AI-Driven Development 適用〜 一ヶ月で Project 唯一のフロントエンドエンジニアを作り出せ〜
lycorptech_jp
PRO
0
230
AI Driven AI Governance
pict3
0
490
アップデートで何が変わった?デモで学んで使いこなすIBM Bob2.0
muehara
0
120
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
220
The Mindset for Success: Future Career Progression
greggifford
PRO
0
420
Being A Developer After 40
akosma
91
590k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
380
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
730
The Limits of Empathy - UXLibs8
cassininazir
1
500
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
650
Designing for humans not robots
tammielis
254
26k
My Coaching Mixtape
mlcsv
0
170
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! χ͕ͱ͏