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
emacs helm likeな WebExtensions を作った話
Search
Hiroki Kumamoto
February 22, 2018
Programming
0
170
emacs helm likeな WebExtensions を作った話
tech talk about
https://github.com/kumabook/bebop/
Hiroki Kumamoto
February 22, 2018
Tweet
Share
More Decks by Hiroki Kumamoto
See All by Hiroki Kumamoto
How to implement timetable view on iOS
kumabook
0
110
Promiseを実装してみよう
kumabook
0
340
bff_tips.pdf
kumabook
0
97
Tips of server-side rendering with react + redux
kumabook
0
91
プロトコルを使って複数サービスを跨いだmusic playerを実装する
kumabook
2
650
merges sort
kumabook
0
81
lightweight introducing with reactive cocoa
kumabook
0
64
basic_sort
kumabook
0
74
git_peco_tips
kumabook
0
34
Other Decks in Programming
See All in Programming
Go Conference mini in Sendai 2026 : Goに新機能を提案し実装されるまでのフロー徹底解説
yamatoya
0
520
15年目のiOSアプリを1から作り直す技術
teakun
1
600
浮動小数の比較について
kishikawakatsumi
0
380
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
220
New in Go 1.26 Implementing go fix in product development
sunecosuri
0
340
AWS×クラウドネイティブソフトウェア設計 / AWS x Cloud-Native Software Design
nrslib
4
380
AI活用のコスパを最大化する方法
ochtum
0
120
オブザーバビリティ駆動開発って実際どうなの?
yohfee
3
690
PostgreSQL を使った快適な go test 環境を求めて
otakakot
0
410
atmaCup #23でAIコーディングを活用した話
ml_bear
4
740
CSC307 Lecture 12
javiergs
PRO
0
460
Agent Skills Workshop - AIへの頼み方を仕組み化する
gotalab555
15
7.9k
Featured
See All Featured
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
850
What's in a price? How to price your products and services
michaelherold
247
13k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
87
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.9k
sira's awesome portfolio website redesign presentation
elsirapls
0
180
Thoughts on Productivity
jonyablonski
75
5.1k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
380
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
620
Leo the Paperboy
mayatellez
4
1.5k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Utilizing Notion as your number one productivity tool
mfonobong
4
240
Transcript
EMACS HELM LIKEͳ WEBEXTENSIONS Λ࡞ͬͨ@KUMABOOK WE’RE JAVASCRIPTERS@16TH
▸ Hiroki Kumamoto ▸ github, twitter @kumabook ▸ Software engineer
@ Spincoaster, Inc ▸ JavaScript, Swift, Ruby (rails), rust ࣗݾհ
TEXT ࠓ͢͜ͱ ▸ WebExtensionsͱ ▸ ࣗ࡞WebExtensions: bebopͷհ ▸ WebExtensionsͷϕετϓϥΫςΟε
TEXT WebExtensionsͱ ▸ ϒϥβͷػೳΛ֦ு͢Δͷ ▸ HTML+JavaScript+CSSͰ։ൃͰ͖Δ ▸ Ϋϩεϒϥβ ▸ extension
API ͕ඪ४༷ ▸ ϒϥβؒͷࠩҟ݁ߏ͋Δ
TEXT WebExtensionsͰͰ͖Δ͜ͱ ▸ WebϖʔδͷίϯςϯπΛมߋ ▸ AdBlock ▸ πʔϧόʔʹϝχϡʔɾΟδΣοτΛՃ ▸ QR
Code Image Generator
TEXT ࠓճ࡞ͬͨͷ ▸ Emacs helm on WebExtensions ▸ incremental completion
and selection narrowing framework ▸ Spotlightͱ͔pecoͱ͔ ▸ github.com/kumabook/bebop ▸ firefox bebop, chrome bebopͱ͔Ͱݕࡧ
TEXT ࠓճ࡞ͬͨͷ ▸ ΫΤϦͰީิΛߜΓࠐΜͰɺΞΫγϣϯΛ࣮ߦ ▸ ཤྺͷݕࡧɾআ ▸ ϒοΫϚʔΫͷݕࡧɾআ ▸ λϒͷҰׅআ
▸ Ϛεͳ͠Ͱ৭ʑͰ͖Δ
TEXT ࠓճ࡞ͬͨͷ ▸ Alternative to Vimperator ▸ mouseless browsing͕Ͱ͖ͨਆΞυΦϯ ▸
چΞυΦϯFirefox Quantum͔Β͓੦͖ʹ ▸ vimperatorຽ͕ଓग़ ▸ Related works: vim-vixen, tridactyl, Surfingkeys ▸ γϯϓϧʹཉ͍͠ػೳ͚ͩΛΓग़ͨ͠
TEXT WebExtensionsͷΞʔΩςΫνϟ
TEXT ΞʔΩςΫνϟ background script popup content script options ui ϝοηʔδύογϯά
TEXT ΞʔΩςΫνϟ ▸ ίϯϙʔωϯτʹΑͬͯͰ͖Δ͜ͱ͕ҧ͏ͷͰɺผίϯϙʔωϯ τʹॲཧΛҕৡ͢Δඞཁ͕͋Δ ▸ ίϯϙʔωϯτؒͷΓऔΓ ▸ ֤ίϯϙʔωϯτಠཱ࣮ͯ͠ߦɾ໊લۭؒผ ▸
֤ίϯϙʔωϯτؒͷΓऔΓϝοηʔδύογϯά ▸ PortͱݺΕ͍ͯΔ ▸ ඇಉظʹportʹϝοηʔδΛ͛߹͍ͳ͕Βॲཧ͕ਐΉ
TEXT ϕετϓϥΫςΟε ▸ WebExtensions։ൃͷ͠͞ ▸ ίʔϧόοΫhell ▸ ঢ়ଶཧͷ͠͞ ▸ react,
redux, redux-saga͕૬ੑΑ͔ͬͨ
TEXT react ▸ طଘͷίϯϙʔωϯτΛ࠶ར༻Ͱ͖Δ ▸ ϩʔΧϧ͔ΒεΫϦϓτΛಡΈࠐΉͷͰαΠζ͕Ͱ͔͍͜ͱ ؾʹͳΒͳ͍
TEXT redux ▸ popup ͱoptions uiͰreduxΛ༷ ▸ background script ͱcontent_scriptstateless
apiΛఏڙ ▸ options uiͱpopupؒstorage apiͰঢ়ଶΛڞ༗ ▸ options uiͱpopupഉଞత ▸ ด͡Δͱ͖ʹstateΛอଘͯ͠ɺ্ཱͪ͛Δͱ͖ʹϩʔυ͢Δ ▸ reduxͷinitial stateʹ͢Δ ▸ Storage apiڞ༗ͷඇಉظͳlocalStorage
TEXT Redux background script popup content script options ui STATELESSͳAPI
STORAGE APIͰ STATE ڞ༗ REDUX REDUX
TEXT redux-saga ▸ redux-sagaͷchannelΛ͏ ▸ ֎෦ͷΠϕϯτΛநԽͨ͠ͷ ▸ background scriptͷportͷϝοηʔδύογϯάΛϥοϓ ▸
ϝοηʔδͷܗࣜΛreduxͷactionͱಉ͡ܗࣜʹ͢Δ ▸ { type: String, payload: Any } ▸ ࣗಈతʹmessage͔Βactionʹม ▸ ಁաతʹbackground script͔ΒΞΫγϣϯΛdispatchͰ͖Δ
TEXT Redux background script popup REDUX-SAGA CHANNEL MESSAGE ACTION
TEXT ·ͱΊ ▸ WebExtensionsͷ։ൃʹ͍ͭͯͷ֓ཁ ▸ ࣗ࡞WebExtensions bebopͷհ ▸ ྑ͔ͬͨΒελʔΛΒ͑Δͱتͼ·͢ ▸
WebExtensions։ൃͰීஈͷWeb։ൃͷϑϨʔϜϫʔΫ ͑Δ ▸ react, redux, redux-saga