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
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
770
GitHub Actionsで始めるPHPアプリケーションのCI実践入門 / ga-phperkaigi2020
fortkle
3
5k
余裕を生み出すコードレビュー 〜レビュイー編〜 / code-review-phpcon-2019
fortkle
8
7.5k
「設計振り返り」を始めてみようと思っている話 / architecture reflection
fortkle
3
620
「ママ向け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
製造現場での生成AIの活用、およびエージェントAIの実装のあり方、AVEVAの取り組み
iotcomjpadmin
0
210
フロントエンドイチゲキ実装 ― Figmaデザインと画面設計書からAIに実装・テストを書かせるための”下ごしらえ” / 20260627 Yusuke Mazuka
shift_evolve
PRO
0
110
GitHub Copilot運用のリアル ~AI Credit時代にどう向き合うか~
takafumisu2uk1
0
580
“全部コピーしない”ファイルデータの活用 : — FSx for ONTAP × S3 Tables × Icebergで作るメタデータカタログ
yoshiki0705
0
140
打造你的 AI 工作流:Agent Skill + MCP 實戰工作坊
appleboy
0
290
IaC コードを資産へ:AWS CDK 社内ライブラリと横断展開 / aws-summit-japan-2026
gotok365
10
1.7k
Docker Desktop不要の時代が来る? WSL標準の「wslc」で Linuxコンテナを動かしてみた.
ueponx
0
380
SRE歴2ヶ月でも開発6年の知見を活かして、チームで止まっていた環境改善を前に進めた話
a_ono
0
160
40代で“やっとエンジニアになれた”――閉じた学びを開き、空の青さを知る / 20260628 Naoki Takahashi
shift_evolve
PRO
4
1.5k
Kotlin 開発のツラミを爆破した話! / Explode the difficulty of Kotlin dev!
eller86
0
130
小さいから、全部わかる。— 常駐AI "xangi" のすすめ
sugupoko
0
200
「ビジネスがわかるエンジニア」とは何か?
ryooob
0
440
Featured
See All Featured
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Believing is Seeing
oripsolob
1
160
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Building Applications with DynamoDB
mza
96
7.1k
Six Lessons from altMBA
skipperchong
29
4.3k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
450
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
790
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
How to Think Like a Performance Engineer
csswizardry
28
2.7k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
62
55k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
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ϦάϨογϣϯςετ