- . , visx . , .
- , . visx, , CSS-in-JS-. , React- , , , , , . Visx, , . , .
- ããã¯ãã°ã©ããäœæããããã«ãã·ã£ãŒãåããããèŠçŽ ã®ã³ã¬ã¯ã·ã§ã³ã§ã¯ãããŸãããèŠèŠåããªããã£ãã䜿çšããŠã°ã©ããäœæããå Žåãæçµçã«ã¯ãã®åé¡ã解決ããç¬èªã®ã©ã€ãã©ãªãäœæããŸããããã«ãããã¯ããªãã®ããŒãºã«æé©åãããã©ã€ãã©ãªã«ãªããŸãã圌女ã¯ããªãã®å®å šãªç®¡çäžã«ãããŸãã
visxã®æãéèŠãªåŒ·ã¿ã¯ãæ¬è³ªçã«Reactã³ã³ããŒãã³ãã®éåžžã®ã»ããã§ãããšããããšã§ããReactã©ã€ãã©ãªã®æäœæ¹æ³ãç¥ã£ãŠãããšããããšã¯ãvisxã䜿çšããŠèŠèŠåãäœæã§ããããšãæå³ããŸããReactéçºè ã«éŠŽæã¿ã®ããæšæºã®APIãšãã¿ãŒã³ã䜿çšããŸããã©ã®Reactãããžã§ã¯ãã§ããvisxã¯èªå® ã«ããããã«æããã¯ãã§ããvisxã§äœæãããã®ãèŠãŠã¿ãããšæããŸãã
課é¡ïŒããã³ããšã³ãéçºã«ãããããŒã¿ã®èŠèŠå
ããŒã¿ã®èŠèŠåã¯ãããŸããŸãªåéã®å°é家ãå¿ èŠãšããŠããŸãããã®ãããã°ã©ãã£ãã¯èŠçŽ ãäœæããããã®ãã¬ãŒã ã¯ãŒã¯ãååšããå¿ èŠããããŸãããããã®äººã ã®åé¡ã解決ããããšãã§ãããã®ãããªãã¬ãŒã ã¯ãŒã¯ããããã®äººã ãæ¬åœã«ç¿åŸã§ããçš®é¡ã
ãã®ãããªã°ã«ãŒãã®1ã€ã¯ãWebãããžã§ã¯ãã®ããŒã¿èŠèŠåãåžžã«äœæããå¿ èŠãããããã³ããšã³ãéçºè ã§ãã Webã°ã©ãã£ãã¯ãäœæããããã®åªããã©ã€ãã©ãªãšãã¬ãŒã ã¯ãŒã¯ããããããããŸããD3ãããHighchartsãPlotlyãEchartsãVictoryãG2ãRechartsãreact-visãvegaãvega-liteãSemioticããã³ä»ã®åæ§ã®ãããžã§ã¯ããžããã®å€æ§æ§ã«ããããããã12ãè¶ ããæ¢åã®ã©ã€ãã©ãªãåæããAirbnbã§ã®äœ¿çšãæ€èšãããšãããããã³ããšã³ãéçºè ã«ãšã£ãŠéèŠãª3ã€ã®é åã®å°ãªããšã1ã€ã«æ¬ ç¹ãããããšãããããŸããã
- ( ?). - . API D3 vega. , -.
- ( , ?). , ? ( â airbnb.com), . ? .
- . -, , -, , airbnb.com, . , , , , , .
ããŒã¿èŠèŠåããŒã«ã®è¡šçŸåãšãããããã°ããæ¢çŽ¢ããèœåã®éã«ã¯ããã°ãã°çŽæ¥çãªé¢ä¿ãããããšãææãããŸããããããã®ç¹æ§ã®1ã€ãåªããŠããã»ã©ããã1ã€ã¯æªåããå¯èœæ§ããããŸããããããã¹ãŠããè¿ éã«æ¢çŽ¢ã§ããã©ã€ãã©ãªãååã«è¡šçŸåã®ããã©ã€ãã©ãªããããŠåæã«é«æ§èœãäœæããæ¹æ³ã®åé¡ã«ã€ãªãããŸããããã®è³ªåãžã®çãã¯ããåå¿ããããšãã1ã€ã®åèªã§æ§æãããŠããŸãã
解決çïŒReactã«åºã¥ãäœã¬ãã«ã®ããžã¥ã¢ã«ããªããã£ã
è¿å¹ŽãReactã©ã€ãã©ãªã¯Webéçºã®äž»æµã«ãªã£ãŠããŸããããã¯ãä¿å®ã容æã§ã¯ãªãŒã³ã§èªã¿ãããã³ãŒããäœæããã®ã«åœ¹ç«ã€å®£èšåAPIããããšããäºå®ã«äžéšèµ·å ããŠããŸãããã®ã©ã€ãã©ãªã¯å€ãã®ããã³ããšã³ãéçºè ã«ããç¥ãããŠããŸããReactã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãæé©åããããã®è³æã¯ãããããããŸãããã®ãããžã§ã¯ãã¯ãReactãšãã®ã©ã€ãã©ãªã®ãšã³ã·ã¹ãã ã«åºã¥ããŠããŸããã€ãŸããåŠç¿ãšçç£æ§ã容æã«ãªããŸããããã®äžã«äœã¬ãã«ã®ã¢ãžã¥ã©ãŒAPIãå®è£ ããããšãããã®è¡šçŸåã®éµãšãªããŸããã
ãã®ãããžã§ã¯ãã®ãã®ããžã§ã³ã«ã€ããŠè©±ããšããç§ãã¡ã¯éåžž2ã€ã®è³ªåããããŸãã
æåã®ãã®ã¯æ¬¡ã®ãšããã§ãããReactã¢ããªã±ãŒã·ã§ã³ã§éåžžã«è¡šçŸåè±ããªã©ã€ãã©ãªã§ããD3ã䜿çšããªãã®ã¯ãªãã§ããïŒã
éèŠãªã®ã¯ããããã§ãããšããããšã§ãããã ããD3ãšReactã¯ã©ã¡ããDOMãçæã§æäœããå¿ èŠããããããD3ãçŽç²ã«èšç®ã«äœ¿çšããReactãDOMã«äœ¿çšããã®ãæé©ã§ããããšãããããŸããããã以å€ã®å ŽåãDOMã®æŽæ°ã競åãã2ã€ã®ã¡ã³ã¿ã«ã¢ãã«ã¯ããã°ããããžã§ã¯ãã«äŸµå ¥ããå¯èœæ§ãéããŸãããã ããD3ãèšç®ã«ã®ã¿äœ¿çšãããšããããšã¯ããã®ã©ã€ãã©ãªã®æ©èœã®å€§éšåïŒDOMã«é¢é£ãããã®ïŒã䜿çšãããªãããšãæå³ããŸããããã¯selection.joinããºãŒã ããã©ãã°ããã©ã·ããã©ã³ãžã·ã§ã³ã«ã€ããŠã§ã..ããŸããåè¿°ã®ããã«ãD3ã¯ç¿åŸããã®ã«æéãããããŸãããŸããéçºè ã«ã¯ãããŒã¿ã®èŠèŠåãè¡ããšãã«ãæšæºã®APIãšäœ¿ãæ £ãããã¿ãŒã³ã䜿çšãããã€ãã£ãã®Reactã³ãŒããäœæããŠããããã«æããŠããããããšæããŸãã
2çªç®ã®è³ªåã¯æ¬¡ã®ãšããã§ããReactçšã«æ§ç¯ãããå€ãã®ã¬ã³ããªã³ã°ã©ã€ãã©ãªã®1ã€ã䜿çšããªãã®ã¯ãªãã§ããã
ç§ãã¡ã®èª¿æ»ïŒçµæã¯æ¬¡ã®å³ã«ç€ºãããŠããŸãïŒã¯ãããŒã¿èŠèŠåçšã®æ¢åã®Reactã©ã€ãã©ãªãé«ã¬ãã«ã®æœè±¡åã§ããã䜿ããããã®ããã«æé©åãããŠããïŒã€ãŸãããããã䜿çšããããã«å¿ èŠãªã³ãŒãã®éãæžããããšã«çŠç¹ãåãããŠããïŒããšã瀺ããŸãããããã¯ãè¡šçŸåãç ç²ã«ããŠè¡ãããŸãããããã®ã©ããéçºè ã«D3ããªããã£ãã®è¡šçŸåãæäŸãããèšç®ãã¢ãã¡ãŒã·ã§ã³ãç¶æ 管çãã¹ã¿ã€ã«ãããã³ã¬ã³ããªã³ã°ã¯äºãã«å¯æ¥ã«é¢é£ããŠãããããå€ãã¯çç£ãããžã§ã¯ãã«å¿ èŠãªæé©åãèš±å¯ããŸããã
- , , . visx , React-
åã®å³ã«ç€ºããåé¡ç©ºéãåæããããšã«ãããè¡šçŸåã®é«ãReactã©ã€ãã©ãªã®éçºãæåãããæ©äŒãæ確ã«ããããŸããäžè¬çãªReactAPIã䜿çšããããã«ãŒãããèšèšãããäœã¬ãã«ã®ã¬ã³ããªã³ã°ããªããã£ããäœæããããšã§ãç¿åŸã容æã§ãè¡šçŸåããããããã©ãŒãã³ã¹ã®é«ãã©ã€ãã©ãªãäœæã§ããããšãæåŸ ããŠããŸããããã®ãããªã©ã€ãã©ãªã¯ãããããããã³ããšã³ãéçºè ã«ãšã£ãŠåœ¹ç«ã€ãšèããŸããããããvisxãããžã§ã¯ãã®èªçã§ãã
visxã«é¢ãã詳现
visxã³ã³ããŒãã³ãã³ã¬ã¯ã·ã§ã³ïŒä»¥åã¯vxãšåŒã°ããŠããŸããïŒã¯ããã®ååã«ãèŠèŠåã³ã³ããŒãã³ãããšããåèªãé ããŸããããã¯ãReactããŒã¿èŠèŠåããªããã£ããå«ã30以äžã®åå¥ã®ããã±ãŒãžã§æ§æãããããã€ãã®ã«ããŽãªã«åé¡ãããŸãïŒæ¬¡ã®å³ãåç §ïŒããããã®ããªããã£ãã䜿çšãã人ã¯èª°ã§ããããçš®ã®ã¢ããªã±ãŒã·ã§ã³ç¶æ 管çã¹ããŒã ã«åŒ·å¶ãããããšã¯ãããŸãããéçºè ã¯ãèŠçŽ ã®ã¢ãã¡ãŒã·ã§ã³ãšãã®ã¹ã¿ã€ãªã³ã°ãžã®ã¢ãããŒããéžæã§ããŸããããã¯ãã¹ãŠãvisxããªããã£ããReactããŒã¹ã®ã³ãŒãããŒã¹ã«çµ±åã§ããããšãæå³ããŸãããŸããvisxãäœæããéã«ã¢ãžã¥ãŒã«æ§ã«éç¹ã眮ãããŠããããïŒããã«ããvisxã¯D3ã«äŒŒãŠããŸãïŒãç¹°ãè¿ã䜿çšããããšãç®çãšããããŒã¿èŠèŠåçšã«ç¬èªã®ã©ã€ãã©ãªãå®è£ ããããã«å¿ èŠãªãã®ã ããæ§æã«å«ããŠãã³ã³ãã¯ããªãµã€ãºã®ã¢ããªã±ãŒã·ã§ã³ã®ãã³ãã«ãäœæã§ããŸãã ãåäžã®ã³ããŒã«ååšããããã€ãã®äžæã®ã¹ã±ãžã¥ãŒã«ã圢æããããã«å¿ èŠãªãã®ã
Visxã¯ãReactã¢ããªã±ãŒã·ã§ã³ã®äžè¬çãªããŒã¿èŠèŠåã¿ã¹ã¯ã«å¯Ÿå¿ãã30ãè¶ ããããã±ãŒãžã®ã¢ãžã¥ã©ãŒã³ã¬ã¯ã·ã§ã³ã§ãã
質åãšåç
âvisxã§D3ã¯ã©ã®ããã«äœ¿çšãããŸããïŒ
visxã«å«ãŸããŠããããã±ãŒãžã®ããã€ãã¯ãD3ã䜿çšããŠãããŒãžäžã®èŠçŽ ã®é 眮ãªã©ãããŸããŸãªèšç®ãå®è¡ããŸãã䜿çšããD3ããã±ãŒãžãæ©èœçã«è€è£œãã宣èšçãªReactAPIãè£ åããŸãããã®ãããªããã±ãŒãžã®äŸã«ã¯ã@ visx / axisã@ visx / geoã@ visx / Hierarchyãããã³@ visx / shapeãå«ãŸããŸããä»ã®ããã±ãŒãžã¯ãD3ã®DOM管çæ©èœã眮ãæããèŠçŽ ãšå¯Ÿè©±ããããã®Reactããªããã£ããéçºè ã«æäŸããŸãããããã¯ãããšãã°ã@ visx / Brushã@ visx / dragãããã³@ visx / zoomã§ãã
âD3ãã§ããªãããšãvisxã¯äœãã§ããŸããïŒ
å€ãã®ããã±ãŒãžã¯D3ãšã¯å®å šã«ç¡é¢ä¿ã§ããããã¯ã»ã«ç²ŸåºŠã§ã¬ã€ã¢ãŠããåçŸããReactã§ãã¶ã€ã³ã¬ã€ã¢ãŠããäœæãããšãã«çŽé¢ããäžè¬çãªåé¡ã®è§£æ±ºçãæœè±¡åããŸãããããã®ããŒã«ã®å€ãã¯ãè€éãªãªããžã§ã¯ããµã€ãºã®åé¡ãæœè±¡åããã³ç°¡çŽ åããSVGAPIãç°¡çŽ åããŸããäžèšã¯çšäŸã§ãã
@ visx / tooltip
ããã ã€ã³ã¿ã©ã¯ãã£ããªäŸã
ããŒã«
ãããããŒã«ãããã¯ãWebãããžã§ã¯ãã§ãã䜿çšãããèŠçŽ ã§ãããããããã®ãããªèŠçŽ ãšã®ãã¹ãŠã®ãã€ã¯ãã€ã³ã¿ã©ã¯ã·ã§ã³ãå®çŸããããšã¯ç°¡åãªäœæ¥ã§ã¯ãããŸããã @ visx / tooltipããã±ãŒãžã¯ãããŒã«ãããã®ç¶æ 管çãæœè±¡åããŸããã³ã³ãã³ãã座æšã衚瀺ãšé衚瀺ã®ç®¡çã«åœ¹ç«ã¡ãŸããããã¯ãReactããã¯ïŒuseTooltipïŒãšé«æ¬¡ã³ã³ããŒãã³ãïŒwithTooltipïŒã䜿çšããŠè¡ãããŸãã @ visx / tooltipããã±ãŒãžã䜿çšãããšãèªåé 眮ïŒçµæãšããŠãããŒã«ããããã³ã³ããã«ãã£ãŠã¯ãªãããããªãïŒãããŒã¿ã«å ã®ãªãã·ã§ã³ã®ã¬ã³ããªã³ã°ãªã©ãããŒã«ãããã®ã¬ã³ããªã³ã°ã«é¢é£ããã¿ã¹ã¯ãç°¡çŽ åãããŸããã³ã³ããã¹ããªãŒããŒã¬ã€ã®åé¡ããã©ãã«ã·ã¥ãŒãã£ã³ã°ãã
@ visx / text
ã€ã³ã¿ã©ã¯ãã£ããªäŸã¯ããã«ãããŸãã
SVG1.1ã§ã®ããã¹ãã®æäœ
ãHTMLã®å Žåãšåæ§ã«ãè€æ°è¡ã®ããã¹ããæäœããå¯èœæ§ã¯ãããŸãããããšãã°ãCSSã䜿çšããŠãé·ãããã¹ãã®è€æ°è¡ã®è¡šçŸãç°¡åã«å®è£ ã§ããŸãããã®ãããªã¡ã«ããºã ãReactïŒãŸãã¯çŽç²ãªJavaScriptïŒã«å®è£ ããã«ã¯ãéåžžãããã¹ãã®ãµã€ãºã枬å®ããããã¹ããè¡ã«åå²ããããã®ãã©ã¡ãŒã¿ãŒãèŠã€ããããã«äœ¿çšãããé衚瀺ã®DOMèŠçŽ ãã¬ã³ããªã³ã°ããå¿ èŠããããŸãã@ visx / textããã±ãŒãžã¯ãããããã¹ãŠã®ã¿ã¹ã¯ãæœè±¡åããèŠèŠåã§é·ãããã¹ãããµããŒãããããããŸãã
@ visx /ã¬ã¹ãã³ã·ã
ããã ã€ã³ã¿ã©ã¯ãã£ããªäŸã
ã¬ã¹ãã³ã·ãWebã¢ããªã±ãŒã·ã§ã³
ã¬ã¹ãã³ã·ãWebã¢ããªã±ãŒã·ã§ã³ã¯ãHTMLã䜿çšããŠç°¡åã«äœæã§ããŸããSVGã°ã©ãã£ãã¯ãšcanvasèŠçŽ ã®æ©èœã«åºã¥ããŠå³ãäœæããå Žåã¯ãå¿çæ§ãé«ããããã«ãã¯ã»ã«ç²ŸåºŠã®æž¬å®ãè¡ãå¿ èŠããããŸãããReactã§ã¯ããã»ã©ç°¡åã§ã¯ãããŸããã@ visx /ã¬ã¹ãã³ã·ãããã±ãŒãžã¯ãã¬ã¹ãã³ã·ããã£ãŒããç°¡åã«äœæã§ããããã«ãèŠçŽ ã®ãã¯ã»ã«å¯žæ³ãç°¡åã«ååŸã§ããããŸããŸãªãã«ããŒããŒã«ãéçºè ã«æäŸããŸãã
@ visx /ã°ã©ããŒã·ã§ã³ã@ visx /ãã¿ãŒã³
ããã§ã¯ã察話åã®äŸã§ãã
ã°ã©ããŒã·ã§ã³ãšãã¿ãŒã³
ã«ã©ãŒã°ã©ããŒã·ã§ã³ãšãã¿ãŒã³å¡ãã€ã¶ãã¯ããã£ãŒããèšèšãã人ã®èœåãå€§å¹ ã«åäžãããŸãããããã®ã°ã©ãã£ãã¯å¹æã¯ãèæ¯ããéç«ã€ç®ãåŒãç»åãäœæããŸãããããããã®ãããªç»åãSVGã§èšè¿°ããããšã¯å€ãã®ã³ãŒãã§ãããå°é£ãªäœæ¥ã«ãªãå¯èœæ§ããããŸãã@ visx / gradientããã³@visx / patternããã±ãŒãžã¯ãé©åãªã¹ã¿ã€ã«ã宣èšããããã®æ§æãå€§å¹ ã«ç°¡çŽ åãã誰ã§ãããããå³ãäœæã§ããããã«ããŸãã
âvisxã䜿çšããŠäœãäœæã§ããŸããïŒ
ç§ãã¡ã¯éå»2ã5幎éãvisxã䜿çšããŠããããã®ã¢ã€ãã ã®ã³ã¬ã¯ã·ã§ã³ãæ°åã®å éšããŒã¿ããŒã«ãšairbnb.comã§äœ¿çšããŠããŸãã
visxã䜿çšããŠäœæãããããžã¥ã¢ã©ã€ãŒãŒã·ã§ã³
åã®å³ã¯ãvisxã䜿çšããŠäœæãããã®ã®äŸã瀺ããŠããŸãããããã¯ãå·Šäžé ããæèšåãã«é²ããšã次ã®ãããžã§ã¯ãã§ããäŸåé¢ä¿ã®ããã¬ã³ããã£ãŒããçµç¹ã®åã°ã©ããæŸå°ç¶ã®ãã£ãŒããããžãã¹ã¡ããªãã¯ã¬ããŒãããµãŒãã¹ã®çžäºäœçšã®æŠèŠã
ãŸããvisxã䜿çšããŠãåå©çšå¯èœãªå³ãäœæããããã®é«ã¬ãã«ã®ã©ã€ãã©ãªãäœæããŸãããããã«ãããåçŽãªã°ã©ãã£ãã¯èŠçŽ ãçæããéã®å®åã³ãŒãã®éãæžããããšãã§ããŸããã
Visxã¯äœã¬ãã«ã®èŠçŽ ã®ã³ã¬ã¯ã·ã§ã³ã§ããããã¯ãããã«åºã¥ããŠããé«ãã¬ãã«ã®ã·ã¹ãã ãäœæããããã«èšèšãããŠããŸããç¬èªã®é«ã¬ãã«ã©ã€ãã©ãªãäœæããããWebã¢ããªã±ãŒã·ã§ã³ã®ã«ã¹ã¿ã ããžã¥ã¢ã©ã€ãŒãŒã·ã§ã³ãäœæãããããããã«äœ¿çšããå¿ èŠããããŸãã
âVisxã¯é¢çœããã«èŠããŸãããD3ãæ¬åœã«å¥œããªå Žåã¯ã©ããªããŸããïŒ
D3ã倧奜ãã§ãïŒ
âvisxã¯ã©ã®ããã«éçºãããŠããŸããïŒ
visxã§ã®3幎éã®äœæ¥ã®ããã«ããã®ããªããã£ãã®ã³ã¬ã¯ã·ã§ã³ã次ã®3ã€ã®æ¹åã§éçºããŸããã
- . , visx, - Airbnb, ( â , , ) , ( , ). , , , , , .
- . , visx, , , . , vx, . visx, blocks.org, CodeSandbox, , , visx.
- . visx JavaScript-, TypeScript. . TypeScript â - Airbnb. , TypeScript, â ts-migrate. , , visx . , Happo, visx, .
visxã®ããã¥ã¡ã³ãã§ã¯ãCodeSandboxãã©ãããã©ãŒã ã§è©Šãããšãã§ããblocks.orgã¹ã¿ã€ã«ã®äŸã䜿çšããŠããŸãããã¹ãŠã®äŸã¯ã察å¿ããã³ã¬ã¯ã·ã§ã³ããã±ãŒãžãšå¯æ¥ã«é¢é£ããŠã
ãŸããvisxã䜿çšããããšããããŸããïŒ