Slackæ稿ããã³å風ã«ç»é¢ã«æµãChromeæ¡å¼µæ©è½ãã¤ãã£ããã
ãã®ã³ããç¦ã«ããã¦ãZoomãGoogle Meetã使ã£ã¦ãªã³ã©ã¤ã³ãã¼ãã£ã³ã°ãè¡ã人ãå¢ããã®ã§ã¯ãªãã§ããããã ãã®éã«PCç»é¢ãå ±æãã¦ãã¹ã©ã¤ããªã©ã®è³æãåå è å ¨å¡ã§çºããã¨ãããã¨ããã¦ããã¨æãã¾ãã ãããªä¼è°ãã¼ã«ã®ãã£ããæ©è½ã¯ãããããçºè¨ããã¾ã§ããªããããªã¡ãã£ã¨ãããªã¢ã¯ã·ã§ã³ãªã©ã示ãã®ã«æ軽ã«ä½¿ãã¦ä¾¿å©ã§ãããã¡ãã£ã¨ç¡æ©è³ªãªæ°ããã¾ãã ããã§ããã³ãã³åç»ã®ããã«ã³ã¡ã³ããç»é¢ä¸ãæµãã¦ããããããããã¼ã«ããã£ããçãä¸ããããã§ãããï¼ å®ã¯ããããããã¼ã«ã¯ä¸ã®ä¸ã«ãã§ã«ããã¾ãã
æ稿è
ã¯èªãããã¯ãã¼ã ãã¤ãã¦ã³ã¡ã³ããæ稿ã§ãã¾ãã
æ®éã®ã³ã¡ã³ãã¨è³ªåãåºå¥ãã¦æ稿ãããã¨ãã§ãã¦ä¾¿å©ã§ãã
çµµæåããµããµããã£ã¦åºã¦ãã¦ããããã§ãã
ããããã¯ãã¼ã æ¹å¼ã ã¨ã¦ã¼ã¶ä¾åã§ãå¿åã許容ãã¦ãã¾ãã æ稿ãããã³ã¡ã³ãã質åã®è©³ç´°ãç¥ãããã¨ãã«ã誰ãçºè¨ããã®ãä¸æã ã¨é²è¡ãã°ããããããããã¾ãã
ã¾ããã³ã¡ã³ããå¾ãã追ãããã¨ãããã¡ãããã以å¤ã®ã·ã¼ã³ã§ãã³ã¡ã³ããSlackã«åå¨ãã¦ãããã¨ã便å©ãã®ãã®ã§ãã ä¾ãã°æ¤ç´¢ãããããã³çãããããã¡ãã»ã¼ã¸URLãå ±æãããä¿åããããçµµæåã§ãªã¢ã¯ã·ã§ã³ããããã¹ã¬ããã§è©±é¡ãæ·±å ããããâ¦ã
ã¨ãããã¨ã§ãã¤ããã¾ããï¼ Slackã«æ稿ããã¡ãã»ã¼ã¸ããç»é¢ä¸ã«æµãããã¼ã«ï¼
æ£ç¢ºã«ã¯Chromeã¿ãä¸ã«ã³ã¡ã³ããæµããããã«ããChromeæ¡å¼µæ©è½ã§ãã ãã®åãSlarrageï¼ã¹ã©ã¼ã¸ï¼ï¼Slack + barrageï¼å¼¾å¹ï¼ããä»ããé èªã§ãã
使ãæ¹ã¯ã¤ã³ã¹ãã¼ã«å¾ã«ãChromeã§ã好ããªSlackã¯ã¼ã¯ã¹ãã¼ã¹ã®ãã£ã³ãã«ãéãã¾ãã ããã¨ç»é¢ä¸é¨ã«ãSlarrage is watching this channelãã¨ãã帯ã表示ããããã®ãã£ã³ãã«ã«æ稿ãããã¡ãã»ã¼ã¸ãããã³å風ã³ã¡ã³ãã®ããã«ç»é¢ã®ä¸ãæµããã¨ãã寸æ³ã§ãã å®éã«ã³ã¡ã³ããæµãããã«ã¯ããä¸ã¤è¨å®ãå¿ è¦ã§ãã³ã¡ã³ããæµãããä»»æã®Chromã¿ããéã*1ãSlarrageã®æ¡å¼µæ©è½ã¢ã¤ã³ã³ãã¯ãªãã¯ãã¦é£ã³åºãç»é¢ã®ãShow comments this tabããã¿ã³ãã¯ãªãã¯ãã¾ãã ãããããã¨ã§ããã®ã¿ãä¸ã§ç£è¦å¯¾è±¡ã®Slackãã£ã³ãã«ã«æ稿ãããã¡ãã»ã¼ã¸ãæµãã¾ãã
ããã«æµããããã¹ãã«æ·»ããã³ãã³ããããã¤ãå®è£
ãã¦ãã¾ãã
ä¾ãã°ç£è¦å¯¾è±¡ã®Slackãã£ã³ãã«ã« ããã«ã¡ã¯ [red]
ã¨æ稿ããã¨ãæµããããã¹ããããã«ã¡ã¯ãã®è²ã赤ããªãã¨ãã£ãå
·åã§ãã
ããã¹ããæµããç»é¢ä¸é¨ä¸å¤®ã«åºå®è¡¨ç¤ºããããã®ã³ãã³ã bottom
ããããã¹ãã大ãã表示ããããã®ã³ãã³ã big
ãªã©ãããã¾ãã
ãããã¯çµã¿åããããã¨ãå¯è½ã§ ããã«ã¡ã¯ [red bottom big]
ã¨æ稿ããã¨ããããã«ã¡ã¯ãã¨èµ¤ã大ããªããã¹ããä¸é¨ä¸å¤®ã«åºå®è¡¨ç¤ºããã¾ãã
ãã®ä»ãæ¯åããã¢ãã¡ã¼ã·ã§ã³ shake
ãªã©ãããããå®è£
ãã¦ããã®ã§è©¦ãã¦ã¿ã¦ãã ããã
ããããããã®Slarrageã§ããChromeæ¡å¼µæ©è½ã¨ãããã¨ã§ãã³ã¡ã³ããæµããã®ã¯ãã®Chromeãã©ã¦ã¶ä¸ã«éå®ããã¾ãã Chromeã®å¤ã§åããã¯ã¼ãã¤ã³ãã®ãããªã¢ããªã±ã¼ã·ã§ã³ãªã©ã«ãã³ã¡ã³ããæµããã¨ã¯ã§ããªãã®ã§æªããããã
æè¡çãªã¡ã¢
GitHub Repoã¯ãã¡ã
没æ¡
æåã«ãã®ãã¼ã«ãä½ã£ãã¨ãã®æ§æã¯ããããªæãã§ãã
ç¢å°ã¯ãã¼ã¿ã®æµãã§ãã
PCãã¹ãããªã©ããSlackã«ã¡ãã»ã¼ã¸ãæ稿ãã㨠message.channels
ã¨ããã¤ãã³ããçºçããã®ã§ããããEvent APIã§åãåãã¾ãã
Event APIã¯ãæå®ããURLã«ã¤ãã³ããéç¥ãã¦ãããä»çµã¿ã§ãä»åã¯Cloud Functionsã®ã¨ã³ããã¤ã³ããæå®ãã¾ããã
Cloud Functionsã¯æ稿ã¤ãã³ããåãåãããã®å 容ãFirestoreã«æ¸ãè¾¼ã¿ã¾ãã Slarrageã¯Firestoreã®æ¸ãè¾¼ã¿ã¤ãã³ããç£è¦ãã¦ããã®ã§ãã¤ã¾ããSlarrageã¯Slackã«ã¡ãã»ã¼ã¸ãæ稿ããããã¨ãæç¥ã§ããã¨ããããã§ãã
ãã®æ§æã¯ãæåã¯ãã¾ãæ©è½ãã¦ããããã«è¦ãã¾ããããSlackã®Event APIããã®éç¥ããã¾ã«è©°ã¾ããã¨ãããæ念â¦ã
Chromeæ¡å¼µæ©è½ã®ã¿ã§å®ç¾
Slackã®æå®ãã£ã³ãã«ã¸ã®ã¡ãã»ã¼ã¸æ稿ãã©ãããã¯ããããåé¡ã§ããããChromeæ¡å¼µæ©è½ã§ããSlarrageãSlackã¿ãã®DOMã®å¤åãç£è¦ããã°å®ç¾ã§ããã®ã§ã¯ãã¨æãè³ãã¾ãããå®éããã¯ãã¾ãè¡ãã¾ããï¼
ãã£ã¨ããAPIã§ãä½ã§ããªãï¼ç´æã§ã¯ãªãåçç¡ç¨ã§ç ´å£çãªå¤æ´ãèµ·ããããã¨ãããã¨ãªã®ã§ãå°æ¥çªç¶å£ããå¯è½æ§ã¯ããã¾ãã
Chromeæ¡å¼µæ©è½ã®ãã¼ããã·ã§ã³ã¨activeTab
Chromeæ¡å¼µæ©è½ãChromeã¦ã§ãã¹ãã¢ã§é å¸ãããã¨æããä»åã人çåã®æ¡å¼µæ©è½å ¬éã ã£ãã®ã§ã5ãã«æã£ã¦éçºè ç»é²ãè¡ãã¾ããã ããã¦ãã½ã¼ã¹ãã¡ã¤ã«çãã¾ã¨ããzipãã¡ã¤ã«ãã¢ãããã¼ããã審æ»ã®ç³è«ãè¡ããã¨ããã¨ããããã®æ¡å¼µæ©è½ã¯åºç¯å²ã®ãã¹ã権éãè¦æ±ãã¦ãããã¨è¨ã£ãæ¨ã®ã¢ã©ã¼ãã¨ã¨ãã«ãããããããã§å¯©æ»ã«ããªãæéãããããã¨è¨ããã¦ãã¾ãããã¼ããã·ã§ã³ã¾ãããè¦ç´ããã¨ã«ãã¾ããã
Chromeæ¡å¼µæ©è½ã«ã¯content scriptã¨å¼ã°ãããã¿ãã§éãã¦ãããã¼ã¸ä¸ã§å®è¡ãããã¹ã¯ãªãããæå®ãããã¨ãã§ãã¾ãã 次ã®manifest.jsonã®ä¸é¨ã®ããã«ãã©ã®URLã«ããããããããã®ãã¼ã¸ä¸ã§ãã©ã®ã¹ã¯ãªãããå®è¡ãããã¨ããã®ãæå®ãã¾ãã
"content_scripts": [ { "matches": ["https://app.slack.com/*"], "js": ["content/observer.js", "content/watchingAlert.js"] }, { "matches": ["<all_urls>"], "js": ["content/presentation.js"] } ],
åé¡ã¨ãªã£ãã®ã¯ <all_urls>
ã¨ããæå®ã§ãããããåºç¯å²ã®ãã¹ã権éã®è¦æ±ãã«ç¸å½ãã¾ãã
ãããããã¼ã¸ï¼URLã»ãã¹ãï¼ã§ã¹ã¯ãªãããå®è¡å¯è½ã«ãããã¨ã¯ãè¦æ±ãã権éã¨ãã¦å¤§ããããã§ãã
ããã§ããã®content scriptãå¤ãã¦ãactiveTabã¨ããä»çµã¿ã§ã¿ã¼ã²ããã¨ãªãã¿ãããã¼ã¸ã«ã¹ã¯ãªãããæµãè¾¼ãããã«å®è£ ãç´ãã¾ããã ã¤ã¾ããcontent scriptã¯èªåçã«ã¹ã¯ãªãããå®è¡ãããã®ãåé¡ã§ãã£ã¦ãã¦ã¼ã¶ãè½åçãªã¢ã¯ã·ã§ã³ãåãã°ã¹ã¯ãªãããå®è¡ãã¦ãããã§ãããã¨ããçºæ³ã£ã½ãã¦ãè½åçãªã¢ã¯ã·ã§ã³ã¨ã¯ä¾ãã°ãæ¡å¼µæ©è½ã¢ã¤ã³ã³ãæ¼ããã¨ã«ãããããã¢ãã表示ãã¨ãã
æµããã³ã¡ã³ã
ç»é¢ãæµããã³ã¡ã³ãã¯ãDOMãçæãã¦position: fixedã§z-indexãã§ã£ãããã¦top, leftãããæãã«ãã¦ããã ãã§ãã¨ã¦ãåç´ã§ãã å½åãå°ãé ãæ©ã¾ããã®ã¯ãã¯ãªãã¯ãããã¼ãªã©ã®ãã¦ã¹ã¤ãã³ããç¡è¦ãããã¨ãããã¨ã§ããã æµããã³ã¡ã³ãããã¼ã¸ãæä½ããã¦ã¼ã¶ã®éªéã«ãªã£ããå«ãªã®ã§ã
調ã¹ãã¨CSSã«pointer-event
ã¨ããããããã£ããã£ã¦ããããnone
ã«ããã¨ãã¦ã¹ã¤ãã³ããç¡è¦ãããã¨ã®ãã¨ã§ããã