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
2
6.9k
5ヶ月でカバレッジを20%から90%にあげた話
y_ahiru
December 01, 2019
Tweet
Share
More Decks by y_ahiru
See All by y_ahiru
恣意性から考える、変更に強いモデルの作り方
yahiru
1
2.3k
責務と認知負荷を整える! 抽象レベルを意識した関心の分離
yahiru
10
2.8k
さいきょうのレイヤードアーキテクチャについて考えてみた
yahiru
3
1.1k
フロントエンドエンジニアも知っておきたい HTTP/3 で変わること
yahiru
16
13k
ゆるふわCQRS入門
yahiru
2
750
設計におけるソリューションドメイン
yahiru
3
1.8k
PHPで始めるGitHub Actions
yahiru
1
860
入門ミューテーションテスト/ A bigginer's guide to Mutation testing
yahiru
0
1.6k
Eloquentに別れを告げるタイミングについて考えた
yahiru
2
2.1k
Other Decks in Programming
See All in Programming
Railsの気持ちを考えながらコントローラとビューを整頓する/tidying-rails-controllers-and-views-as-rails-think
moro
4
290
Event Storming
hschwentner
3
1.3k
Gemini for developers
meteatamel
0
120
CSC307 Lecture 12
javiergs
PRO
0
440
Amazon Bedrockを活用したRAGの品質管理パイプライン構築
tosuri13
5
870
Lambda のコードストレージ容量に気をつけましょう
tattwan718
0
190
AI によるインシデント初動調査の自動化を行う AI インシデントコマンダーを作った話
azukiazusa1
2
790
その「common」ディレクトリ、腐っていませんか?
kinocoboy2
1
100
nilとは何か 〜interfaceの構造とnil!=nilから理解する〜 / Understanding nil in Go Interface Representation and Why nil != nil
kuro_kurorrr
0
300
2026年 エンジニアリング自己学習法
yumechi
0
150
CSC307 Lecture 06
javiergs
PRO
0
700
2025年の活動の振り返り
hideg
0
110
Featured
See All Featured
BBQ
matthewcrist
89
10k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
89
Ethics towards AI in product and experience design
skipperchong
2
210
Being A Developer After 40
akosma
91
590k
Facilitating Awesome Meetings
lara
57
6.8k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2.2k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
Designing for Timeless Needs
cassininazir
0
140
Done Done
chrislema
186
16k
It's Worth the Effort
3n
188
29k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
290
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 ͢Δ
ɾΧόϨοδશମͷதͰ͜Ε͚ͩͷίʔυ͕ςετதʹ ࣮ߦ͞Ε·ͨ͠Αͱ͍͏ࣄ࣮Ͱ͔͠ͳ͍ ɾͦΕҎ্ͷҙຯΛݟग़͢ͷςετίʔυͷ࣭ΛධՁͰ ͖ͳ͍ݶΓඍົ ɾઌ΄ͲͷۃͳྫͷΑ͏ʹΞϓϦέʔγϣϯͷ࣭ʹҰ ߩݙ͠ͳ͍··ΧόϨοδΛ͋͛Δ͜ͱͰ͖Δ ࣄ࣮ͱਪ ΧόϨοδຊʹ༗ޮͳࢦඪͳͷ͔