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
94
0
Share
「嘘をつくテスト」の失敗例から学ぶ 良いテストコード #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
790
委員長たちの「コシ」
asumikam
0
350
書籍「ユーザーストーリーマッピング」が私のバイブル
asumikam
4
530
PHPUnitの「Depends」を使うと次のテストに返り値を渡せるの、なんで?読むぞ! #phpcon_odawara
asumikam
0
64
「通るまでRe-run」から卒業!落ちないテストを書く勘所
asumikam
3
1.1k
PHPコミュニティのあるきかた & ちいさく PHPUnitをつくってみる / Tech Challenge Party 2026
asumikam
0
140
ubuntu-latest から ubuntu-slim へ移行しよう!コスト削減うれしい~!
asumikam
0
1.2k
ちいさくPHPUnitをつくり、仕組みと拡張ポイントを探る
asumikam
3
1.2k
ちいさくPHPUnitをつくってみる
asumikam
0
130
Other Decks in Technology
See All in Technology
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
6
1.5k
AI時代から振り返るTerraform drift運用の歴史 / AI Age Reflections on the History of Terraform Drift Operations
aeonpeople
2
620
エンジニアは生成AIと どのように向き合うべきか? ことばの意味という観点から
verypluming
3
310
Claude Codeを組織で使いこなす— サーバサイドAIエージェント運用の実践知
techtekt
PRO
0
150
ITエンジニアを取り巻く環境とキャリアパス / A career path for Japanese IT engineers
takatama
4
1.8k
Amazon Bedrock 経由の Claude Cowork を試してみよう・MCP にも繋いでみよう
sugimomoto
0
310
最低限これだけ押さえれ大丈夫_Claude Enterprise/Team企業展開ガバナンス入門
tkikuchi
1
580
プラットフォームエンジニア ワークショップ/ platform-workshop
databricksjapan
0
150
Java正規表現エンジン(NFA)の仕組みと パフォーマンスを維持するための最適化手法
takeuchi_132917
0
160
Platform Engineering as a Product: Criteria for Improvement and Multi-Tenant Design
kumorn5s
0
430
関西に縁あるMicrosoft MVPsが語るCopilotの未来
kasada
0
830
TypeScript Compiler APIとPHP-Parserを活用し、TypeScriptとPHPで型を共有する
shuta13
0
290
Featured
See All Featured
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
What's in a price? How to price your products and services
michaelherold
247
13k
Documentation Writing (for coders)
carmenintech
77
5.4k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
830
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
540
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
150
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
200
We Are The Robots
honzajavorek
0
240
New Earth Scene 8
popppiees
3
2.3k
Statistics for Hackers
jakevdp
799
230k
How to Think Like a Performance Engineer
csswizardry
28
2.6k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
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! χ͕ͱ͏