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
E2Eツール「Nightmare」を使ってみよう
Search
potato4d(Takuma HANATANI)
September 19, 2016
Programming
1
530
E2Eツール「Nightmare」を使ってみよう
WordBench京都(#wbkyoto #wordbench) 9月のスライドです。
potato4d(Takuma HANATANI)
September 19, 2016
Tweet
Share
More Decks by potato4d(Takuma HANATANI)
See All by potato4d(Takuma HANATANI)
どうせキレイに書けない処理は逆にAIに書いてもらうほうが良い説 / #kyotojs 22
potato4d
3
430
TSX First な Zero-Runtime SSG potato4d/dodai とその仕組み / owned static site generator #kyotojs
potato4d
1
2.4k
Vue.js with TSX - From Vue 2.x to Vue 3 #v_tokyo11
potato4d
9
5k
終わりゆく Vue 2.x 時代の状態設計のアンサー - Vue 3 の Provider への期待 / The Last Architecture of the Vue 2.x
potato4d
25
7k
Web Worker を使ってブラウザ上でポケモンの画像を解析したい! / Pokemon recognition from screenshots in browser using web worker
potato4d
0
1.4k
Firebase & Google Cloud によるサーバーレス帳票管理 #FJUG / Serverless Architecture in Candy
potato4d
8
3.8k
NestJS meetup Tokyo Opening Talk / What is NestJS? #nestjs_meetup
potato4d
11
4.3k
私たちはなぜ SPA で開発するのか / Why you choose SPA
potato4d
39
28k
Amplify Console 誕生以来本番運用しつづけてわかったこと #awswakaran_tokyo
potato4d
6
3.6k
Other Decks in Programming
See All in Programming
CSC307 Lecture 03
javiergs
PRO
1
490
dchart: charts from deck markup
ajstarks
3
1k
ノイジーネイバー問題を解決する 公平なキューイング
occhi
0
110
Automatic Grammar Agreementと Markdown Extended Attributes について
kishikawakatsumi
0
200
ぼくの開発環境2026
yuzneri
0
240
生成AIを使ったコードレビューで定性的に品質カバー
chiilog
1
270
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
690
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
6.1k
AI Agent の開発と運用を支える Durable Execution #AgentsInProd
izumin5210
7
2.3k
360° Signals in Angular: Signal Forms with SignalStore & Resources @ngLondon 01/2026
manfredsteyer
PRO
0
130
Package Management Learnings from Homebrew
mikemcquaid
0
230
AI によるインシデント初動調査の自動化を行う AI インシデントコマンダーを作った話
azukiazusa1
1
740
Featured
See All Featured
How Software Deployment tools have changed in the past 20 years
geshan
0
32k
Making Projects Easy
brettharned
120
6.6k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
780
How to train your dragon (web standard)
notwaldorf
97
6.5k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
67
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
120
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Darren the Foodie - Storyboard
khoart
PRO
2
2.4k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.3k
Transcript
E2EπʔϧʮNightmareʯΛ ͬͯΈΑ͏ WordBench Kyoto 2016.09 TAKUMA Hanatani(Potato4d)
ࣗݾհ • Ֆ୩ɹຏ(@potato4d) • #wbkyoto ͷϞσϨʔλʔͬͯ·͢ • #frontkansai ͬͯ·͢ɻ •
࠷ۙJavaScriptʹͲͬΓ • ඞཁ͕ग़͖ͯͯॳΊͯe2eͬͨͷͰ ͯ͠Έ·͢
Agenda • Nightmareͱʁ • NightmareΛ͏ͱԿ͕Ͱ͖Δʁ • WordPressϓϥάΠϯ։ൃ࣌ʹཱͭͱ͜Ζ
Nightmareͱʁ
Nightmareͱʁ
Nightmareͱʁ • Node.jsϕʔεͷϔουϨεϒϥβ • ୯ମͰेʹe2eςετπʔϧͱͯ͠ར༻Մೳ • ݩʑPhantomJSͱ͍͏JSϥΠϒϥϦͷϥούʔ • ࠓElectronΛར༻͓ͯ͠Γɺ࠷৽ͷରԠόονϦ
Nightmareͱʁ • Node.jsϕʔεͷϔουϨεϒϥβ • ୯ମͰेʹe2eςετπʔϧͱͯ͠ར༻Մೳ • ݩʑPhantomJSͱ͍͏JSϥΠϒϥϦͷϥούʔ • ࠓElectronΛར༻͓ͯ͠Γɺ࠷৽ͷରԠόονϦ
Nightmareͱʁ • Node.jsϕʔεͷϔουϨεϒϥβ • ୯ମͰेʹe2eςετπʔϧͱͯ͠ར༻Մೳ • ݩʑPhantomJSͱ͍͏JSϥΠϒϥϦͷϥούʔ • ࠓElectronΛར༻͓ͯ͠Γɺ࠷৽ͷରԠόονϦ
Nightmareͱʁ • Node.jsϕʔεͷϔουϨεϒϥβ • ୯ମͰेʹe2eςετπʔϧͱͯ͠ར༻Մೳ • ݩʑPhantomJSͱ͍͏JSϥΠϒϥϦͷϥούʔ • ࠓElectronΛར༻͓ͯ͠Γɺ࠷৽ͷରԠόονϦ
e2eςετͱʁ
e2eςετͱʁ • γεςϜͷ͔Β·ͰΛཏతʹ֬ೝ͢Δςετͷ͜ ͱ • ઐ༻ͷe2eπʔϧϔουϨεϒϥβΛར༻͠ɺ୯Ұ ͷϓϩάϥϜͷI/O͚ͩͰͳ͘ɺ࣮ࡍͷΞϓϦέʔγϣ ϯΛಈ͔ͯ͠ਐΊ͍ͯ͘ • ॳΊͯͷόΠτઌͰΤΫηϧγʔτͰͬͯͨ
e2eςετͱʁ • γεςϜͷ͔Β·ͰΛཏతʹ֬ೝ͢Δςετͷ͜ ͱ • ઐ༻ͷe2eπʔϧϔουϨεϒϥβΛར༻͠ɺ୯Ұ ͷϓϩάϥϜͷI/O͚ͩͰͳ͘ɺ࣮ࡍͷΞϓϦέʔγϣ ϯΛಈ͔ͯ͠ਐΊ͍ͯ͘ • ॳΊͯͷόΠτઌͰΤΫηϧγʔτͰͬͯͨ
e2eςετͱʁ • γεςϜͷ͔Β·ͰΛཏతʹ֬ೝ͢Δςετͷ͜ ͱ • ઐ༻ͷe2eπʔϧϔουϨεϒϥβΛར༻͠ɺ୯Ұ ͷϓϩάϥϜͷI/O͚ͩͰͳ͘ɺ࣮ࡍͷΞϓϦέʔγϣ ϯΛಈ͔ͯ͠ਐΊ͍ͯ͘ • ॳΊͯͷόΠτઌͰΤΫηϧγʔτͰͬͯͨ
NightmareΛ͏ͱԿ͕Ͱ͖Δʁ
NightmareΛ͏ͱԿ͕Ͱ͖Δʁ
NightmareΛ͏ͱԿ͕Ͱ͖Δʁ • ϒϥβͰͰ͖Δૢ࡞શ͕ͯࣗಈԽͰ͖Δ • DOM͕ີʹؔΘΔ෦ͷςετ • ࣮ࡍͷૢ࡞ϑϩʔʹԠͨ͡ಈ࡞ςετ • ୯७ͳWebαΠτͰͷૢ࡞ͷࣗಈԽ
NightmareΛ͏ͱԿ͕Ͱ͖Δʁ • ϒϥβͰͰ͖Δૢ࡞શ͕ͯࣗಈԽͰ͖Δ • DOM͕ີʹؔΘΔ෦ͷςετ • ࣮ࡍͷૢ࡞ϑϩʔʹԠͨ͡ಈ࡞ςετ • ୯७ͳWebαΠτͰͷૢ࡞ͷࣗಈԽ
NightmareΛ͏ͱԿ͕Ͱ͖Δʁ • ϒϥβͰͰ͖Δૢ࡞શ͕ͯࣗಈԽͰ͖Δ • DOM͕ີʹؔΘΔ෦ͷςετ • ࣮ࡍͷૢ࡞ϑϩʔʹԠͨ͡ಈ࡞ςετ • ୯७ͳWebαΠτͰͷૢ࡞ͷࣗಈԽ
NightmareΛ͏ͱԿ͕Ͱ͖Δʁ • ϒϥβͰͰ͖Δૢ࡞શ͕ͯࣗಈԽͰ͖Δ • DOM͕ີʹؔΘΔ෦ͷςετ • ࣮ࡍͷૢ࡞ϑϩʔʹԠͨ͡ಈ࡞ςετ • WebαΠτͰͷ୯७ͳૢ࡞ͷࣗಈԽ
NightmareΛ͏ͱԿ͕Ͱ͖Δʁ DOM͕ີʹؔΘΔ෦ͷςετ DOM JavaScript DOM Event Event
NightmareΛ͏ͱԿ͕Ͱ͖Δʁ ࣮ࡍͷૢ࡞ϑϩʔʹԠͨ͡ಈ࡞ςετ Login Dashboard Post Event Event
࣮ࡍͬͯΈΔ
WordPressϓϥάΠϯ։ൃ࣌ʹ ཱͭͱ͜Ζ
WordPressϓϥάΠϯ։ൃ࣌ʹཱͭͱ͜Ζ • Θ͔Γ͍͢ಈ࡞͕ଟ͍ͷͰɺػցతʹνΣοΫ͠ ͯ࣌͘͢ʹͳ͔ͳ͔ྑ͍ • ͨͩɺPHP͕ϝΠϯͳ͚ͩ͋ͬͯɺJavaScriptΛத৺ͱ ͨ͠ͷΑΓԸܙ͕ബ͍ • εΫϦʔϯγϣοτͳΜ͔औΕΔͷͰɺެࣜʹ্͛Δ ͱ͖ʹͦͷ͋ͨΓศརʹར༻Ͱ͖Δ͔
WordPressϓϥάΠϯ։ൃ࣌ʹཱͭͱ͜Ζ • Θ͔Γ͍͢ಈ࡞͕ଟ͍ͷͰɺػցతʹνΣοΫ͠ ͯ࣌͘͢ʹͳ͔ͳ͔ྑ͍ • ͨͩɺPHP͕ϝΠϯͳ͚ͩ͋ͬͯɺJavaScriptΛத৺ͱ ͨ͠ͷΑΓԸܙ͕ബ͍ • εΫϦʔϯγϣοτͳΜ͔औΕΔͷͰɺެࣜʹ্͛Δ ͱ͖ʹͦͷ͋ͨΓศརʹར༻Ͱ͖Δ͔
WordPressϓϥάΠϯ։ൃ࣌ʹཱͭͱ͜Ζ • Θ͔Γ͍͢ಈ࡞͕ଟ͍ͷͰɺػցతʹνΣοΫ͠ ͯ࣌͘͢ʹͳ͔ͳ͔ྑ͍ • ͨͩɺPHP͕ϝΠϯͳ͚ͩ͋ͬͯɺJavaScriptΛத৺ͱ ͨ͠ͷΑΓԸܙ͕ബ͍ • εΫϦʔϯγϣοτͳΜ͔औΕΔͷͰɺެࣜʹ্͛Δ ͱ͖ʹͦͷ͋ͨΓศརʹར༻Ͱ͖Δ͔
NightmareΛͬͯΈͨॴײ(JSͷਓ͚)
NightmareΛͬͯΈͨॴײ • Node͔ͭಈ࡞ϒϥβ͕ChromiumϕʔεͳͷͰɺ ϞμϯJavaScriptΛଘʹͬͯॻ͘͜ͱ͕ग़དྷΔͷ ҹ • ͨͩɺੜͰಈ͔͢ʹmochaͳͲͷςεςΟϯάϑ ϨʔϜϫʔΫΛ͏߹ͰɺgeneratorͳͲͷ͕ࣝ ඞཁʹͳΔͷͰ୭Ͱѻ͍͍͔͢ͱ͍͑ඍົ
NightmareΛͬͯΈͨॴײ • Node͔ͭಈ࡞ϒϥβ͕ChromiumϕʔεͳͷͰɺ ϞμϯJavaScriptΛଘʹͬͯॻ͘͜ͱ͕ग़དྷΔͷ ҹ • ͨͩɺੜͰಈ͔͢ʹmochaͳͲͷςεςΟϯάϑ ϨʔϜϫʔΫΛ͏߹ͰɺgeneratorͳͲͷ͕ࣝ ඞཁʹͳΔͷͰ୭Ͱѻ͍͍͔͢ͱ͍͑ඍົ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠