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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
120
ちいさくPHPStanをつくってみる
asumikam
1
240
ときめかないミーティングはアップデートのシグナル #scrumosaka
asumikam
8
2.5k
Harnessing the Power of Mocks and Stubs in PHPUnit / #laravellivejp
asumikam
1
1.2k
委員長たちの「コシ」
asumikam
0
610
書籍「ユーザーストーリーマッピング」が私のバイブル
asumikam
4
690
PHPUnitの「Depends」を使うと次のテストに返り値を渡せるの、なんで?読むぞ! #phpcon_odawara
asumikam
0
150
「通るまでRe-run」から卒業!落ちないテストを書く勘所
asumikam
3
1.4k
PHPコミュニティのあるきかた & ちいさく PHPUnitをつくってみる / Tech Challenge Party 2026
asumikam
0
200
Other Decks in Technology
See All in Technology
書き手が人でもAIでも正しくなる道、SREを埋め込んだDeveloper Platform / tech drivers day8
chmikata
4
770
アカウント統制の健康診断
kenichinakamura
1
200
日本AIベンチャーレポート2026
kentarofujii
0
240
Claude for Google Workspaces ポン出し/claude-for-google-workspace-slide-conversion
emiki
0
13k
ビジネス部門からPOを迎えての半年間の進歩と課題
zozotech
PRO
0
150
Microsoft のサポート ライフサイクルを理解する
murachiakira
PRO
0
210
dbt Semantic Layerで進めるenechainのデータ民主化
akizhou
1
270
「社外イベント=意識高い」の壁を壊せ!元々無関心だった僕らが部内で社外イベントを民主化して15人を連れ出すまで
say_no_w
0
140
Agent × Maestro で始める モバイル E2E 端末準備からテスト実行・結果確認まで
sansantech
PRO
0
210
Filter What the LLM Reads: RAG Governance with AgentCore Gateway
yakumo
0
110
顧客価値を追いかけたら、プライシングにたどり着いた
sansantech
PRO
2
1k
AI時代、つくる力を自分たちの手に。 ──電通×KAG、アジャイルとAI駆動開発で挑む開発の変革
yuukiyo
3
390
Featured
See All Featured
Embracing the Ebb and Flow
colly
88
5.2k
Darren the Foodie - Storyboard
khoart
PRO
4
4k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
2
2.1k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
380
Are puppies a ranking factor?
jonoalderson
2
4.1k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
740
How to build a perfect <img>
jonoalderson
1
6.2k
My Coaching Mixtape
mlcsv
0
360
Into the Great Unknown - MozCon
thekraken
41
2.8k
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
580
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! χ͕ͱ͏