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
1k
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
ときめかないミーティングはアップデートのシグナル #scrumosaka
asumikam
3
930
Harnessing the Power of Mocks and Stubs in PHPUnit / #laravellivejp
asumikam
0
1k
委員長たちの「コシ」
asumikam
0
480
書籍「ユーザーストーリーマッピング」が私のバイブル
asumikam
4
600
PHPUnitの「Depends」を使うと次のテストに返り値を渡せるの、なんで?読むぞ! #phpcon_odawara
asumikam
0
89
「通るまでRe-run」から卒業!落ちないテストを書く勘所
asumikam
3
1.2k
PHPコミュニティのあるきかた & ちいさく PHPUnitをつくってみる / Tech Challenge Party 2026
asumikam
0
170
ubuntu-latest から ubuntu-slim へ移行しよう!コスト削減うれしい~!
asumikam
0
1.3k
ちいさくPHPUnitをつくり、仕組みと拡張ポイントを探る
asumikam
3
1.3k
Other Decks in Technology
See All in Technology
『三匹の子ぶた』から学ぶネットワークセキュリティの昔と今 / Network Security: Then and Now Through the Lens of The Three Little Pigs
nttcom
1
1.6k
【CEDEC2026】コードレビュー支援ツール開発から学ぶ:LLMを用いた業務システムの実践的な運用設計と誤出力対策
cygames
PRO
0
510
モノリス Rails でも日中に rails db:migrate を走らせたい! / Daytime rails db:migrate on Monolithic Rails!
euglena1215
1
140
メルカリのグローバルアプリで挑んだ AlloyDB 運用と課題解決の実践記
hatappi
0
230
AIは実装を速くする。では、私たちは何を今作るべきか?-立場を越えてリリースに向き合ったチーム開発の実践 / 20260801 Hiromi Nakaya and Naoki Takahashi
shift_evolve
PRO
3
370
認知負荷をGemini で溶かす — GKE 基盤「Orbit」における AI エージェントの実践
sansantech
PRO
1
240
ボトムアップ文化が強い組織で セキュリティをどう根付かせていくかの現在進行形の話 / Making Security Stick in a Bottom-Up Organization
yamaguchitk333
0
110
AIQAのナレッジ構築について
qatonchan
1
150
ウォーターフォール開発案件のPMとしてAI活用を模索している話
hatahata021
3
310
【Google Cloud Next Tokyo'26】Gemini Enterprise と Oracle AI Database で実現する、業務データ活用を実現する AI エージェント実装
shisyu_gaku
0
210
QAタスクをスキル化したいときに考えること
aomoriringo
0
170
【CEDEC2026】次世代デジタルカードゲームのサーバー設計と運用 〜『Shadowverse: Worlds Beyond』の舞台裏~
cygames
PRO
0
780
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
The Curse of the Amulet
leimatthew05
2
13k
Google's AI Overviews - The New Search
badams
0
1.1k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
210
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
250
Design in an AI World
tapps
1
270
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
440
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
460
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Paper Plane (Part 1)
katiecoart
PRO
1
10k
The Curious Case for Waylosing
cassininazir
1
450
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! χ͕ͱ͏