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
5ヶ月でカバレッジを20%から90%にあげた話
Search
y_ahiru
December 01, 2019
Programming
7k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
5ヶ月でカバレッジを20%から90%にあげた話
y_ahiru
December 01, 2019
More Decks by y_ahiru
See All by y_ahiru
恣意性から考える、変更に強いモデルの作り方
yahiru
1
2.6k
責務と認知負荷を整える! 抽象レベルを意識した関心の分離
yahiru
10
3k
さいきょうのレイヤードアーキテクチャについて考えてみた
yahiru
3
1.2k
フロントエンドエンジニアも知っておきたい HTTP/3 で変わること
yahiru
16
13k
ゆるふわCQRS入門
yahiru
2
810
設計におけるソリューションドメイン
yahiru
3
1.8k
PHPで始めるGitHub Actions
yahiru
1
880
入門ミューテーションテスト/ A bigginer's guide to Mutation testing
yahiru
0
1.7k
Eloquentに別れを告げるタイミングについて考えた
yahiru
2
2.1k
Other Decks in Programming
See All in Programming
AI時代のUIはどこへ行く?その2!
yusukebe
19
6.9k
スマートグラスで並列バイブコーディング
hyshu
0
100
正しくソフトウェアを作る、前提を疑うための認知の視点 / doubt-premise
minodriven
18
6.3k
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
220
OSもどきOS
arkw
0
470
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
130
Java × distroless で 軽量なコンテナイメージを / Java on Distroless
contour_gara
0
510
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
3.9k
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
330
Why Laravel apps break—Mastering the fundamentals to keep them maintainable
kentaroutakeda
1
340
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
480
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
150
Featured
See All Featured
RailsConf 2023
tenderlove
30
1.5k
Discover your Explorer Soul
emna__ayadi
2
1.1k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.3k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2k
Everyday Curiosity
cassininazir
0
230
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
Writing Fast Ruby
sferik
630
63k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
180
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
160
How to make the Groovebox
asonas
2
2.2k
Transcript
PHP Conference Japan 2019 ٢ా͋ͻΔ (@strtyuu) ϲ݄ͰΧόϨοδΛ ͔Βʹͨ͠
ࣗݾհ ٢ా͋ͻΔ!TUSUZVV τΡΪϟολʔגࣜձࣾ 4PGUXBSF&OHJOFFS -BSBWFM+1$POGFSFODF ίΞελοϑ
ɾΧόϨοδ͋͛Δ͜ͱΛख์͠ʹਪ͢ΔͷͰ͋Γ ·ͤΜɻ ɾΧόϨοδඞͣ͠ΞϓϦέʔγϣϯͷ࣭ͱൺྫ͠ ·ͤΜɻ ⚠$BVUJPO
Ռൃද
$PWFSBHF 5FTUT
$PWFSBHF 5FTUT Min.t ϦϦʔε
$PWFSBHF 5FTUT PHP Conference Ԡื Min.t ϦϦʔε
$PWFSBHF 5FTUT PHP Conference Ԡื Min.t ϦϦʔε ࠾͞ΕΔ
ͳͥɺ ΧόϨοδΛ্͔͛ͨͬͨͷ͔
ɾؾܰʹίʔυͷमਖ਼͕͍ͨ͠ ɾίʔυϦʔσΟϯάͷίετΛԼ͍͛ͨ ΧόϨοδΛ্͔͛ͨͬͨཧ༝ ΧόϨοδΛ্͔͛ͨͬͨཧ༝
ɾΫϥε͕ͨͪΧδϡΞϧʹґଘ͍͋ͬͯ͠Δ ɾϑϨʔϜϫʔΫϨΠϠͷվળΛ͠ଓ͚͍͕ͨɺӨڹൣғ ͕ͱ͍ͯ ؾܰʹίʔυͷमਖ਼͕͍ͨ͠ ΧόϨοδΛ্͔͛ͨͬͨཧ༝
ɾΫϥε͕ͨͪΧδϡΞϧʹґଘ͍͋ͬͯ͠Δ ɾϑϨʔϜϫʔΫϨΠϠͷվળΛ͠ଓ͚͍͕ͨɺӨڹൣғ ͕ͱ͍ͯ ؾܰʹίʔυͷमਖ਼͕͍ͨ͠ ΧόϨοδΛ্͔͛ͨͬͨཧ༝ ɾӨڹൣғ͕Θ͔Βͣɺςετ࿙Ε͕ൃੜ͢ΔՄೳੑ͕͋ Δ
ɾ5PHFUUFSଓ͍͍ͯΔαʔϏε ɾྺ࢙తܦҢͷ͋Δίʔυવ͋Δ ίʔυϦʔσΟϯάͷίετΛԼ͍͛ͨ ΧόϨοδΛ্͔͛ͨͬͨཧ༝
ɾ5PHFUUFSଓ͍͍ͯΔαʔϏε ɾྺ࢙తܦҢͷ͋Δίʔυવ͋Δ ίʔυϦʔσΟϯάͷίετΛԼ͍͛ͨ ΧόϨοδΛ্͔͛ͨͬͨཧ༝ ɾಡΜͰ༷Λཧղ͢Δͷʹίετ͕ଟ͔͔͘Δ ɾαʔϏε͕ଓ͚ଓ͘΄ͲɺͦͷίετΛ͏ਓ͕ଟ͘ ͳΔ
ΧόϨοδΛ্͛ΔաఔͰ ͬͨ͜ͱ
ɾϧʔϧɾํܾΊ ɾςετڥͷඋ ɾFUD ΧόϨοδΛ্͛ΔաఔͰͬͨ͜ͱ ΧόϨοδΛ্͛ΔաఔͰͬͨ͜ͱ
ɾϧʔϧɾํܾΊ ɾςετڥͷඋ ɾFUD ΧόϨοδΛ্͛ΔաఔͰͬͨ͜ͱ ΧόϨοδΛ্͛ΔաఔͰͬͨ͜ͱ
ɾ·ͣ֎ଆ͔Βςετ͢Δ ɾϦϑΝΫλϦϯά࠷খݶʹɺςετΛॻ͘͜ͱΛ༏ઌ ɾʹΌʙΜΫϥεΛڐ͢ ϧʔϧɾํܾΊ ϧʔϧɾํܾΊ
ɾϒϥοΫϘοΫεςετͳΒɺ࣮ͷ࣭Λؾʹͤͣς ετͰ͖Δ͜ͱ͕ଟ͍ ɾΧόϨοδ͕Ք͗ͦ͢͏ ·ͣ֎ଆ͔Βςετ͢Δ ϧʔϧɾํܾΊ
ɾΨοπϦϦϑΝΫλϦϯάͯ͠Δͱ͕࣌ؒΓͳ͍ ɾઃܭϦϑΝΫλϦϯάܧଓͯ͠܁Γฦ͠ߦͳ͍ͬͯ ͘ͷ ɾ͍͖ͳΓᘳΛࢦ͢ͷͰͳ͘Ұาͣͭண࣮ʹਐΊͯ ͍͘ ɾᘳओٛμϝ ϦϑΝΫλϦϯά࠷খݶʹ ςετΛॻ͘͜ͱΛ༏ઌ ϧʔϧɾํܾΊ
ɾཧతͳϦϑΝΫλϦϯάͱ΄Ͳԕ͍͕ɺݱ࣮ͷ߹ ͔Β͍ͼͭͳܗͰଥڠͤ͟ΔΛ͑ͳ͔ͬͨΫϥε ɾϦϑΝΫλϦϯάͷաఔͰઈରʹൃੜ͢Δ ɾྑ͘ͳΔͨΊͷୈҰาͱͯ͠ड͚ೖΕΔ͔͠ͳ͍ ʹΌʙΜΫϥεΛ࡞Δ ςετڥͷඋ
ɾϧʔϧɾํܾΊ ɾςετڥͷඋ ɾFUD ΧόϨοδΛ্͛ΔաఔͰͬͨ͜ͱ ΧόϨοδΛ্͛ΔաఔͰͬͨ͜ͱ
ɾ؆୯ʹςετσʔλΛ࡞ΔΈΛ༻ҙ͢Δ ɾ؆୯ʹ݁߹ςετΛͰ͖ΔΈΛ༻ҙ͢Δ ɾςετͷ࣮ߦΛૣ͘͢Δ ɾάϩʔόϧϔϧύʔΛϞοΫͰ͖ΔΑ͏ʹ͢Δ ςετڥͷඋ ςετڥͷඋ
ɾ؆୯ʹςετσʔλΛ࡞ΔΈΛ༻ҙ͢Δ ɾ؆୯ʹ݁߹ςετΛͰ͖ΔΈΛ༻ҙ͢Δ ɾςετͷ࣮ߦΛૣ͘͢Δ ɾάϩʔόϧϔϧύʔΛϞοΫͰ͖ΔΑ͏ʹ͢Δ ςετڥͷඋ ςετڥͷඋ
؆୯ʹςετσʔλΛ࡞ΔΈΛ༻ҙ͢Δ ςετڥͷඋ ɾશίϯετϥΫλͳΫϥεͰɺ"DUJWF3FDPSEͰ ɺͲͪΒͰରԠͰ͖ΔΑ͏ʹ͍ͨ͠ ɾॊೈʹΛΈཱ͍ͯͨ ɾঢ়ଶͷ۩ମతͳΛநԽͰ͖ΔΑ͏ʹ͍ͨ͠
؆୯ʹςετσʔλΛ࡞ΔΈΛ༻ҙ͢Δ ςετڥͷඋ ɾશίϯετϥΫλͳΫϥεͰɺ"DUJWF3FDPSEͰ ɺͲͪΒͰରԠͰ͖ΔΑ͏ʹ͍ͨ͠ ɾॊೈʹΛΈཱ͍ͯͨ ɾঢ়ଶͷ۩ମతͳΛநԽͰ͖ΔΑ͏ʹ͍ͨ͠ ɾͪΐ͏Ͳྑ͍ϥΠϒϥϦ͕ݟ͔ͭΒͳ͍ɾɾɾɻ
࡞ͬͨ ςετڥͷඋ ࣗ༝ʹσϑΥϧτΛ ্ॻ͖Մೳ ঢ়ଶΛநԽ ࢦఆ͚ͨͩ͠࡞Ͱ͖Δ
ɾ؆୯ʹςετσʔλΛ࡞ΔΈΛ༻ҙ͢Δ ɾ؆୯ʹ݁߹ςετΛͰ͖ΔΈΛ༻ҙ͢Δ ɾςετͷ࣮ߦΛૣ͘͢Δ ɾάϩʔόϧϔϧύʔΛϞοΫͰ͖ΔΑ͏ʹ͢Δ ςετڥͷඋ ςετڥͷඋ
؆୯ʹ݁߹ςετΛͰ͖ΔΈΛ༻ҙ͢Δ ςετڥͷඋ ɾݱঢ়ͩͱ݁߹ςετ͕ॻ͖ʹ͍͘ ɾϑϨʔϜϫʔΫͷϥΠϑαΠΫϧ͝ͱςετ͕͍ͨ͠ ɾ%*ίϯςφͷఆٛͱ͔ؒతʹςετ͍ͨ͠
࡞ͬͨ ςετڥͷඋ
ɾ؆୯ʹςετσʔλΛ࡞ΔΈΛ༻ҙ͢Δ ɾ؆୯ʹ݁߹ςετΛͰ͖ΔΈΛ༻ҙ͢Δ ɾςετͷ࣮ߦΛૣ͘͢Δ ɾάϩʔόϧϔϧύʔΛϞοΫͰ͖ΔΑ͏ʹ͢Δ ςετڥͷඋ ςετڥͷඋ
ςετͷ࣮ߦΛૣ͘͢Δ ςετڥͷඋ ɾͨ͘͞Μςετͷ13Λग़͢ͷͰɺ$*ͳΔ͘ૣ͘ճͬ ͯ͘Εͨํ͕خ͍͠
ςετͷ࣮ߦΛૣ͘͢Δ ςετڥͷඋ ɾͨ͘͞Μςετͷ13Λग़͢ͷͰɺ$*ͳΔ͘ૣ͘ճͬ ͯ͘Εͨํ͕خ͍͠ ɾQDPWͰΧόϨοδΛܭଌ͢Δ
QDPWΛೖΕΔ ςετڥͷඋ ɾYEFCVHͱҧ͍ɺσόοάػೳ͕ͳ͘ΧόϨοδܭଌʹ ಛԽ͍ͯ͠ΔͨΊɺѹతʹ͘ϝϞϦফඅগͳ͍ ɾQIQECHΑΓૣ͍ Speed up PHPUnit Code
Coverage Analysis - Nicolas Cabot - Medium https://medium.com/@nicocabot/speed-up-phpunit-code-coverage-analysis-4e35345b3dad
QDPWΛೖΕΔ ςετڥͷඋ %PDLFSpMF ίϚϯυ
ɾ؆୯ʹςετσʔλΛ࡞ΔΈΛ༻ҙ͢Δ ɾ؆୯ʹ݁߹ςετΛͰ͖ΔΈΛ༻ҙ͢Δ ɾςετͷ࣮ߦΛૣ͘͢Δ ɾάϩʔόϧϔϧύʔΛϞοΫͰ͖ΔΑ͏ʹ͢Δ ςετڥͷඋ ςετڥͷඋ
ɾJT%FW CPPMΈ͍ͨͳͭ ɾ݅ذʹΘΕ͍ͯΔ άϩʔόϧϔϧύʔ ςετڥͷඋ
ɾJT%FW CPPMΈ͍ͨͳͭ ɾ݅ذʹΘΕ͍ͯΔ άϩʔόϧϔϧύʔ ςετڥͷඋ ɾڍಈΛม͑Δ͜ͱ͕ग़དྷͳ͍ ɾ݅ذͷ͏ͪύλʔϯ͔͠ςετग़དྷͳ͍
ςετڥͷඋ ͍ͨΔॴͰΘΕ͍ͯΔͷͰ શ෦ϦϑΝΫλϦϯά͢Δ༨༟ͳ͍ɾɾɾ
ςετڥͷඋ https://kunit.jp/archives/108 1)17$3͕DVSMؔΛͬऔΔํ๏ /&8(".&!LVOJU
ςετڥͷඋ
ςετڥͷඋ
ςετڥͷඋ ͜ΕɺͳΜͰग़དྷΔͷͰɾɾɾʁ
ςετڥͷඋ
ςετڥͷඋ Φεεϝ͠·ͤΜʂ ͝ར༻ࣗݾͰɾɾɾ
ͬͯΈͯͲ͏͔ͩͬͨ
ɾ͔͚ͨίετݟ߹ͬͨՌ͕ग़Δͷ͔ݱ࣌ͰΘ͔ Βͳ͍ ɾΓ͗ͨ͢ؾ͕͢ΔɺͦΕͧΕͷΞϓϦέʔγϣ ϯʹ߹ͬͨΧόϨοδͰे ɾΧόϨοδΛ͍͔͚Δͷඍົ ɾϩʔΧϧͷ1)1Λʹ্͛ͯΈͨΒɺखಈςετͰ ൃݟͰ͖ͳͦ͞͏ͳόάΛݟ͚ͭΔ͜ͱ͕ग़དྷͨ ɾϦϑΝΫλϦϯάΛ͢Δ͕ग़དྷ্͕ͬͨͱ͜Ζͳͷ ͰɺΉ͠Ζ͔͜͜Β͕ελʔτ ˋ·Ͱ্͛ͯΈͨײ
ͬͯΈͯͲ͏͔ͩͬͨ
$VSBUJPO$PNNVOJDBUJPO1MBUGPSN IUUQTUPHFUUFSDPN ·ͱΊΑ͏ɺ͋ͭ·Ζ͏
ΧόϨοδ ຊʹ༗ޮͳࢦඪͳͷ͔
ɾमਖ਼ʹର͢Δ҆શੑͷ߹͍Λࣔͯ͘͠ΕΔ ɾ࣭Λվળ͢ΔͨΊͷΩοΧέʹͳΔ ɾςετͷཏੑ͕ߴ͍͜ͱྑ͍͜ͱ ɾΧόϨοδΛຒΊΔͨΊͷςετͰόάʹؾ͚ͮΔ͜ͱ ͕͋Δ ༗ޮͷҙݟ ΧόϨοδຊʹ༗ޮͳࢦඪͳͷ͔
ɾΧόϨοδ͚ͩͰ࣭Λஅ͢Δͷ͍͠ ɾςετͷ࣭ͱؔͳ͍ ແޮͷҙݟ ΧόϨοδຊʹ༗ޮͳࢦඪͳͷ͔
ɾΧόϨοδΧόϨοδͰ͔͠ͳ͍ ɾΧόϨοδ͚ͩͰԿݴ͏͜ͱ͕Ͱ͖ͳ͍ ͷ݁ ΧόϨοδຊʹ༗ޮͳࢦඪͳͷ͔
ΧόϨοδ ্ςΫχοΫ
!DPEF$PWFSBHF*HOPSF
ແҙຯͳίʔυΛҰԯߦՃͯ͠ UIJTBTTFSU5SVF USVF ͢Δ
ɾΧόϨοδશମͷதͰ͜Ε͚ͩͷίʔυ͕ςετதʹ ࣮ߦ͞Ε·ͨ͠Αͱ͍͏ࣄ࣮Ͱ͔͠ͳ͍ ɾͦΕҎ্ͷҙຯΛݟग़͢ͷςετίʔυͷ࣭ΛධՁͰ ͖ͳ͍ݶΓඍົ ɾઌ΄ͲͷۃͳྫͷΑ͏ʹΞϓϦέʔγϣϯͷ࣭ʹҰ ߩݙ͠ͳ͍··ΧόϨοδΛ͋͛Δ͜ͱͰ͖Δ ࣄ࣮ͱਪ ΧόϨοδຊʹ༗ޮͳࢦඪͳͷ͔