Webã³ã³ããŒãã³ãã©ã€ãã©ãªãšã³ã·ã¹ãã ãæ¢æ±ãã°ããŒãã«ã«åå©çšå¯èœãªUIã³ã³ããŒãã³ããäœæããããã®ããã±ãŒãžç®¡çãšé åžæŠç¥ãç¶²çŸ ããŸãã
Webã³ã³ããŒãã³ãã©ã€ãã©ãªãšã³ã·ã¹ãã ïŒããã±ãŒãžç®¡çãšé åž
Webã³ã³ããŒãã³ãã¯ããã³ããšã³ãéçºã«é©åœããããããããŸããŸãªãã¬ãŒã ã¯ãŒã¯ããããžã§ã¯ãã§å©çšã§ããåå©çšå¯èœãªUIèŠçŽ ãäœæãã匷åãªæ¹æ³ãæäŸããŠããŸãããã®èšäºã§ã¯ãã°ããŒãã«ãªWebéçºã®ç¶æ³ã«ãããããã±ãŒãžç®¡çãšé åžæŠç¥ã«çŠç¹ãåœãŠããããã®ã³ã³ããŒãã³ãã广çã«ç®¡çã»é åžããããã®éèŠãªåŽé¢ã«ã€ããŠæãäžããŸãã
Webã³ã³ããŒãã³ãã®çè§£
Webã³ã³ããŒãã³ãã¯ãåå©çšå¯èœãªã«ã¹ã¿ã HTMLèŠçŽ ãäœæã§ããäžé£ã®Webãã©ãããã©ãŒã APIã§ããæ©èœãšã¹ã¿ã€ã«ãã«ãã»ã«åããç°ãªããããžã§ã¯ãéã§ã®äžè²«æ§ãšä¿å®æ§ã確ä¿ããŸãããã®ã¢ãããŒãã¯ãããã¢ãžã¥ãŒã«åãããæŽçãããéçºããã»ã¹ãä¿é²ããåœéçãªå ±åäœæ¥ãå€§èŠæš¡ã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠæ¥µããŠéèŠã§ããWebã³ã³ããŒãã³ããæ¯ããäž»èŠãªæè¡ã¯æ¬¡ã®ãšããã§ãã
- ã«ã¹ã¿ã èŠçŽ ïŒæ°ããHTMLã¿ã°ïŒäŸïŒ
<my-button>ïŒãå®çŸ©ããŸãã - Shadow DOMïŒã³ã³ããŒãã³ãã®å éšæ§é ãšã¹ã¿ã€ãªã³ã°ãã«ãã»ã«åããããŒãžã®ä»ã®éšåãšã®ç«¶åãé²ããŸãã
- HTMLãã³ãã¬ãŒããšã¹ãããïŒã³ã³ããŒãã³ãå ã§æè»ãªã³ã³ãã³ãæ¿å ¥ãšãã³ãã¬ãŒãåãå¯èœã«ããŸãã
ããã±ãŒãžç®¡çã®éèŠæ§
ããã±ãŒãžç®¡çã¯ãçŸä»£ã®ãããããœãããŠã§ã¢éçºã¯ãŒã¯ãããŒã®åºæ¬ã§ããäŸåé¢ä¿ã®ç®¡çãããŒãžã§ã³ç®¡çãã³ãŒãã®åå©çšãç°¡çŽ åããŸããWebã³ã³ããŒãã³ãã©ã€ãã©ãªãæ±ãéãããã±ãŒãžãããŒãžã£ã¯ä»¥äžã®ç¹ã§éèŠãªåœ¹å²ãæãããŸãã
- äŸåé¢ä¿ã®è§£æ±ºïŒã³ã³ããŒãã³ãã®äŸåé¢ä¿ïŒäŸïŒã¹ã¿ã€ãªã³ã°çšã©ã€ãã©ãªããŠãŒãã£ãªãã£é¢æ°ïŒã管çããŸãã
- ããŒãžã§ã³ç®¡çïŒã³ã³ããŒãã³ããšãã®äŸåé¢ä¿ã®ããŒãžã§ã³ã®äžè²«æ§ã確ä¿ããå®å®æ§ã®ç¶æãšç«¶åã®é²æ¢ã«äžå¯æ¬ ã§ãã
- é åžãšã€ã³ã¹ããŒã«ïŒã³ã³ããŒãã³ããããã±ãŒãžåããä»ã®ãããžã§ã¯ãã§ã®é åžãšã€ã³ã¹ããŒã«ã容æã«ãã倿§ãªåœéããŒã éã§ã®ååãšã³ãŒãã®åå©çšãä¿é²ããŸãã
Webã³ã³ããŒãã³ãåãã®äž»èŠãªããã±ãŒãžãããŒãžã£
Webã³ã³ããŒãã³ãéçºã«ã¯ãããã€ãã®ããã±ãŒãžãããŒãžã£ãäžè¬çã«äœ¿çšãããŠããŸãããããããç°ãªãæ©èœãšåŒ·ã¿ãæã£ãŠãããéžæã¯ãããžã§ã¯ãã®ããŒãºãããŒã ã®å¥œã¿ããã«ãããã»ã¹ãé åžæŠç¥ã«é¢ããç¹å®ã®èŠä»¶ã«äŸåããããšãå€ãã§ãã
npm (Node Package Manager)
npmã¯Node.jsãšJavaScriptã®ããã©ã«ãã®ããã±ãŒãžãããŒãžã£ã§ããå€ãã®Webã³ã³ããŒãã³ãã©ã€ãã©ãªãé¢é£ããŒã«ãå«ããåºå€§ãªããã±ãŒãžã®ãšã³ã·ã¹ãã ãèªããŸãããã®åŒ·ã¿ã¯ãå¹ åºãæ¡çšãè±å¯ãªã¬ãžã¹ããªããããŠçŽæçãªã³ãã³ãã©ã€ã³ã€ã³ã¿ãŒãã§ãŒã¹ã«ãããŸããç¹ã«JavaScriptãšNode.jsã«å€§ããäŸåããŠãããããžã§ã¯ãã«ãšã£ãŠãnpmã¯æ±çšæ§ã®é«ãè¯ãéžæè¢ã§ãã
äŸïŒnpmã䜿çšããŠWebã³ã³ããŒãã³ãã©ã€ãã©ãªãã€ã³ã¹ããŒã«ããïŒ
npm install @my-component-library/button-component
Yarn
YarnããŸããé床ãä¿¡é Œæ§ãã»ãã¥ãªãã£ã«éç¹ã眮ãã人æ°ã®ããã±ãŒãžãããŒãžã£ã§ããç¹ã«ãã£ãã·ã³ã°ã®å©çšã«ãããnpmãšæ¯èŒããŠã€ã³ã¹ããŒã«æéãéãããšãå€ãã§ããYarnã®åŒ·ã¿ã¯ãç°ãªãç°å¢ã§ãäžè²«ããŠåãäŸåé¢ä¿ãã€ã³ã¹ããŒã«ãããããšãä¿èšŒãããæ±ºå®è«çãªã€ã³ã¹ããŒã«ã«ãããŸããããã¯ãäžçäžã«åæ£ããããŒã ã«ãšã£ãŠéåžžã«äŸ¡å€ããããŸãã
äŸïŒYarnã䜿çšããŠWebã³ã³ããŒãã³ãã©ã€ãã©ãªãã€ã³ã¹ããŒã«ããïŒ
yarn add @my-component-library/button-component
pnpm (Performant npm)
pnpm (performant npm) ã¯ãå¹çæ§ãšãã£ã¹ã¯ã¹ããŒã¹ã®æé©åãéèŠããçŸä»£çãªããã±ãŒãžãããŒãžã£ã§ããããŒããªã³ã¯ã䜿çšããŠäŸåé¢ä¿ãä¿åãã䜿çšãããã£ã¹ã¯ã¹ããŒã¹ã®éãåæžããŸããpnpmã®é床ãšãªãœãŒã¹å¹çã¯ãå€§èŠæš¡ãããžã§ã¯ããè€æ°ã®ãããžã§ã¯ããåæã«æ±ãããŒã ã«ãšã£ãŠåªããéžæè¢ãšãªããŸããããã¯ç¹ã«ãå€§èŠæš¡ãªãªããžããªãšå€æ°ã®å人ã³ã³ããªãã¥ãŒã¿ã管çããã°ããŒãã«ãªçµç¹ã«ãšã£ãŠæçã§ãã
äŸïŒpnpmã䜿çšããŠWebã³ã³ããŒãã³ãã©ã€ãã©ãªãã€ã³ã¹ããŒã«ããïŒ
pnpm add @my-component-library/button-component
ããã±ãŒãžãããŒãžã£ãéžæããéã®èæ ®äºé
- ãããžã§ã¯ãã®èŠæš¡ãšè€éãïŒå€§èŠæš¡ãªãããžã§ã¯ãã§ã¯ãpnpmã®å¹çæ§ã倧ããªå©ç¹ãšãªãåŸãŸãã
- ããŒã ã®ç¿ç床ïŒããŒã ããã§ã«ç¥ã£ãŠããããã±ãŒãžãããŒãžã£ã䜿çšããããšã§ããªã³ããŒãã£ã³ã°ãšéçºãå éã§ããŸãã
- äŸåé¢ä¿ã®ç«¶åïŒYarnã®æ±ºå®è«çãªã€ã³ã¹ããŒã«ã¯ãäŸåé¢ä¿ã®ç«¶åãé²ãã®ã«åœ¹ç«ã¡ãŸãã
- ããã©ãŒãã³ã¹ïŒç°ãªãããã±ãŒãžãããŒãžã£ãè©äŸ¡ããéã«ã¯ãã€ã³ã¹ããŒã«é床ãšãã£ã¹ã¯ã¹ããŒã¹ã®äœ¿çšéãèæ ®ããŠãã ããã
Webã³ã³ããŒãã³ãã®é åžæŠç¥
Webã³ã³ããŒãã³ãã®é åžãšã¯ãä»ã®éçºè ãèªåã®ãããžã§ã¯ãã§äœ¿çšã§ããããã«ããããšã§ããããã€ãã®æŠç¥ãããããããããç°ãªãããŒãºããŠãŒã¹ã±ãŒã¹ã«å¯Ÿå¿ããŠããŸãã
ããã±ãŒãžã¬ãžã¹ããªïŒnpmãªã©ïŒãžã®å ¬é
æãäžè¬çãªæ¹æ³ã¯ãã³ã³ããŒãã³ããå ¬éãŸãã¯ãã©ã€ããŒãã®ããã±ãŒãžã¬ãžã¹ããªïŒnpmãYarnã®ã¬ãžã¹ããªããã©ã€ããŒãnpmã¬ãžã¹ããªãªã©ïŒã«å ¬éããããšã§ããããã«ãããéçºè ã¯éžæããããã±ãŒãžãããŒãžã£ã䜿çšããŠã³ã³ããŒãã³ããç°¡åã«ã€ã³ã¹ããŒã«ã§ããŸãããã®æŠç¥ã¯ã¹ã±ãŒã©ãã«ã§ããã倿§ãªããŒã ãå°ççãªå Žæãè¶ããååãä¿é²ããŸãã
å ¬éã®æé ïŒ
- ããã±ãŒãžèšå®ïŒ
package.jsonïŒïŒååãããŒãžã§ã³ã説æãèè ãäŸåé¢ä¿ãªã©ãå¿ èŠãªã¡ã¿ããŒã¿ãå«ãpackage.jsonãã¡ã€ã«ãé©åã«èšå®ããŸããmainãã£ãŒã«ãã¯éåžžãã³ã³ããŒãã³ãã®ãšã³ããªãŒãã€ã³ãïŒäŸïŒã³ã³ãã€ã«ãããJavaScriptãã¡ã€ã«ïŒãæããŸãã - ãã«ãããã»ã¹ïŒãã«ãããŒã«ïŒäŸïŒWebpackãRollupãParcelïŒã䜿çšããŠãã³ã³ããŒãã³ããæ¬çªçšã«ãã³ãã«ããæé©åããŸããããã«ã¯ãJavaScriptãšCSSã®æå°åããç°ãªãåºå圢åŒã®çæãªã©ãå«ãŸããŸãã
- ã¬ãžã¹ããªãžã®å
¬éïŒéžæããããã±ãŒãžãããŒãžã£ã®é©åãªã³ãã³ãã©ã€ã³ããŒã«ïŒäŸïŒ
npm publish,yarn publish,pnpm publishïŒã䜿çšããŠããã±ãŒãžãå ¬éããŸãã
ãã¡ã€ã«ã®çŽæ¥ã€ã³ããŒãïŒäžè¬çã§ã¯ãªãããç¹å®ã®ã·ããªãªã§æçšïŒ
å°èŠæš¡ãªãããžã§ã¯ããå éšã³ã³ããŒãã³ãã®å Žåãªã©ãã³ã³ããŒãã³ãã®JavaScriptãã¡ã€ã«ãçŽæ¥ãããžã§ã¯ãã«ã€ã³ããŒãããããšãã§ããŸããããã¯ãã¢ãžã¥ãŒã«ãã³ãã©ãŒã䜿çšãããããã©ãŠã¶ã§çŽæ¥ESã¢ãžã¥ãŒã«ã䜿çšããããšã§å®çŸã§ããŸãããã®ã¢ãããŒãã¯ãå€§èŠæš¡ãããžã§ã¯ããå ¬éã©ã€ãã©ãªã«ã¯ããŸãã¹ã±ãŒã©ãã«ã§ã¯ãããŸããããåäžã®ãããžã§ã¯ããçµç¹å ã§ãå°èŠæš¡ãå éšçšããŸãã¯è¿ éã«éçºãããã³ã³ããŒãã³ãã®ç¹å®ã®çµ±åã·ããªãªã§åœ¹ç«ã¡ãŸãã
äŸïŒESã¢ãžã¥ãŒã«ã䜿çšããã€ã³ããŒã
<script type="module">
import { MyButton } from './my-button.js';
customElements.define('my-button', MyButton);
</script>
CDNïŒã³ã³ãã³ãããªããªãŒãããã¯ãŒã¯ïŒã®å©çš
ã³ã³ãã³ãããªããªãŒãããã¯ãŒã¯ïŒCDNïŒã¯ãWebã³ã³ããŒãã³ãããã¹ãããäœé å»¶ã§ã°ããŒãã«ã«é ä¿¡ããæ¹æ³ãæäŸããŸããããã¯ãè€æ°ã®Webãµã€ããã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããWebã³ã³ããŒãã³ãã«ç¹ã«åœ¹ç«ã¡ãŸããCDNã䜿çšããããšã§ãå°ççãªå Žæã«é¢ä¿ãªããäžçäžã®ãŠãŒã¶ãŒã«ã³ã³ããŒãã³ããè¿ éã«é ä¿¡ãããããšãä¿èšŒã§ããŸããå€ãã®CDNïŒäŸïŒjsDelivr, unpkgïŒã¯ããªãŒãã³ãœãŒã¹ãããžã§ã¯ãã«å¯ŸããŠç¡æã®ãã¹ãã£ã³ã°ãæäŸããŠããŸãã
CDNãå©çšããå©ç¹ïŒ
- ããã©ãŒãã³ã¹ïŒãã£ãã·ã³ã°ãšå°ççã«åæ£ããããµãŒããŒã«ãããèªã¿èŸŒã¿æéãççž®ãããŸãã
- ã¹ã±ãŒã©ããªãã£ïŒCDNã¯ãããã©ãŒãã³ã¹ãäœäžãããããšãªã倧éã®ãã©ãã£ãã¯ãåŠçã§ããŸãã
- 䜿ããããïŒæ°è¡ã®HTMLã§ç°¡åã«çµ±åã§ããŸãã
äŸïŒCDNããã³ã³ããŒãã³ããã€ã³ã¯ã«ãŒããã
<script type="module" src="https://cdn.jsdelivr.net/npm/@my-component-library/button-component@1.0.0/dist/button-component.js"></script>
ãã¬ãŒã ã¯ãŒã¯åºæã®ããã±ãŒãžãšããŠãã«ãã»é åžãã
Webã³ã³ããŒãã³ãã¯ãã¬ãŒã ã¯ãŒã¯ã«äŸåããŸããããReactãAngularãVueãªã©ã®äººæ°ã®ãããã¬ãŒã ã¯ãŒã¯ã«ç¹åããããã±ãŒãžãæäŸããããšã¯æçã§ããããã«ã¯ãWebã³ã³ããŒãã³ãããã¬ãŒã ã¯ãŒã¯ã®ã³ã³ããŒãã³ãã¢ãã«ãšçµ±åããã©ãããŒã³ã³ããŒãã³ãã®äœæãå«ãŸããŸãããã®ã¢ãããŒãã«ãããéçºè ã¯éžæãããã¬ãŒã ã¯ãŒã¯å ã§ãããèªç¶ã§éŠŽæã¿ã®ããæ¹æ³ã§Webã³ã³ããŒãã³ãã䜿çšã§ããŸããããã«ã¯ãçµ±åãç°¡çŽ åãããã«ãããŒã«ãã¢ããã¿ãŒã©ã€ãã©ãªã®äœ¿çšãå«ãŸããå ŽåããããŸãã
äŸïŒã©ãããŒã³ã³ããŒãã³ãã䜿çšããŠReactãšWebã³ã³ããŒãã³ããçµ±åããïŒ
import React from 'react';
function MyButtonWrapper(props) {
return <my-button {...props} />;
}
ã¢ãã¬ã
ã¢ãã¬ãïŒã¢ããªã·ãã¯ãªããžããªïŒã¯ãè€æ°ã®é¢é£ãããžã§ã¯ãïŒäŸïŒWebã³ã³ããŒãã³ãã©ã€ãã©ãªãããã¥ã¡ã³ãããµã³ãã«ãå Žåã«ãã£ãŠã¯ãã¬ãŒã ã¯ãŒã¯åºæã®ã©ãããŒïŒãæ ŒçŽããåäžã®ãªããžããªã§ããããã«ãããç¹ã«äžé£ã®é¢é£Webã³ã³ããŒãã³ãã«åãçµãå€§èŠæš¡ãªããŒã ã«ãšã£ãŠãäŸåé¢ä¿ã®ç®¡çãã³ãŒãã®å ±æãããŒãžã§ã³ç®¡çãç°¡çŽ åãããŸãããã®ã¢ãããŒãã¯ãé«åºŠãªäžè²«æ§ãä¿å®ã®å®¹æããããã³æ§ã ãªã³ã³ããŒãã³ãã»ããéã§ã®ååã®åäžãå¿ èŠãšããããŒã ã«ãšã£ãŠæçã§ãã
ã¢ãã¬ãã®å©ç¹ïŒ
- ç°¡çŽ åãããäŸåé¢ä¿ç®¡ç
- ã³ãŒãã®å ±æãšåå©çšã®å®¹æå
- äžè²«ããããŒãžã§ã³ç®¡ç
- ååã®åäž
æ¬çªç°å¢åãã®ãã³ãã«ãšæé©å
Webã³ã³ããŒãã³ããé åžããåã«ãæ¬çªç°å¢åãã«æé©åããããšãéèŠã§ããããã«ã¯ãã³ãŒãã®ãã³ãã«ãJavaScriptãšCSSã®æå°åããããŠç°ãªããŠãŒã¹ã±ãŒã¹ã«å¯Ÿå¿ããããã®ç°ãªãåºå圢åŒã®çæãªã©ãå«ãŸããŸããäž»ãªèæ ®äºé ã¯æ¬¡ã®ãšããã§ãã
ãã³ãã«ããŒã«
WebpackãRollupãParcelãªã©ã®ããŒã«ã¯ãã³ãŒããåäžã®ãã¡ã€ã«ïŒãŸãã¯äžé£ã®ãã¡ã€ã«ïŒã«ãã³ãã«ããããã«äœ¿çšãããŸããããã«ãããã³ã³ããŒãã³ãã®èªã¿èŸŒã¿ã«å¿ èŠãªHTTPãªã¯ãšã¹ãã®æ°ãæžããããã©ãŒãã³ã¹ãåäžããŸãããããã®ããŒã«ã¯ãŸããããªãŒã·ã§ã€ãã³ã°ïŒæªäœ¿çšã³ãŒãã®åé€ïŒãã³ãŒãåå²ïŒã³ãŒãã®ãªã³ããã³ãèªã¿èŸŒã¿ïŒããããã³ãŒãã®åé€ãªã©ã®æ©èœãå¯èœã«ããŸãããã³ãã©ãŒã®éžæã¯ããããžã§ã¯ãåºæã®èŠä»¶ãšå人ã®å¥œã¿ã«äŸåããŸãã
æå°åïŒMinificationïŒ
æå°åã¯ã空çœãã³ã¡ã³ããåé€ãã倿°åãçãããããšã§ãJavaScriptãšCSSãã¡ã€ã«ã®ãµã€ãºãçž®å°ããŸããããã«ãããããŠã³ããŒãããå¿ èŠã®ããããŒã¿éãæžããèªã¿èŸŒã¿æéãççž®ãããŸããæå°åã¯ããã«ãããŒã«ãå°çšã®æå°åããŒã«ã䜿çšããŠèªååã§ããŸãã
ã³ãŒãåå²
ã³ãŒãåå²ã«ãããã³ãŒããããå°ããªãã£ã³ã¯ã«åå²ãããªã³ããã³ãã§èªã¿èŸŒãããšãã§ããŸããããã¯ãããŒãžäžã§åžžã«äœ¿çšããããšã¯éããªãWebã³ã³ããŒãã³ãã«ç¹ã«åœ¹ç«ã¡ãŸããã³ã³ããŒãã³ããå¿ èŠãªãšãã«ã®ã¿èªã¿èŸŒãããšã§ãWebããŒãžã®åæèªã¿èŸŒã¿æéãå€§å¹ ã«ççž®ã§ããŸãã
ããŒãžã§ã³ç®¡ç
ã»ãã³ãã£ãã¯ããŒãžã§ãã³ã°ïŒSemVerïŒã¯ããœãããŠã§ã¢ã®ããŒãžã§ã³ã管çããããã®æšæºã§ãã倿Žã®æ§è³ªã瀺ãããã«ã3éšæ§æã®åœ¢åŒïŒã¡ãžã£ãŒ.ãã€ããŒ.ãããïŒã䜿çšããŸããSemVerã®ååã«åŸãããšã¯ãäºææ§ãç¶æããéçºè ãWebã³ã³ããŒãã³ãã®æŽæ°ã®åœ±é¿ãç°¡åã«çè§£ã§ããããã«ããããã«äžå¯æ¬ ã§ããé©åãªããŒãžã§ã³ç®¡çã¯ãæŽæ°ã®ç®¡çãå©ããéçºè ãåžžã«æ£ããããŒãžã§ã³ã«ã¢ã¯ã»ã¹ã§ããããã«ããŸãã
Webã³ã³ããŒãã³ãã©ã€ãã©ãªéçºã®ãã¹ããã©ã¯ãã£ã¹
- ããã¥ã¡ã³ããŒã·ã§ã³ïŒäœ¿çšäŸãAPIãªãã¡ã¬ã³ã¹ãã¹ã¿ã€ãªã³ã°ã®ã«ã¹ã¿ãã€ãºãªãã·ã§ã³ãªã©ãå æ¬çãªããã¥ã¡ã³ããæäŸããŸããStorybookãDoczãªã©ã®ããŒã«ã䜿çšããŠãã€ã³ã¿ã©ã¯ãã£ãã§ããæ§é åãããããã¥ã¡ã³ããäœæããŸããããã¯ãã°ããŒãã«ãªæ¡çšãšå€æ§ãªããŒã ã«ãã广çãªå©çšã®éµãšãªããŸãã
- ãã¹ãïŒåäœãã¹ããçµ±åãã¹ãããšã³ãããŒãšã³ããã¹ããå«ããå ç¢ãªãã¹ãæŠç¥ãå®è£ ããŸããèªåãã¹ãã¯ãã³ã³ããŒãã³ãã®å質ãšä¿¡é Œæ§ãä¿èšŒããŸãããã¹ããã¢ã¯ã»ã¹å¯èœã§ãããã©ã€ãã©ãªã®ã³ã³ããªãã¥ãŒã¿ãŒãå©çšè ãäžçäžã§å®è¡ã§ããããã«ããŸãããã¹ããã¬ãŒã ã¯ãŒã¯ã®åœéåãæ€èšããè€æ°ã®èšèªããµããŒãããŸãã
- ã¢ã¯ã»ã·ããªãã£ïŒWCAGã¬ã€ãã©ã€ã³ã«åŸããã³ã³ããŒãã³ããé害ãæã€ãŠãŒã¶ãŒã«ãã¢ã¯ã»ã¹å¯èœã§ããããšãä¿èšŒããŸããããã«ã¯ãé©åãªARIA屿§ã®æäŸãããŒããŒãããã²ãŒã·ã§ã³ãååãªè²ã®ã³ã³ãã©ã¹ããå«ãŸããŸããã¢ã¯ã»ã·ããªãã£ã¯ãã°ããŒãã«ãªå æ¬æ§ã«ãšã£ãŠäžå¯æ¬ ã§ãã
- ããã©ãŒãã³ã¹ïŒåæèªã¿èŸŒã¿æéãã¬ã³ããªã³ã°é床ãã¡ã¢ãªäœ¿çšéãªã©ã®èŠå ãèæ ®ããŠãã³ã³ããŒãã³ãã®ããã©ãŒãã³ã¹ãæé©åããŸããããã¯ãã€ã³ã¿ãŒãããæ¥ç¶ãé ããŠãŒã¶ãŒãå€ãããã€ã¹ã䜿çšããŠãããŠãŒã¶ãŒã«ãšã£ãŠç¹ã«éèŠã§ããã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã®ããã©ãŒãã³ã¹æé©åã¯äžå¯æ¬ ã§ãã
- åœéåïŒi18nïŒãšããŒã«ã©ã€ãŒãŒã·ã§ã³ïŒl10nïŒïŒã³ã³ããŒãã³ããåœéåïŒã³ãŒãã翻蚳å¯èœã«æºåããããšïŒãšããŒã«ã©ã€ãŒãŒã·ã§ã³ïŒã³ã³ããŒãã³ããç¹å®ã®èšèªãå°åã«é©å¿ãããããšïŒããµããŒãããããã«èšèšããŸããããã«ãããã³ã³ããŒãã³ããç°ãªãåœãèšèªã§äœ¿çšã§ããããã«ãªããŸãã
- ã»ãã¥ãªãã£ïŒãŠãŒã¶ãŒå ¥åã®ãµãã¿ã€ãºãã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒè匱æ§ã®é²æ¢ãªã©ãã»ãã¥ãªãã£ã®ãã¹ããã©ã¯ãã£ã¹ãå®è£ ããŸããå®å šãªã³ã³ããŒãã³ãã¯ããŠãŒã¶ãŒã®ããŒã¿ãšè©å€ãä¿è·ããŸãã
- ãã«ãããŒã«ã®çµ±åãèæ ®ããïŒæ¢åã®ã¯ãŒã¯ãããŒã«ç°¡åã«çµ±åã§ããã³ã³ããŒãã³ãã®ã³ã³ãã€ã«ãæå°åãé åžã«å¿ èŠãªæ©èœããµããŒããããã«ãããŒã«ãéžæããŸããç°ãªãå°ççãªå Žæã§äººæ°ã®ããæ§ã ãªIDEããã«ãã·ã¹ãã ãšã®çµ±åãèæ ®ããŸãã
æ£ããã¢ãããŒãã®éžæ
ããã±ãŒãžç®¡çãšé åžã®æé©ãªã¢ãããŒãã¯ããããžã§ã¯ãã®ç¹å®ã®ããŒãºãšç®æšã«äŸåããŸãã以äžã®èŠå ãèæ ®ããŠãã ããã
- ãããžã§ã¯ãã®èŠæš¡ïŒå°èŠæš¡ãªãããžã§ã¯ãã§ã¯ããã¡ã€ã«ã®çŽæ¥ã€ã³ããŒããCDNã§ååãªå ŽåããããŸããå€§èŠæš¡ãªãããžã§ã¯ãã§ã¯ãããã±ãŒãžã¬ãžã¹ããªãžã®å ¬éãäžè¬çã«æè¯ã®éžæã§ãã
- ããŒã ã®èŠæš¡ãšæ§é ïŒå€§èŠæš¡ãªããŒã ãå ±åãããžã§ã¯ãã§ã¯ãããã±ãŒãžã¬ãžã¹ããªãšæç¢ºã«å®çŸ©ããããã«ãããã»ã¹ãäžå¯æ¬ ã§ãã
- ã¿ãŒã²ãããªãŒãã£ãšã³ã¹ïŒéžæãè¡ãéã«ã¯ãã¿ãŒã²ãããªãŒãã£ãšã³ã¹ã®æè¡çãªã¹ãã«ãšçµéšãèæ ®ããŠãã ããã
- ã¡ã³ããã³ã¹ïŒæç¶å¯èœã§ãé·æã«ããã£ãŠç¶æããããæŠç¥ãéžæããŠãã ããã
å°æ¥ã®ãã¬ã³ããšèæ ®äºé
Webã³ã³ããŒãã³ãã®ãšã³ã·ã¹ãã ã¯ç¶ç¶çã«é²åããŠããŸããæ°ããªãã¬ã³ãã«ã€ããŠåžžã«æ å ±ãåŸãããšãäžå¯æ¬ ã§ãã以äžã®æ°ããªãã¬ã³ããèæ ®ããŠãã ããã
- ãã©ãŠã¶ã§ã®ESMïŒECMAScript ModulesïŒïŒã¢ãã³ãã©ãŠã¶ã§ã®ESã¢ãžã¥ãŒã«ã®ãµããŒãã®å¢å ã«ãããé åžããã»ã¹ãç°¡çŽ åãããå Žåã«ãã£ãŠã¯è€éãªãã«ãèšå®ã®å¿ èŠæ§ãæžå°ããŸãã
- ã³ã³ããŒãã³ãã©ã€ãã©ãªïŒWebã³ã³ããŒãã³ãã®äœæãšç®¡çãå¹çåããçµã¿èŸŒã¿ã®æ©èœãšæé©åãæäŸããã³ã³ããŒãã³ãã©ã€ãã©ãªïŒäŸïŒLit, StencilïŒã®äººæ°ãé«ãŸã£ãŠããŸãã
- WebAssembly (Wasm)ïŒWebAssemblyã¯ãã³ã³ãã€ã«ãããã³ãŒãïŒäŸïŒC++, RustïŒããã©ãŠã¶ã§å®è¡ããæ¹æ³ãæäŸããè€éãªWebã³ã³ããŒãã³ãã®ããã©ãŒãã³ã¹ãåäžãããå¯èœæ§ããããŸãã
- ã³ã³ããŒãã³ãã®åæïŒããå°ããåå©çšå¯èœãªã³ã³ããŒãã³ãããè€éãªã³ã³ããŒãã³ããæ§æããããã®æ°ããªãã¿ãŒã³ãç»å ŽããŠããŸããããã«ãããåå©çšæ§ãšæè»æ§ãããã«åäžããŸãã
- ãµãŒããŒãµã€ãã¬ã³ããªã³ã°ïŒSSRïŒãµããŒãïŒWebã³ã³ããŒãã³ãããµãŒããŒãµã€ãã¬ã³ããªã³ã°ãã¬ãŒã ã¯ãŒã¯ãšããŸã飿ºããããã«ããããšã¯ãæé©ãªããã©ãŒãã³ã¹ãšSEOãéæããããã«éèŠã«ãªããŸãã
çµè«
广çãªããã±ãŒãžç®¡çãšé åžã¯ãäžçäžã§Webã³ã³ããŒãã³ãã©ã€ãã©ãªã广çã«äœæããå ±æããããã«äžå¯æ¬ ã§ãããã®èšäºã§èª¬æããããŸããŸãªããã±ãŒãžãããŒãžã£ãé åžæŠç¥ããã¹ããã©ã¯ãã£ã¹ãçè§£ããããšã§ãããã³ããšã³ãéçºã®ã¯ãŒã¯ãããŒã匷åãããåå©çšå¯èœã§ä¿å®æ§ã®é«ãWebã³ã³ããŒãã³ããäœæã§ããŸãããã®ç¥èã¯ãåœéçãªãããžã§ã¯ãã§å¹æçã«ååããå°æ¥æ§ã®ããWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«æ¥µããŠéèŠã§ããWebã³ã³ããŒãã³ããšãã®å ç¢ãªãšã³ã·ã¹ãã ãæŽ»çšããŠãããã©ãŒãã³ã¹ãã¢ã¯ã»ã·ããªãã£ãåœéåãã»ãã¥ãªãã£ãèæ ®ããäžçäžã®ãŠãŒã¶ãŒã«ãµãŒãã¹ãæäŸãããå埩åãããã¹ã±ãŒã©ãã«ãªãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãéçºããŠãã ããã