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
BackstopJSで始める CSSリグレッションテスト / backstopjs-css-test
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
fortkle
May 22, 2017
Technology
1.6k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
BackstopJSで始める CSSリグレッションテスト / backstopjs-css-test
fortkle
May 22, 2017
More Decks by fortkle
See All by fortkle
無駄な物をなるべく作らないリプレイス戦略 / replace-strategy-phperkaigi2021
fortkle
1
2.7k
フルリモート時代のカンバン運用 / kanban-operation-in-remote
fortkle
0
790
GitHub Actionsで始めるPHPアプリケーションのCI実践入門 / ga-phperkaigi2020
fortkle
3
6.6k
余裕を生み出すコードレビュー 〜レビュイー編〜 / code-review-phpcon-2019
fortkle
8
7.6k
「設計振り返り」を始めてみようと思っている話 / architecture reflection
fortkle
3
640
「ママ向けNo.1アプリ」の 更なる成長を支える仕組み / startup-engineer-night-connehito
fortkle
2
360
良いテストデータ、悪いテストデータ / testdata-antipattern
fortkle
4
7k
PhpStorm導入アンチパターン / phpstorm-anti-pattern
fortkle
0
2.2k
やさしいコーディング規約の導入〜その後〜 / yasashii-sonogo
fortkle
7
3.7k
Other Decks in Technology
See All in Technology
【Oracle AI Spotlight ウェビナー】AWSか、Azureか、Google Cloudか。その議論にオラクルを含める意義。
oracle4engineer
PRO
1
210
【視聴者参加型!】AWSセキュリティアンチパターンクイズ
syoshie
0
170
Guerilla InnerSource in enterprises, during the AI hype
onenashev
PRO
0
140
いま、生成AIにKaggleをどこまで 任せられるか — ROGIIコンペでの進め方とTips
k951286
2
1.3k
Nav2、Nav3 ... はたまた自作?〜 作って理解する Nav3 の設計意図 〜 / Nav2, Nav3 ... or Build Your Own? — Understanding Nav3's design intent by building it from scratch
yanzm
0
180
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
55k
はじめてのDatabricks:技術者向けワークショップ / beginner-workshop
databricksjapan
PRO
0
140
プロダクト思考 × 基盤思考を AIで実現する Compound Engineering
tkc66buzz
1
220
bet_ai_day_2026_session02
agenticsec
1
790
【試作】IoT x AIエージェント
happysamurai294
0
110
Bet AI Day 2026丨AIによって本質に戻るシステムリスク管理
layerx
PRO
0
700
生成AI時代の クレデンシャルとパーミッション設計
nrinetcom
PRO
3
1.4k
Featured
See All Featured
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
360
Mobile First: as difficult as doing things right
swwweet
225
10k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Are puppies a ranking factor?
jonoalderson
2
3.9k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
320
Color Theory Basics | Prateek | Gurzu
gurzu
0
450
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
320
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.7k
Transcript
ՈͷຖΛͬͱসإʹɻ 1)1#-5 #BDLTUPQ+4Ͱ࢝ΊΔ $44ϦάϨογϣϯςετ
ࣗݾհ ߴߊ !GPSULMF !GPSULMF ίωώτגࣜձࣾͰͨΒ͘1)1FSɻ ࠷ۙ+BWBTDSJQUͱ$44ͷൺ͕ଟ͘ͳ͖ͬͯͨɻ
ࣗݾհ ߴߊ !GPSULMF !GPSULMF ίωώτגࣜձࣾͰͨΒ͘1)1FSɻ ࠷ۙ+BWBTDSJQUͱ $44ͷൺ͕ଟ͘ͳ͖ͬͯͨɻ
ࣗݾհ ߴߊ !GPSULMF !GPSULMF ίωώτגࣜձࣾͰͨΒ͘1)1FSɻ ࠷ۙ+BWBTDSJQUͱ$44ͷൺ͕ଟ͘ͳ͖ͬͯͨɻ $44
1)1#-5Ͱ͕͢ ࠓ$44ͷΛ͠·͢ɻ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ
Έͳ͞Μ$44ॻ͍ͯ·͔͢ʁ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ
$44ͱ͍͑ʜ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ
w ཧ͞Ε͍ͯͳ͍ৄࡉ w ܾ·͍ͬͯͳ͍ఆٛॴʗ໋໊نଇͷํ w 6*ͷมߋͷʹগͣͭ͠૿͑ͯ͘Δະ༻ελΠϧ ΧΦεʹͳΓ͍͢ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ
w 8FCαʔϏεΛ։ൃ͍ͯ͠ΔνʔϜͳΒɺ)5.-$44 ΛΤϯδχΞ͕୲͢Δ͜ͱΑ͋͘Δʢʁʣ w ࢲ͕ͦ͏Ͱ͢ w ʮԶͨͪงғؾͰ$44Λ͍ͬͯΔʯ w ͳΜͯͷઈରྑ͘ͳ͍ʂ w
ͷͰͪΌΜͱษڧ͠·͠ΐ͏ʗ͠·ͨ͠ 1)1FS$44ͱԑΛΕΔΘ͚Ͱͳ͍ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ
ษڧͯ͠ʮྑ͍$44ʯ͕Կ͔ Θ͔͖ͬͯͨ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ
$44ϦϑΝΫλϦϯάͷํ๏ ϓϩάϥϛϯά΄Ͳॆ࣮͍ͯ͠ͳ͍ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ
ͳͷͰࢼߦࡨޡ͠ͳ͕Β $44Λվળ͍͔ͯ͘͠͠ͳ͍ʂ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ
վળʁ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ
w ʮ͜Εͬͯͳͦ͞͏ͩͳʂʯ w ʮ೦ͷͨΊHSFQͯ͠ιʔείʔυʹͳ͍͜ͱΛ֬ೝʂʯ w ʮΑ͠আʂʯ Αʙ͠ʂͬͯͳ͍ελΠϧফͧ͢ʂ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ
w ʮίϯϙʔωϯτ่͕Εͯ·͢ʂʯ w ʮελΠϧ͕ͨͬͯͳ͍ϖʔδ͕͋Γ·͢ʯ w ಈతʹηϨΫλΛࢦఆ͍ͯͨ͠Γʜ ͋ΕΕʜ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ
$44ͷվળ͍͠ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ
w ςετͳ͠ͷϦϑΝΫλϦϯάා͍ w ϦϑΝΫλϦϯάલͱޙΛൺֱͯ͠ఆ֎ͷҧ͍͕ ൃੜ͍ͯ͠ͳ͍͜ͱΛ֬ೝ͍ͨ͠ w ग़དྷΔ͜ͱͳΒखಈආ͚͍ͨ ϦϑΝΫλϦϯά͢ΔͳΒςετ͕ཉ͍͠ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ
w มߋͷલޙͰεΫγϣΛऔͬͯࠩΛνΣοΫͰ͖Δ ϏδϡΞϧϦάϨογϣϯςετπʔϧ w $44͕ҙਤ่ͤͣΕ͍ͯͳ͍͔νΣοΫͰ͖Δ w ݄ͷେ෯ͳόʔδϣϯΞοϓ W Ͱ ͔ͳΓ͍͘͢ͳͬͨ
w HVMQ͔Βͷશ٫ w KTPOͷଞʹOPEFNPEVMFTʹΑΔ$POpHαϙʔτ ͦ͜ͰHBSSJT#BDLTUPQ+4 #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ
͜Μͳ෩ʹ͕ࠩݟΕ·͢ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ
#BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ มߋલ มߋޙ ࠩ
#BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ มߋલ มߋޙ ࠩ ݟग़͠ͷจݴ͕ มΘ͍ͬͯΔ
#BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ มߋલ มߋޙ ࠩ ը૾͕ʮʯ͔Β ʮωΠϏʔʯʹมΘ͍ͬͯΔ
#BDLTUPQ+4ͷ࢝Ίํ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ
w GPSULMFCBDLTUPQKTDTTUFTU w -BSBWFMͰ࡞ͬͨͨͩͷ8FCϖʔδ w ϩάΠϯೝূػೳ͋Γ w ະϩάΠϯɺҰൠϢʔβʔɺཧऀϢʔβʔͰ ݟ͑ํ͕গ͠ҟͳΔ w
ࠂͷΑ͏ʹϥϯμϜʹදࣔ͞ΕΔը૾͕ͰͨΓɺ Ϟʔμϧͷ͋Δϖʔδ͕ଘࡏ αϯϓϧϦϙδτϦΛ࡞ͬͨ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ
w Γ͍ͨ͜ͱ w ֤Ϣʔβʔʢ"ENJO /PSNBM /POMPHJOʣຖʹ ϖʔδ่͕Ε͍ͯͳ͍͔ w 1$ͱϞόΠϧͰϖʔδ่͕Ε͍ͯͳ͍͔ w
ϥϯμϜʹग़ΔࠂಈతͳϞʔμϧͳͲ ͏·͘ରॲ͍ͨ͠ αϯϓϧϦϙδτϦΛ࡞ͬͨ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ
w Γ͍ͨ͜ͱ w ֤Ϣʔβʔʢ"ENJO /PSNBM /POMPHJOʣຖʹ ϖʔδ่͕Ε͍ͯͳ͍͔ w 1$ͱϞόΠϧͰϖʔδ่͕Ε͍ͯͳ͍͔ w
ϥϯμϜʹग़ΔࠂಈతͳϞʔμϧͳͲ ͏·͘ରॲ͍ͨ͠ αϯϓϧϦϙδτϦΛ࡞ͬͨ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ ͜ͷαΠτΛରʹ #BDLTUPQ+4ΛͬͯςετΛॻ͍ͨ
ςετγφϦΦΛॻ͘ ϦϑΝΫλϦϯάલͷσʔλʢ3FGFSFODFʣΛอଘ ϦϑΝΫλϦϯάޙͷσʔλʢ5FTUʣΛอଘ͠ 3FGFSFODFͱൺֱ͢Δ ࠩͱͯ͠ग़ͨ5FTU͕ҙਤͨ͠ͷͰ͋Ε 3FGFSFODFʹऔΓࠐΉʢࠓճ͜͜লུʣ #BDLTUPQ+4ͷ࢝Ίํ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ
ςετγφϦΦΛॻ͘ʢҰ෦লུʣ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ #BDLTUPQ+4ͷ࢝Ίํᶃ loadScenarios('backstop_data/scenarios/') module.exports = { 'viewports': [ {
'name': 'PC', 'width': 1920, 'height': 1080 }, { 'name': 'Mobile', 'width': 375, 'height': 667 } ], 'scenarios': allScenarios, 'onBeforeScript': 'onBefore.js', 'debug': false } CBDLTUPQDPOpHKT ςετέʔεશମʹ͔͔ΘΔ ઃఆΛهड़͢Δ
ςετγφϦΦΛॻ͘ʢҰ෦লུʣ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ #BDLTUPQ+4ͷ࢝Ίํᶃ loadScenarios('backstop_data/scenarios/') module.exports = { 'viewports': [ {
'name': 'PC', 'width': 1920, 'height': 1080 }, { 'name': 'Mobile', 'width': 375, 'height': 667 } ], 'scenarios': allScenarios, 'onBeforeScript': 'onBefore.js', 'debug': false } ςετ͢Δ7JFXQPSUΛࢦఆ ʢࠓճ1$ͱϞόΠϧʣ
ςετγφϦΦΛॻ͘ʢҰ෦লུʣ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ #BDLTUPQ+4ͷ࢝Ίํᶃ loadScenarios('backstop_data/scenarios/') module.exports = { 'viewports': [ {
'name': 'PC', 'width': 1920, 'height': 1080 }, { 'name': 'Mobile', 'width': 375, 'height': 667 } ], 'scenarios': allScenarios, 'onBeforeScript': 'onBefore.js', 'debug': false } ςετγφϦΦΛΨΨοͱ ಡΈࠐΉػߏΛ࣮ߦͯ͠
ςετγφϦΦΛॻ͘ʢҰ෦লུʣ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ #BDLTUPQ+4ͷ࢝Ίํᶃ loadScenarios('backstop_data/scenarios/') module.exports = { 'viewports': [ {
'name': 'PC', 'width': 1920, 'height': 1080 }, { 'name': 'Mobile', 'width': 375, 'height': 667 } ], 'scenarios': allScenarios, 'onBeforeScript': 'onBefore.js', 'debug': false } ͦͷ݁ՌΛDPOpHʹ৯ΘͤΔ
ςετγφϦΦΛॻ͘ʢҰ෦লུʣ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ #BDLTUPQ+4ͷ࢝Ίํᶃ loadScenarios('backstop_data/scenarios/') module.exports = { 'viewports': [ {
'name': 'PC', 'width': 1920, 'height': 1080 }, { 'name': 'Mobile', 'width': 375, 'height': 667 } ], 'scenarios': allScenarios, 'onBeforeScript': 'onBefore.js', 'debug': false } ֤ςετͷલʹΓ͍ͨॲཧΛ ·ͱΊͯࢦఆͰ͖Δ ʢ6"ͷઃఆϩάΠϯʣ
ςετγφϦΦΛॻ͘ʢҰ෦লུʣ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ #BDLTUPQ+4ͷ࢝Ίํᶃ [ { "label": "ADMIN_none_welcome", "url": "http://localhost:8000/", "delay":
500, "loginAs": "Admin" }, { "label": "Normal_none_welcome", "url": "http://localhost:8000/", "delay": 500, "loginAs": "Normal" }, { "label": "NON-LOGIN_none_welcome", "url": "http://localhost:8000/", "delay": 500 } ] XFMDPNFKTPO ࣮ࡍͷςετγφϦΦ͕ ॻ͔ΕͨϑΝΠϧ
ςετγφϦΦΛॻ͘ʢҰ෦লུʣ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ #BDLTUPQ+4ͷ࢝Ίํᶃ [ { "label": "ADMIN_none_welcome", "url": "http://localhost:8000/", "delay":
500, "loginAs": "Admin" }, { "label": "Normal_none_welcome", "url": "http://localhost:8000/", "delay": 500, "loginAs": "Normal" }, { "label": "NON-LOGIN_none_welcome", "url": "http://localhost:8000/", "delay": 500 } ] ςετຖʹ໊લͱͳΔʮϥϕϧʯ ͱʮςετ͢Δ63-ʯΛઃఆ
ςετγφϦΦΛॻ͘ʢҰ෦লུʣ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ #BDLTUPQ+4ͷ࢝Ίํᶃ [ { "label": "ADMIN_none_welcome", "url": "http://localhost:8000/", "delay":
500, "loginAs": "Admin" }, { "label": "Normal_none_welcome", "url": "http://localhost:8000/", "delay": 500, "loginAs": "Normal" }, { "label": "NON-LOGIN_none_welcome", "url": "http://localhost:8000/", "delay": 500 } ] ࠓճʮMPHJO"TʯͰࢦఆͨ͠ ݖݶͷϢʔβʔͰϩάΠϯ͢Δ Α͏ʹPO#FGPSFKTͰલॲཧ
ϦϑΝΫλϦϯάલͷσʔλΛอଘ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ #BDLTUPQ+4ͷ࢝Ίํᶄ $ backstop reference --config=./ backstop.config.js ϦϑΝΫλϦϯάલͷσʔλ ʢ3FGFSFODFʣΛอଘ͢ΔίϚ
ϯυ
ϦϑΝΫλϦϯάલͷσʔλΛอଘ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ #BDLTUPQ+4ͷ࢝Ίํᶄ $ backstop reference --config=./ backstop.config.js ࠷ॳʹॻ͍ͨ CBDLTUPQDPOpHKTΛࢦఆ
ϦϑΝΫλϦϯάલͷσʔλΛอଘ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ #BDLTUPQ+4ͷ࢝Ίํᶄ $ backstop reference --config=./ backstop.config.js ࣮ߦ͕ྃͨ͠Β४උ0,
ʙ৻ॏ͔ͭେʹϦϑΝΫλϦϯάʙ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ
ϦϑΝΫλϦϯάޙͷσʔλΛอଘ͠ൺֱ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ #BDLTUPQ+4ͷ࢝Ίํᶅ $ backstop test --config=./ backstop.config.js SFGFSFODF͕UFTUʹ มΘ͚ͬͨͩʂ
ϦϑΝΫλϦϯάޙͷσʔλΛอଘ͠ൺֱ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ #BDLTUPQ+4ͷ࢝Ίํᶅ $ backstop test --config=./ backstop.config.js ࣮ߦ͕ऴΘΔͱɾɾɾ
ϦϑΝΫλϦϯάޙͷσʔλΛอଘ͠ൺֱ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ #BDLTUPQ+4ͷ࢝Ίํᶅ Ϩϙʔτ͕ ϒϥβͰ։͘
ϦϑΝΫλϦϯάޙͷσʔλΛอଘ͠ൺֱ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ #BDLTUPQ+4ͷ࢝Ίํᶅ Ϩϙʔτ͕ ϒϥβͰ։͘
wಈతͳཁૉʢࠂϥϯμϜʹදࣔ͞ΕΔը૾ʣ͕ݪҼ wαϯϓϧϦϙδτϦͰ$BTQFSKTΛͬͯআ֎ઃఆΛ ͨ͠Γͯ͠'BJMFE݅ʹͳΔΑ͏ʹͯ͋͠Γ·͢ʂ wͦͷଞɺಈ࡞͕ෆ҆ఆͳͱ͖͕ͨ·ʹ͙͋ͬͯ݅Β͍ 'BJMFEʹͳΔ͜ͱ͕͋Γ·͕͢͜͜ࠓޙʹظʜ w෦Ͱར༻͍ͯ͠Δ1IBOUPN+4ͷ།Ұͷϝϯςφ͕ ࠷ۙҾୀͯ͠͠·ͬͨͷͰ)FBEMFTT$ISPNFαϙʔτ ͷಈΛࢹதʜ 'BJMFE݅ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ
w #BDLTUPQ+4Λ͏ͱݱ࣮తͳϨϕϧͷ $44ϦάϨογϣϯςετ͕ॻ͚Δʂ w $BTQFS+4Λ͑ϖʔδಡΈࠐΈޙʹ ৭ʑΫϦοΫͨ͠Γೖྗͨ͠ޙͷը໘ςετͰ͖Δ w ·ͩ·ͩൃల్্ͳͷͰࠓޙʹظ ·ͱΊ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ #BDLTUPQ+4Ͱ࢝ΊΔ$44ϦάϨογϣϯςετ