
èšèšããŒã«ã®å°æ¥ã«å¯Ÿããç§ãã¡ã®ç解ã¯ãããŒã«ãšã³ã³ãã³ãã«ç°¡åã«ã¢ã¯ã»ã¹ã§ããããã«ããããšã§ãã
ãã®ãããã³ãã³ãã©ã€ã³ã€ã³ã¿ãŒãã§ã€ã¹ãã¶ã€ã³ããŒã«ã§ããFigmaããWebã¢ããªã±ãŒã·ã§ã³ãšããŠé åžãããã¯ã©ãŠããµãŒãã¹ãšããŠäœæããŸããã
Figmaãäœæããããšã決ãããšãããããæ·±å»ãªèª²é¡ã«ãªãããšãç¥ã£ãŠããŸããã
çã®æåãåããã«ã¯ãå°é家ã«åãå ¥ããããã©ã®ç°å¢ã§ãåçã«æ©èœããé«ç²ŸåºŠã®ç·šéããŒã«ãæäŸããå¿ èŠããããŸãã
çµæãžã®éã¯éåžžã«å°é£ã§ããã ãã®çµæãå®éã«ãã©ãŠã¶ãŒå ã«ãã©ãŠã¶ãŒãäœæããŸããã

ãã®ã¿ã¹ã¯ã®é£ããã®çç±ã¯ãWebãæ±çšã³ã³ãã¥ãŒãã£ã³ã°ãã©ãããã©ãŒã ãšããŠäœæãããŠããªãããšã§ãã Webã¯ãããã¥ã¡ã³ãæåã®ãã¯ãããžãŒãšããŠå§ãŸããã¢ããªã±ãŒã·ã§ã³éçºã®ããã«å€ãã®åªãããã®ãè¿œå ãããŸããã
ããã¯éåžžããããããã®ãå®è£ ããããã«äœ¿çšã§ããæ±çšããªããã£ããæäŸããã®ã§ã¯ãªããããªãçãçŠç¹ãæã€ç¹å®ã®APIã®åœ¢åŒã§ããã
ããã€ãã®äŸïŒ
- CSSã¯ãå€æ°ã®åªããããã¹ãã¬ã³ããªã³ã°/ã¬ã€ã¢ãŠãã¢ã«ãŽãªãºã ãæäŸããŸãããããããã«ã¹ã¿ãã€ãºãããããã©ãŠã¶ãŒãå¥ã®ã¢ã«ãŽãªãºã ã®äžéšãšããŠããã¹ãã¬ã€ã¢ãŠãã¢ã«ãŽãªãºã ã䜿çšããçµæãååŸãããããããšã¯ã§ããŸããã
- ãã¹ãŠã®ãã©ãŠã¶ãŒã¯é«æ§èœ GPUãªã³ã«ãŒãæäŸããŸãããWebç°å¢ã§ã¯ã¬ã³ããªã³ã°ã¢ã«ãŽãªãºã ã«åºå·ãããªã³ã«ãŒã®åäœãå€æŽããŠããã©ãŒãã³ã¹ã®æé©åãç¹å¥ãªãã¬ã³ãã¢ãŒããè¿œå ããæ¹æ³ã¯ãããŸããã
- ãã©ãŠã¶ã«ã¯ãããŒããŠã§ã¢ã䜿çšããŠUIã¹ããªãŒã ã®å€éšã§éåæã«ãã³ãŒãããé«åºŠã«æé©åããã ã€ã¡ãŒãž ãã³ãŒããŒãçµã¿èŸŒãŸããŠããŸãããããšãã°ã EXIFã®åããèæ ®ããããdrawImageã®äœ¿çšæã«èª€ã£ãè²ç©ºéã®èšå®ãé²æ¢ãããã§ãããã©ã¡ãŒã¿ãŒããã³ãŒããŒã«æž¡ãAPIã¯ãããŸããgetImageDataã
Webã«å ±éã®ããªããã£ãããªããšããç¶æ³ã¯å€ããå§ããŠããããã©ãŠã¶ãŒãšã³ãžã³ããã€ãã¹ããŠããŒããŠã§ã¢ãçŽæ¥æäœããããŒã«ãéçºè ã«æäŸããWebGLãasm.jsãªã©ã®ãã¯ãããžãŒããããŸãã ããã¯ãæçµçã«é«æ§èœãªWebããŒã¹ã®ã°ã©ãã£ã«ã«ã¢ããªã±ãŒã·ã§ã³ãçŸå®çãã€å®çšçãªãã®ã«ããåŸæã§ãã éçºè ã¯ãå¿ èŠãªæ©èœããã©ãŠã¶ã«å®è£ ããããŸã§åŸ ã€å¿ èŠããªããªããç¬èªã«ãã®ãããªæ©èœãäœæã§ããŸãïŒ
Emscripten
ãšãã£ã¿ãŒã¯C ++ã§èšè¿°ãããŠããã emscriptenã¯ãã¹ã³ã³ãã€ã©ãŒã䜿çšããŠJavaScriptã§ã¯ãã¹ã³ã³ãã€ã«ãããŠããŸãã emscriptenã³ã³ãã€ã©ã¯ãJavaScript JITã³ã³ãã€ã©ããäºæž¬å¯èœã§ã³ã³ãã¯ããªãã·ã³ã³ãŒããååŸã§ããææ°ã®ãã¹ãŠã®ãã©ãŠã¶ã§ãµããŒããããŠããJavaScriptã®ãµãã»ããã§ããasm.jsã察象ãšããŠããŸãã
ãã®ã¢ãããŒãã«ã¯ããã€ãã®å©ç¹ããããŸãã
- ã¡ã¢ãªæ§é ãå®å šã«å¶åŸ¡ããJavaScriptã®64ãããã®å粟床ã®ä»£ããã«ãã³ã³ãã¯ããª32ãããã®æµ®åå°æ°ç¹æ°ãŸãã¯å¿ èŠã«å¿ããŠãã€ãã䜿çšã§ããŸãã ããã¯ã倧éã®ããŒã¿ã䜿çšããåœç€Ÿã®ãããªã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠéåžžã«éèŠã§ãã
- çæãããã³ãŒãã¯ã¡ã¢ãªã®å²ãåœãŠãå®å šã«å¶åŸ¡ããŸããããã«ãããæ¯ç§60ãã¬ãŒã ã§UIã¬ã³ããªã³ã°ãååŸããã¿ã¹ã¯ãå€§å¹ ã«ç°¡çŽ åãããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã«ããäžæåæ¢ãåé¿ãããŸãã ãã¹ãŠã®C ++ãªããžã§ã¯ãã¯ãäºåã«å²ãåœãŠãããåä»ãé åã®äºçŽç¯å²ã«é 眮ããããããããã§ã®JavaScriptã¬ããŒãžã³ã¬ã¯ã¿ãŒãšã¯äœã®é¢ä¿ããããŸããã
- çæãããã³ãŒãã¯ãé«åºŠãªLLVMã³ã³ãã€ã©ã䜿çšããŠäºåã«æé©åãããŸãã ãããC ++ãã³ãã¬ãŒãã®ç¹æ®åãšçµã¿åããããšããã€ãã£ãã³ãŒããããæ倧2åé ãéåžžã«å¹ççãªã³ãŒããåŸãããŸãã
- ãŸããasm.jsã³ãŒãã«éæé©åãã€ã³ãããªãããšãä¿èšŒãããŠãããããJITã³ã³ãã€ã©ãŒã¯AoTã³ã³ãã€ã«ãå®è¡ããäºæž¬å¯èœãªããã©ãŒãã³ã¹ãæäŸã§ããŸãã éåžžã®JavaScriptã³ãŒãã¯JITã³ã³ãã€ã©ã®ãã¥ãŒãªã¹ãã£ãã¯ã¢ã«ãŽãªãºã ãééãããããåãã³ãŒããé£ç¶ããŠå®è¡ãããšããã©ãŒãã³ã¹ãå€§å¹ ã«ç°ãªãå ŽåããããŸãã
emscriptenãå®ç§ã§ããããšãæå³ãããã®ã§ã¯ãããŸããã æ°ããããããšã®ããã«ãéäžã§ãã©ã°ããããŸããã ç§ãã¡ã«ãšã£ãŠã®åé¡ã®1ã€ã¯ãäžéšã®ãã©ãŠã¶ãŒæ§æã§ã¯ãemscriptenã¢ãã¬ã¹ç©ºéå šäœãå«ã巚倧ãªåä»ãé åã«ãåºç¯å²ã®é£ç¶ã¢ãã¬ã¹ç©ºéãå²ãåœãŠãããšãã§ããªãã£ãããšã§ãã ææªã®ã±ãŒã¹ã¯32ãããChrome for Windows㧠ãããã¯256MBã®åä»ãé åã§ããå²ãåœãŠãããªãããšããããŸããã ASLRæçåã¢ãã¬ã¹ã¹ããŒã¹ã ãã以æ¥ããã§ã«ä¿®æ£ãããŠããŸãã
圹ç«ã€ãã1ã€ã®æ©èœã¯ãç»åããžãªã¡ããªãã¯ãªããžã§ã¯ãã®ãããã¡ãªã©ãããŒããããã®ãåé€ããããã®ãã³ãã«ã®å€§ããªãªãœãŒã¹ã®äœ¿çšã§ãã å éšã®IndirectBuffer APIãäœæãïŒ ããã§éããŸãã ïŒãå€éšã®åä»ãé åãåç §ããC ++ã§äœ¿çšã§ããããã«ããŸãã ã¡ã€ã³ããŒããã倧ããªãªããžã§ã¯ããåé€ãããšãé·æéåçã»ãã·ã§ã³ã®ã¡ã¢ãªãã©ã°ã¡ã³ããŒã·ã§ã³ã®åé¡ã軜æžããã32ããããã©ãŠã¶ãŒã§ããå¶éãããã¢ãã¬ã¹ã¹ããŒã¹ã䜿çšã§ããããã«ãªãã64ããããã©ãŠã¶ãŒã§ã®åä»ãé åã®ãµã€ãºã®31ãããå¶éãå æã§ããããã«ãªããŸãã
çŸåšãasm.jsã¯ãã§ã«éåžžã«ãããµããŒããããŠããŸãããããããã®ã¯ãŒã«ãªãã®ãç»å ŽããŸãã
WebAssemblyã¯ãasm.jsã³ãŒãã®ãã€ããªåœ¢åŒãå®è£ ããŠããã¹ãŠã®äž»èŠãªãã©ãŠã¶ãŒãåå ãã解ææéãå€§å¹ ã«ççž®ããè©Šã¿ã§ãã çŸåšããã«ãã¹ã¬ããã®å¯äžã®åœ¢åŒã¯ã¡ãã»ãŒãžã³ã°Webã¯ãŒã«ãŒã®äœ¿çšã§ããã å ±éã®åä»ãé åã®ä»æ§ïŒéäžïŒã«ãããå ±æã¡ã¢ãªã䜿çšãããã«ãã¹ã¬ãããçŸå®ã®ãã®ã«ãªããŸãã
ã¬ã³ããªã³ã°
ç¬èªã®ã¬ã³ããªã³ã°ãšã³ãžã³ãäœæããŠããã¹ãŠã®ãã©ãããã©ãŒã ã§ã³ã³ãã³ããè¿ éãã€åäžã«ã¬ã³ããªã³ã°ãããããã«ããŸããã ãã©ãŠã¶ã«ã¯åªããã°ã©ãã£ãã¯ã¡ã«ããºã ããããæåã¯æ°ããã¬ã³ããªã³ã°ãšã³ãžã³ãäœæãã代ããã«ããã©ãŠã¶ã䜿çšããããšããŸããã ãã©ãŠã¶ã®ã¬ã³ããªã³ã°ããªãŒã«ã¢ã¯ã»ã¹ããããã®äœã¬ãã«APIããªãå Žåãå©çšå¯èœãªãªãã·ã§ã³ã¯HTMLãSVGããŸãã¯2Dãã£ã³ãã¹ã§ããã
ãããã®ãªãã·ã§ã³ã¯ãããããããã€ãã®çç±ã§æºè¶³ã®ãããã®ã§ã¯ãããŸããã§ããã
- HTMLãšSVGã¯å€ãã®äœåãªè·ç©ãéã³ãå€ãã®å ŽåãDOMã䜿çšããããã2Dãã£ã³ãã¹APIãããã¯ããã«é ãåäœããŸãã éåžžããºãŒã ã§ã¯ãªãã¹ã¯ããŒã«çšã«æé©åãããŠããããžãªã¡ããªã¯ãºãŒã ãããã³ã«åã«ãŠã³ããããããšããããããŸãã
- ã¬ã³ããªã³ã°ãGPUãä»ããŠããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã§æž¡ããããšããä¿èšŒã¯ãªããå€ãã®ããšã¯ãŸã CPUã§ã¬ã³ããªã³ã°ãããŸãã
- HTMLããã³SVGã§ã®ãã¹ãã³ã°ããŒãããããã³ãã¬ã³ãã¢ãŒãã®ãµããŒãã¯ããã©ãŠã¶ããšã«å€§ããç°ãªããé«è§£å床ãã£ã¹ãã¬ã€ã§ã¹ã ãŒãºã«è¡šç€ºãããªãã£ãããåºåãäœããããããããšããããããŸãã
- 2Dãã£ã³ãã¹APIã¯ãªã¢ã«ã¿ã€ã APIã§ãããé 延APIã§ã¯ãããŸããããã®ããããã¹ãŠã®ãžãªã¡ããªãªããžã§ã¯ãããã¬ãŒã ããšã«GPUã«ãªããŒãããå¿ èŠããããŸãã ãã®åäœã¯å¿ èŠãªãç¡é§ã§ãããããã«ããã¯ã«ãªãå¯èœæ§ããããŸãã
- ããã¹ãã®ã¬ã€ã¢ãŠãã¯ã ç°ãªããã©ãŠã¶ãŒéã§åãã§ã¯ãªããç°ãªããã©ãããã©ãŒã ã®åããã©ãŠã¶ãŒã®ããŒãžã§ã³éã§ãåãã§ã¯ãããŸããã
- ãªã¹ããããŠããã¬ã³ããªã³ã°APIã®ãããã§ããµããŒããããŠããªãã«ãŒãã³ã°ã©ããŒã·ã§ã³ã®æç»ãªã©ã®æ©èœãè¿œå ã§ããããã«ãããã£ãã®ã§ãã
ãã®ãããããæ£åžžã«æ©èœãããã®ã§ã¯ãªããWebGLã䜿çšããŠãã¹ãŠããŒãããå®è£ ããŸããã ã³ã³ããŒã¿ãŒã¯é«åºŠã«æé©åãããã¿ã€ã«ããŒã¹ã®ãšã³ãžã³ã§ããã¹ã¯ããŒãããäžåäžãªã°ã©ããŒã·ã§ã³ããã¬ã³ãã¢ãŒãããã¹ããããã¬ã€ã€ãŒã®éæ床ãªã©ããµããŒãããŠããŸãã ãã¹ãŠã®å€æã¯GPUã§è¡ãããå®å šã«ã¢ã³ããšã€ãªã¢ã¹ãããŸãã
ã³ãŒãã¯ããã©ãŠã¶å ã®ãã©ãŠã¶ã®ããã«èŠããŸãã ç¬èªã®DOMãç¬èªã®ãªã³ã«ãŒãç¬èªã®ããã¹ãã¬ã€ã¢ãŠããšã³ãžã³ãããããã©ãŠã¶ãŒã§HTMLã衚瀺ããã®ãšåãããã«ãå€æããªãŒãè¿œå ããããšãèããŠããŸãã
ãã©ãŠã¶
Webãã©ãããã©ãŒã ã®æ©èœã¯ãŸã ãã€ãã£ããã©ãããã©ãŒã ã«è¿œãã€ããŠããŸãããæ®å¿µãªããããã¡ãã¡ã«ããã€ãã®ã®ã£ããããããŸãã 倧ããªã®ã£ãããåããã ãã®ãªãœãŒã¹ããªãéããçã«ããªã£ãŠãããšãã«ã§ããããšãä¿®æ£ããããšããŠããŸãã
Figmaã®äœæ¥ãéå§ããåã«ãã«ã¹ã¿ã ã®é«DPIã«ãŒãœã«ã¯Webäžã§æ¬åœã«å£ããŠããŸããã Chrome㯠ã ãã©ãã¯ã¹ãšWebkitãèªåã§ä¿®åŸ©ããå¿ èŠããããŸããããããã¯ãã¹ãŠç¬èªã®æ¹æ³ã§å£ããŠããããã§ãã ãããæäœããäžè¬çãªæ¹æ³ã¯ãŸã ãããŸããïŒFoxã®SVGãChromeãšWebkitã®-webkit-image-setãããã³IEã®å å²æ代ã®.cur圢åŒïŒããå°ãªããšãä»ã§ã¯ãã¹ãŠãæ©èœããŸãã
ãŸãã補åãæ¹åããããã«ãç®ç«ã£ãããã©ãŒãã³ã¹ãšãŠãŒã¶ããªãã£ã®ãã°ãä¿®æ£ããŸããã ãŠã§ãã¯æã ããªãŒã¯ããããšããããŸããããã©ãŠã¶ã¯ãã©ãã¯ããã¯ã¹ã§ã¯ãªãïŒãã©ãŠã¶èªäœãé€ãïŒãå€ãã®å ŽåããŠã§ãäžã®è¿·æãªãã°ãä¿®æ£ããã®ã«å¿ èŠãªã®ã¯ããã©ãŠã¶ã³ãŒãã®åæ¥éšããããã€ããäžæ¥ã ãã§ããããã«ã€ããŠãããã³ããããå«ããªãªãŒã¹ãæ°ãæåŸ ã€ã
Figmaãæ¹åããããã«ãWebãã©ãããã©ãŒã ãæ¹åã§ãããã®ã¯ä»ã«ããããããããŸãã
- ç§ãã¡ã®æ倧ã®èŠçã¯ããã£ã©ã¯ã¿ãŒã®èŒªéãšã«ãŒãã³ã°ããŒãã«ãžã®ã¢ã¯ã»ã¹ã®æ¬ åŠã§ãããçŸæç¹ã§ã¯ãŸã£ããå ¥æã§ããŸãã ã äž»ãªæžå¿µã®1ã€ã¯ã»ãã¥ãªãã£ã®åé¡ã§ããã æŠãã¯ãã§ã«å€±ãããŠããŸã ã ãã©ã³ãããŒã¿ãžã®ã¢ã¯ã»ã¹ããå°ãªããšããŠãŒã¶ãŒããã®èš±å¯ãèŠæ±ããã¢ãŒããããã³å人æ å ±ã«ææãªä»ã®APIã§éãããããšãé¡ã£ãŠããŸãã Khromovites ã¯ãããä¿®æ£ããæ¹æ³ãææ¡ããŸããããçŸåšåãçµãã§ããŸããã誰ãå°å¹³ç·ã«è¿«ã£ãŠããŸããã
- ã¯ãªããããŒãïŒ.aiã.pdfãªã©ïŒãã人æ°ã®ãã圢åŒã§ã³ã³ãã³ãã貌ãä»ããããã®ãµããŒããåãã§è¿œå ããŸããã Webã§ã¯ãããèš±å¯ããŠããŸãã ã ä»æ§ã®å¯äžã®åœ¢åŒã¯ãtext / plainããã³text / htmlã§ãïŒFigmaã¯ãHTMLã³ã¡ã³ãã§ãšã³ã³ãŒãããããã€ããªããŒã¿ã§text / htmlã䜿çšããŸãïŒã
- ãã1ã€ã®åé¡ã¯ãOS Xã®ãã©ãã¯ãããã«å¯Ÿãããã³ããžã§ã¹ãã£ã®ãµããŒãã®æ¬ åŠã§ããKhromovtsyã¯ããã³ãã€ãã³ããctrlãæŒãããŸãŸããŠã¹ãã€ãŒã«ã€ãã³ããéä¿¡ããããŒãžã§ãããåŠçã§ããpreventDefaultïŒïŒãåŒã³åºãã ããŸãç¥ãããŠããªãããã¯ãè¿œå ããŸããã ããã¯çŽ æŽããããFigmaã§ã®æ¡å€§ãšãã³ã¯ãã€ãã£ããªæããããŸãã ãããFoxã«è¿œå ããããšããŸãããããã®è©Šã¿ã¯ãŸã è¡ãè©°ã£ãŠããŸãã Safariã®ãã³ãã¯å¢å ã®ããã«æ©èœãããŠãŒã¶ãŒãæ··ä¹±ããããããç¡å¹ã«ããããšã¯ã§ããŸãã ã
ãããã«
ããã©ãŒãã³ã¹ãšå質ã¯ãåœç€Ÿã®æãéèŠãªå質ã®1ã€ã§ãã 圌ãã¯éåžžã®å質ãšã¯å°ãç°ãªããŸãããªããªã ãŸã第äžã«ã圌ããããªããšãã«åœŒãã«æ³šæãæããŸããã圌ãã¯ãã¹ãŠã®ããªãã¯ãè¡ããŸãã
ãã®èšäºã¯ãFigmaããŒã ã®ããã°ã®2015幎ã®èšäºã翻蚳ãããã®ã§ãã ãã®èšäºã¯æ°ãããã®ã§ã¯ãããŸããããããã§ãããªãé¢é£ããŠããŸãã ããã¯ãFigmaããŒã ã®ããã°ç¿»èš³ãµã€ã¯ã«ã®æåã®èšäºã§ãã 翻蚳ã®èè ã¯ã»ã«ã²ã€ã»ãã¥ã«ããã§ãã