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
PHPUnitの「Depends」を使うと次のテストに返り値を渡せるの、なんで?読むぞ! #p...
Search
asumikam
April 11, 2026
Programming
69
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PHPUnitの「Depends」を使うと次のテストに返り値を渡せるの、なんで?読むぞ! #phpcon_odawara
PHPカンファレンス小田原 2026
https://phpcon-odawara.jp/ja/2026/
asumikam
April 11, 2026
More Decks by asumikam
See All by asumikam
「嘘をつくテスト」の失敗例から学ぶ 良いテストコード #frontend_phpcon_do
asumikam
0
700
Harnessing the Power of Mocks and Stubs in PHPUnit / #laravellivejp
asumikam
0
990
委員長たちの「コシ」
asumikam
0
440
書籍「ユーザーストーリーマッピング」が私のバイブル
asumikam
4
580
「通るまでRe-run」から卒業!落ちないテストを書く勘所
asumikam
3
1.1k
PHPコミュニティのあるきかた & ちいさく PHPUnitをつくってみる / Tech Challenge Party 2026
asumikam
0
150
ubuntu-latest から ubuntu-slim へ移行しよう!コスト削減うれしい~!
asumikam
0
1.3k
ちいさくPHPUnitをつくり、仕組みと拡張ポイントを探る
asumikam
3
1.2k
ちいさくPHPUnitをつくってみる
asumikam
0
140
Other Decks in Programming
See All in Programming
ふつうのFeature Flag実践入門
irof
7
4k
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
180
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
5.1k
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
200
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
120
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
270
Java × distroless で 軽量なコンテナイメージを / Java on Distroless
contour_gara
0
550
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
6
1.3k
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
530
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
790
3Dシーンの圧縮
fadis
1
770
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
700
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
Site-Speed That Sticks
csswizardry
13
1.2k
Designing for humans not robots
tammielis
254
26k
A Tale of Four Properties
chriscoyier
163
24k
How STYLIGHT went responsive
nonsquared
100
6.2k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
270
How to Ace a Technical Interview
jacobian
281
24k
A Soul's Torment
seathinner
6
2.9k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Transcript
1)16OJUͷʮ%FQFOETʯΛ͏ͱ ࣍ͷςετʹฦΓΛͤΔͷɺͳΜͰʁ ಡΉͧʂ BTVNJLBN
1)16OJUͷ"UUSJCVUFT
w 1)16OJUҎ߱ɺ%PDίϝϯτʹهड़͢Δํ๏͔Β 1)1ͷ"UUSJCVUFͱஈ֊తʹҠߦ͖ͯͨ͠ w Έͳ͞Μͷ͓ؾʹೖΓͷ1)16OJU"UUSJCVUFTͳΜͰ ͔͢ʁ 1)16OJUͷ"UUSJCVUFɺ৭ʑͬͯΔʁ
ͨͱ͑ɺ%BUB1SPWJEFSɻ
ͨͱ͑ɺ5FTU8JUIɻ
ͨͱ͑ɺ(SPVQɻ WFOEPSCJOQIQVOJUHSPVQTMPX
ͨͱ͑ɺ%FQFOET
w ͋Δςετϝιου͕ผͷςετϝιουʹʮґଘʯ͠ ͍ͯΔ͜ͱΛએݴ͢Δ"UUSJCVUF w ґଘݩͷςετ͕ޭ͢Δͱɺґଘઌςετ͕࣮ߦ͞Ε ͞ΒʹґଘݩͷฦΓ͕ґଘઌͷҾͱͯ͠͞ΕΔ w ࣦഊͨ͠߹ґଘઌͷςετʮ4ʢεΩοϓʣʯ ʹͳΔ 1)16OJU"UUSJCVUFT%FQFOET
1)16OJU"UUSJCVUFT%FQFOET
1)16OJU"UUSJCVUFT%FQFOET ґଘઌςετ
1)16OJU"UUSJCVUFT%FQFOET ґଘݩςετ͕ޭ͢Ε ґଘઌςετ͕࣮ߦ͞ΕΔ
1)16OJU"UUSJCVUFT%FQFOET ґଘݩςετ͕ࣦ͠ഊͨ͠Βɺ ͜ͷςετશମ͕ߦΘΕͳ͍
1)16OJU"UUSJCVUFT%FQFOET ͔͠ɺґଘݩͷσʔλΛड͚औΕΔʂ ʢ%FUB1SPWJEFSΈ͍ͨͩͳ🧐ʣ
ͳΜͰʁ
ؾʹͳΔʂʂʂ
ಡΉͧʂ
ࠓͷൃද w %FQFOET͕ͲΜͳΈͰಈ͍͍ͯΔ͔Λ ίʔυϦʔσ Οϯάͯ͠શʹཧղ͢Δ w %FQFOETͷ͍Ͳ͜Ζʁ
ਃ͠Ε·ͨ͠ w͋͢Έ 𝕏 !BTVNJLBN wגࣜձࣾϦϯέʔδ w1)1ΧϯϑΝϨϯεখాݪ࣮ߦҕһ
ಡΉͧ
w ಡΈ·ͨ͠ w αϚϦʔͱ͓ͯ͠ಧ͚͠·͢ w ग़ͯ͘ΔίʔυҙਤΛ͑ΔͨΊ؆қԽ͍ͯ͠Δͷ Ͱ࣮ࡍͷͷͱҟͳΓ·͢ ಡΉͧ ಡΉͧ
ͬ͘͟Γʙͷߏ "UUSJCVUFΛࢀߟʹςετΛฒͼସ͑Δ ґଘؔνΣοΫɾॲཧ ςετ࣮ߦ ฦΓͷ֨ೲ લॲཧ ࣮ॲཧ ಡΉͧ
ͬ͘͟Γʙͷߏ "UUSJCVUFΛࢀߟʹςετΛฒͼସ͑Δ ґଘؔνΣοΫɾॲཧ ςετ࣮ߦ ฦΓͷ֨ೲ લॲཧ ࣮ॲཧ ಡΉͧ
"UUSJCVUFΛࢀߟʹςετΛฒͼସ͑Δ > UFTU UFTU UFTU <%FQFOET bUFTU > ಡΉͧ
"UUSJCVUFΛࢀߟʹςετΛฒͼସ͑Δ > UFTU UFTU UFTU <%FQFOET bUFTU > > UFTU
UFTU UFTU ಡΉͧ
w <%FQFOET>Λ3F fl FDUJPOͰಡΈऔΓɺʮͲͷςετ͕ Կʹґଘ͍ͯ͠Δ͔ʯΛ෦දݱʹม͢Δ w ֤ςετʹʮࣗΑΓઌʹޭ͍ͯ͠ͳ͚ΕͳΒͳ͍ ςετͷϦετʯΛ࣋ͨͤΔ w ͦͷϦετΛͱʹɺґଘݩ͕ඞͣઌʹདྷΔΑ͏࣮ߦ
ॱΛΈସ͑Δ "UUSJCVUFΛࢀߟʹςετΛฒͼସ͑Δ ಡΉͧ
ͬ͘͟Γʙͷߏ "UUSJCVUFΛࢀߟʹςετΛฒͼସ͑Δ ςετ࣮ߦલ ςετ࣮ߦ ςετ࣮ߦޙ લॲཧ ࣮ॲཧ ಡΉͧ
1)16OJUa'SBNFXPSLa5FTU$BTFIBOEMF%FQFOEFODJFT ಡΉͧ
1)16OJUa'SBNFXPSLa5FTU$BTFIBOEMF%FQFOEFODJFT ґଘ͕ಛʹͳ͍߹Կ͠ͳ͍ ಡΉͧ
1)16OJUa'SBNFXPSLa5FTU$BTFIBOEMF%FQFOEFODJFT ґଘϦετΛ͙Δ͙Δ ಡΉͧ
1)16OJUa'SBNFXPSLa5FTU$BTFIBOEMF%FQFOEFODJFT ࠓ·ͰͷޭςετϦετΛΈͯ ΤϥʔʗεΩοϓॲཧ ಡΉͧ
1)16OJUa'SBNFXPSLa5FTU$BTFIBOEMF%FQFOEFODJFT ޭͨ͠ςετͷSFUVSO7BMVFΛऔಘ EFQFOEFODZ*OQVUʹ֨ೲ ಡΉͧ
1)16OJUa'SBNFXPSLa5FTU$BTFIBOEMF%FQFOEFODJFT ޭͨ͠ςετͷSFUVSO7BMVFΛऔಘ EFQFOEFODZ*OQVUʹ֨ೲ ˣ͍ͭೖΕ͔ͨ·ͩΘ͔Βͳ͍Ͷ ಡΉͧ
1)16OJUa'SBNFXPSLa5FTU$BTFIBOEMF%FQFOEFODJFT ޭͨ͠ςετͷSFUVSO7BMVFΛऔಘ EFQFOEFODZ*OQVUʹ֨ೲ ˢ͜ͷޙ͏ͷ͔ͳʁ ˣ͍ͭೖΕ͔ͨ·ͩΘ͔Βͳ͍Ͷ ಡΉͧ
ςετ࣮ߦલɺԿΛ͍ͯ͠Δʁ w ґଘݩͷςετ͕ͯ͢ޭࡁΈ͔Λ֬ೝ͢Δ w શ෦ޭ͍ͯ͠ΕςετͷҾΛ४උ͢Δ w ҰͭͰະޭͳΒςετεΩοϓ͞ΕΔ w SFUVSO7BMVF EFQFOEFODZ*OQVUʁ🧐
w ࣍ͷॲཧ(0 ಡΉͧ
ͬ͘͟Γʙͷߏ "UUSJCVUFΛࢀߟʹςετΛฒͼସ͑Δ ςετ࣮ߦલ ςετ࣮ߦ ςετ࣮ߦޙ લॲཧ ࣮ॲཧ ಡΉͧ
1)16OJUa'SBNFXPSLa5FTU$BTFSVO5FTU ಡΉͧ
1)16OJUa'SBNFXPSLa5FTU$BTFSVO5FTU EFQFOEFODZ*OQVUΛҾʹ JOWPLF5FTU.FUIPE࣮ߦʂ ಡΉͧ
1)16OJUa'SBNFXPSLa5FTU$BTFJOWPLF5FTU.FUIPE ςετέʔεͷݺͼग़͠ʙʙʂʂʂ ಡΉͧ
1)16OJUa'SBNFXPSLa5FTU$BTFJOWPLF5FTU.FUIPE ςετέʔεͷݺͼग़͠ʙʙʂʂʂ UFTU3FTVMUΛฦ͍ͯ͠Δɻ͏ͷ͔ʂʁ ಡΉͧ
1)16OJUa'SBNFXPSLa5FTU$BTFSVO5FTU ͪͳΉͱʜ UIJTEBUBʹEBUB1SPWJEFSͷ͕ ೖ͍ͬͯͨʂ ಡΉͧ
w ґଘݩςετʢͳͲʣͷฦΓΛ݁߹ͯ͠ҾΛΈ ཱͯɺςετϝιουΛݺͼग़͢ w UFTU3FTVMUʁ🧐 w ࣍ͷॲཧ(0 ςετ࣮ߦ࣌ɺԿΛ͍ͯ͠Δʁ ಡΉͧ
ͬ͘͟Γʙͷߏ "UUSJCVUFΛࢀߟʹςετΛฒͼସ͑Δ ςετ࣮ߦલ ςετ࣮ߦ ςετ࣮ߦޙ લॲཧ ࣮ॲཧ ಡΉͧ
1)16OJUa'SBNFXPSLa5FTU$BTF SVO#BSF 1)16OJUa5FTU3VOOFSa5FTU3FTVMUa1BTTFE5FTUT UFTU.FUIPE1BTTFE ಡΉͧ
1)16OJUa'SBNFXPSLa5FTU$BTF SVO#BSF 1)16OJUa5FTU3VOOFSa5FTU3FTVMUa1BTTFE5FTUT UFTU.FUIPE1BTTFE ฦΓΛड͚औͬͯ UFTU.FUIPE1BTTFEʹ͠ʜ ಡΉͧ
1)16OJUa'SBNFXPSLa5FTU$BTF SVO#BSF 1)16OJUa5FTU3VOOFSa5FTU3FTVMUa1BTTFE5FTUT UFTU.FUIPE1BTTFE ಡΉͧ
1)16OJUa'SBNFXPSLa5FTU$BTF SVO#BSF 1)16OJUa5FTU3VOOFSa5FTU3FTVMUa1BTTFE5FTUT UFTU.FUIPE1BTTFE SFUVSO7BMVFʹ֨ೲ͍ͯ͠Δʂ ʢIBOEMF%FQFOEFODJFTͰΈͨͭʙʙʣ ಡΉͧ
w ฦΓΛϓϩηεશମͰڞ༗͞ΕΔྖҬʹอଘ͢Δ w ޙଓͷґଘςετ͜͜Λࢀরͯ͠ҾΛड͚औΔ ςετ࣮ߦޙɺԿΛ͍ͯ͠Δʁ ಡΉͧ
શʹཧղͨ͠ ಡΉͧ
શମͷ·ͱΊ w ʮલॲཧʯͰ͏·͍͜ͱฒͼସ͑ͯ w ʮ࣮ॲཧʯʢςετέʔεʣͰલͷSFUVSO7BMVFΛ ͏·͍͜ͱςετʹ͍ͯͨ͠ w ͏͚࣌ͩอ࣋͢ΔͰͳ͘ৗʹSFUVSO7BMVFΛ͢ w ಡΜͰΈΕʮͦ͏ͳͬͨΒͦ͏ͳΔΖʯͳॲཧͩͬͨ
w ͜ΕͰεοΩϦΕ·͢ ಡΉͧ
%FQFOETʹ͍ΛͤΔ
͍
͍ॴΉ͍ͣʂ ʢਖ਼ʣ
w ศརͦ͏ͱࢥ͍ͭͭ w ςετجຊʮಠཱʯͷํ͕خ͍͠ w ґଘؔΛ࡞Δͱࣦഊ͕࿈తͳεΩοϓΛੜΜͩΓɺ ҉ͷ࣮ߦॱং੍͕ੜ·ΕͨΓ͢Δ w ͨͩ͠ɺηοτΞοϓίετ͕ߴ͍ૢ࡞ɺঢ়ଶͷมભΛ εςοϓ͝ͱʹݕূ͍ͨ͠໘Ͱ༗ޮ͔ʁ
1)16OJUͷ%FQFOETʹ͍ΛͤΔ
None
None
৭ʑ͋Γͦ͏ʂ
%FQFOET༗ޮ׆༻͍ͯ͠Δਓ ৭ʑڭ͍͑ͯͩ͘͞ʂ
🍊͓ΘΓ🍊 Έͯ͘ΕͯŗžŜƄŪŤƃŝœŖ😘