ããã³ããšã³ããã¶ã€ã³ã·ã¹ãã ã®ã¢ãŒããã¯ãã£ã解説ãã³ã³ããŒãã³ãã©ã€ãã©ãªèšèšãã¹ã±ãŒã©ããªãã£ãã°ããŒãã«ã¢ã¯ã»ã·ããªãã£ã«çŠç¹ãåœãŠãåå©çšå¯èœãªã³ã³ããŒãã³ãã·ã¹ãã ã®æ§ç¯ãšç¶æã®ãã¹ããã©ã¯ãã£ã¹ãåŠã¶ã
ããã³ããšã³ããã¶ã€ã³ã·ã¹ãã ïŒã°ããŒãã«ãªã¹ã±ãŒã©ããªãã£ãå®çŸããã³ã³ããŒãã³ãã©ã€ãã©ãªã®ã¢ãŒããã¯ãã£
仿¥ã®æ¥éã«é²åããããžã¿ã«ç°å¢ã«ãããŠãã°ããŒãã«ãªãªãŒããç®æãçµç¹ã«ãšã£ãŠãå ç¢ã§ã¹ã±ãŒã©ãã«ãªããã³ããšã³ãã¯äžå¯æ¬ ã§ãã ããèšèšãããããã³ããšã³ããã¶ã€ã³ã·ã¹ãã ãç¹ã«ãã®ã³ã³ããŒãã³ãã©ã€ãã©ãªã¯ãäžè²«ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãå¹ççãªéçºã¯ãŒã¯ãããŒãããã³ä¿å®å¯èœãªã³ãŒãããŒã¹ã®åºç€ã圢æããŸãã ãã®èšäºã§ã¯ãããã³ããšã³ããã¶ã€ã³ã·ã¹ãã å ã®ã³ã³ããŒãã³ãã©ã€ãã©ãªã®ã¢ãŒããã¯ãã£ã®è©³çްãæãäžãã倿§ãªã°ããŒãã«ãªãŒãã£ãšã³ã¹ã«å¯Ÿå¿ããããã«ãã¹ã±ãŒã©ããªãã£ãã¢ã¯ã»ã·ããªãã£ãããã³åœéåã匷調ããŸãã
ããã³ããšã³ããã¶ã€ã³ã·ã¹ãã ãšã¯ïŒ
ããã³ããšã³ããã¶ã€ã³ã·ã¹ãã ã¯ãåå©çšå¯èœãªUIã³ã³ããŒãã³ãããã¿ãŒã³ãã¬ã€ãã©ã€ã³ãããã³ããã¥ã¡ã³ãã®å æ¬çãªã³ã¬ã¯ã·ã§ã³ã§ããããã¹ãŠã®ããžã¿ã«è£œåå šäœã§çµ±äžãããããžã¥ã¢ã«èšèªã確ç«ããäžè²«æ§ãä¿é²ããŸãã çµç¹ã®ããã³ããšã³ãé¢é£ã®ãã¹ãŠã®åŽé¢ã«é¢ããåäžã®ä¿¡é Œã§ããæ å ±æºãšèããŠãã ããã
ããã³ããšã³ããã¶ã€ã³ã·ã¹ãã ãå®è£ ããäž»ãªå©ç¹ã«ã¯ã次ã®ãã®ããããŸãã
- äžè²«æ§ã®åäžïŒ ãã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã§çµ±äžãããå€èŠ³ãšæäœæ§ã確ä¿ãããã©ã³ãèªç¥åºŠãé«ããŸãã
- å¹çã®åäžïŒ éçºè ãããã«äœ¿çšã§ãããäºåã«æ§ç¯ããã³ãã¹ããããã³ã³ããŒãã³ããæäŸããããšã«ãããéçºæéãççž®ããŸãã
- ã³ã©ãã¬ãŒã·ã§ã³ã®åŒ·åïŒ ãã¶ã€ããŒãšéçºè ã®éã®ããè¯ãã³ãã¥ãã±ãŒã·ã§ã³ãä¿é²ããèšèšããéçºãžã®ããã»ã¹ãåçåããŸãã
- ã¡ã³ããã³ã¹ã³ã¹ãã®åæžïŒ èšèšãšã³ãŒãã®å€æŽãäžå åããããšã«ãããæŽæ°ãšã¡ã³ããã³ã¹ãç°¡çŽ åããŸãã
- ã¢ã¯ã»ã·ããªãã£ã®åäžïŒ ãã¹ãŠã®ã³ã³ããŒãã³ãã«ã¢ã¯ã»ã·ããªãã£ã«é¢ããèæ ®äºé ãçµã¿èŸŒãããšã«ãããã€ã³ã¯ã«ãŒã·ããªèšèšãã©ã¯ãã£ã¹ãä¿é²ããŸãã
- ã¹ã±ãŒã©ããªãã£ïŒ æ°ããæ©èœãšãã©ãããã©ãŒã ãžã®å®¹æãªæ¡åŒµãšé©å¿ãå¯èœã«ããŸãã
ãã¶ã€ã³ã·ã¹ãã ã®äžå¿ïŒã³ã³ããŒãã³ãã©ã€ãã©ãª
ã³ã³ããŒãã³ãã©ã€ãã©ãªã¯ãããããããã³ããšã³ããã¶ã€ã³ã·ã¹ãã ã®äžå¿ã§ãã ãã¿ã³ãå ¥åãªã©ã®åºæ¬çãªæ§æèŠçŽ ãããããã²ãŒã·ã§ã³ããŒãããŒã¿ããŒãã«ãªã©ã®ããè€éãªã³ã³ããŒãã³ããŸã§ãåå©çšå¯èœãªUIèŠçŽ ã®ãªããžããªã§ãã ãããã®ã³ã³ããŒãã³ãã¯æ¬¡ã®ãšããã§ããå¿ èŠããããŸãã
- åå©çšå¯èœïŒ è€æ°ã®ãããžã§ã¯ããšã¢ããªã±ãŒã·ã§ã³å šäœã§äœ¿çšã§ããããã«èšèšãããŠããŸãã
- ã¢ãžã¥ãŒã«åŒïŒ ç¬ç«ããŠãããèªå·±å®çµåã§ãã·ã¹ãã ã®ä»ã®éšåãžã®äŸåé¢ä¿ãæå°éã«æããŸãã
- ååãªããã¥ã¡ã³ãïŒ äœ¿çšæ¹æ³ãããããã£ãããã³ãã¹ããã©ã¯ãã£ã¹ãæŠèª¬ããæç¢ºãªããã¥ã¡ã³ããä»å±ããŠããŸãã
- ãã¹ãå¯èœïŒ æ©èœãšä¿¡é Œæ§ã確ä¿ããããã«åŸ¹åºçã«ãã¹ããããŠããŸãã
- ã¢ã¯ã»ã¹å¯èœïŒ WCAGã¬ã€ãã©ã€ã³ã«æºæ ããã¢ã¯ã»ã·ããªãã£ã念é ã«çœ®ããŠæ§ç¯ãããŠããŸãã
- ããŒãèšå®æžã¿ïŒ ããŸããŸãªããŒããšãã©ã³ãèŠä»¶ããµããŒãããããã«èšèšãããŠããŸãã
ã³ã³ããŒãã³ãã©ã€ãã©ãªã®ã¢ãŒããã¯ãã£ïŒè©³çްãªåæ
å ç¢ãªã³ã³ããŒãã³ãã©ã€ãã©ãªã®ã¢ãŒããã¯ãã£ãèšèšããã«ã¯ãéžæãããã¯ãããžãŒã¹ã¿ãã¯ãçµç¹ã®ç¹å®ã®ããŒãºãã¿ãŒã²ãããªãŒãã£ãšã³ã¹ãªã©ãããã€ãã®èŠçŽ ãæ éã«æ€èšããå¿ èŠããããŸãã 以äžã«ãããã€ãã®äž»èŠãªã¢ãŒããã¯ãã£ã«é¢ããèæ ®äºé ã瀺ããŸãã
1. ã¢ãããã¯ãã¶ã€ã³ã®æ¹æ³è«
Brad Frostã«ãã£ãŠæ®åããã¢ãããã¯ãã¶ã€ã³ã¯ãã€ã³ã¿ãŒãã§ãŒã¹ãåºæ¬çãªæ§æèŠçŽ ã«åè§£ããããšã«ããããã¶ã€ã³ã·ã¹ãã ãäœæããããã®æ¹æ³è«ã§ãã ããã¯ãç©è³ªãååã§æ§æãããŠããæ¹æ³ã«äŒŒãŠããŸãã ãã®ã¢ãããŒãã¯ãã¢ãžã¥ãŒã«æ§ãåå©çšæ§ãããã³ä¿å®æ§ãä¿é²ããŸãã
ã¢ãããã¯ãã¶ã€ã³ã®5ã€ã®ç°ãªã段éã¯æ¬¡ã®ãšããã§ãã
- ååïŒ ãã¿ã³ãå ¥åãã©ãã«ãã¢ã€ã³ã³ãªã©ãæå°ã§åå²äžå¯èœãªUIèŠçŽ ã
- ååïŒ ç¹å®ã®æ©èœãå®è¡ããååã®çµã¿åãããããšãã°ãæ€çŽ¢ããŒïŒå ¥å+ãã¿ã³ïŒã
- ææ©äœïŒ ããããŒïŒããŽ+ããã²ãŒã·ã§ã³+æ€çŽ¢ããŒïŒãªã©ãã€ã³ã¿ãŒãã§ãŒã¹ã®æç¢ºãªã»ã¯ã·ã§ã³ã圢æããååã®ã°ã«ãŒãã
- ãã³ãã¬ãŒãïŒ æ§é ãšã³ã³ãã³ããã¬ãŒã¹ãã«ããŒãå®çŸ©ããããŒãžã¬ãã«ã®ã¬ã€ã¢ãŠãã
- ããŒãžïŒ å®éã®ã³ã³ãã³ããå«ããã³ãã¬ãŒãã®ç¹å®ã®ã€ã³ã¹ã¿ã³ã¹ã§ãæçµçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã玹ä»ããŸãã
ååããå§ããŠãåŸã ã«ããŒãžãäœæããããšã«ãããäžè²«æ§ãšåå©çšæ§ãä¿é²ããéå±€æ§é ãäœæããŸãã ãã®ã¢ãžã¥ãŒã«åŒã®ã¢ãããŒãã«ãããæéã®çµéãšãšãã«ããç°¡åã«ãã¶ã€ã³ã·ã¹ãã ãæŽæ°ããã³ä¿å®ããããšãã§ããŸãã
äŸïŒ åçŽãªãã©ãŒã èŠçŽ ã¯ã次ã®ããã«æ§ç¯ã§ããŸãã
- ååïŒ `Label`ã`Input`
- ååïŒ `FormInput`ïŒ`Label`ãš`Input`ãæ€èšŒããžãã¯ãšçµã¿åãããŠããŸãïŒ
- ææ©äœïŒ `RegistrationForm`ïŒè€æ°ã®`FormInput`ååãšéä¿¡ãã¿ã³ãã°ã«ãŒãåïŒ
2. ã³ã³ããŒãã³ãã®æ§é ãšç·šæ
çºèŠæ§ãšä¿å®æ§ã«ã¯ãé©åã«æŽçãããã³ã³ããŒãã³ãã©ã€ãã©ãªæ§é ãäžå¯æ¬ ã§ãã 以äžã®ååãæ€èšããŠãã ããã
- ã«ããŽãªåãïŒ æ©èœãŸãã¯ç®çïŒäŸïŒ`Forms`ã`Navigation`ã`Data Display`ïŒã«åºã¥ããŠã³ã³ããŒãã³ããã°ã«ãŒãåããŸãã
- åœåèŠåïŒ ã³ã³ããŒãã³ããšãã®ããããã£ã«äžè²«æ§ãããã説æçãªåœåèŠåã䜿çšããŸãïŒäŸïŒ`Button`ã`Button--primary`ã`Button--secondary`ïŒã
- ãã£ã¬ã¯ããªæ§é ïŒ ã³ã³ããŒãã³ããæç¢ºã§è«ççãªãã£ã¬ã¯ããªæ§é ã«ç·šæããŸãïŒäŸïŒ`/components/Button/Button.js`ã`/components/Button/Button.css`ã`/components/Button/Button.stories.js`ïŒã
- ããã¥ã¡ã³ãïŒ äœ¿çšäŸãããããã£ã®èª¬æãã¢ã¯ã»ã·ããªãã£ã«é¢ããèæ ®äºé ãªã©ãåã³ã³ããŒãã³ãã®å æ¬çãªããã¥ã¡ã³ããæäŸããŸãã
ãã£ã¬ã¯ããªæ§é ã®äŸïŒ
/components
/Button
Button.js
Button.css
Button.stories.js
Button.mdx (Documentation)
/Input
Input.js
Input.css
Input.stories.js
Input.mdx (Documentation)
/Navigation
Navigation.js
Navigation.css
Navigation.stories.js
Navigation.mdx (Documentation)
3. ãã¯ãããžãŒã¹ã¿ãã¯ã®èæ ®äºé
ãã¯ãããžãŒã¹ã¿ãã¯ã®éžæã¯ãã³ã³ããŒãã³ãã©ã€ãã©ãªã®ã¢ãŒããã¯ãã£ã«å€§ããªåœ±é¿ãäžããŸãã äžè¬çãªãªãã·ã§ã³ã«ã¯æ¬¡ã®ãã®ããããŸãã
- ReactïŒ ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã®æ§ç¯ã«ãã䜿çšãããJavaScriptã©ã€ãã©ãªã§ãããã³ã³ããŒãã³ãããŒã¹ã®ã¢ãŒããã¯ãã£ãšä»®æ³DOMã§ç¥ãããŠããŸãã
- AngularïŒ äŸåé¢ä¿ã®æ³šå ¥ãTypeScriptã®ãµããŒããªã©ã®æ©èœãæäŸãããè€éãªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®å æ¬çãªãã¬ãŒã ã¯ãŒã¯ã§ãã
- Vue.jsïŒ åŠç¿ãšçµ±åã容æãªããã°ã¬ãã·ããã¬ãŒã ã¯ãŒã¯ã§ãããUIã³ã³ããŒãã³ãã®æ§ç¯ã«æè»ã§é«æ§èœãªãœãªã¥ãŒã·ã§ã³ãæäŸããŸãã
- Webã³ã³ããŒãã³ãïŒ åå©çšå¯èœãªã«ã¹ã¿ã HTMLèŠçŽ ãäœæã§ããäžé£ã®Webæšæºã ãããã¯ãä»»æã®JavaScriptãã¬ãŒã ã¯ãŒã¯ã§äœ¿çšããããšãã䜿çšããªããŠã䜿çšã§ããŸãã
ãã¯ãããžãŒã¹ã¿ãã¯ãéžæããéã«ã¯ãããŒã ã®å°éç¥èããããžã§ã¯ãã®èŠä»¶ãé·æçãªä¿å®æ§ãªã©ã®èŠçŽ ãèæ ®ããŠãã ããã ReactãAngularãVue.jsãªã©ã®ãã¬ãŒã ã¯ãŒã¯ã¯ãåå©çšå¯èœãªUIèŠçŽ ãäœæããããã»ã¹ãç°¡çŽ åããçµã¿èŸŒã¿ã®ã³ã³ããŒãã³ãã¢ãã«ãæäŸããŸãã Webã³ã³ããŒãã³ãã¯ããã¬ãŒã ã¯ãŒã¯ã«äŸåããªãã¢ãããŒããæäŸããããŸããŸãªãããžã§ã¯ãããã¯ãããžãŒã§äœ¿çšã§ããã³ã³ããŒãã³ããäœæã§ããŸãã
4. ãã¶ã€ã³ããŒã¯ã³
ãã¶ã€ã³ããŒã¯ã³ã¯ããã¶ã€ã³ã·ã¹ãã ã®ããžã¥ã¢ã«DNAã衚ããã©ãããã©ãŒã ã«äŸåããªãå€ã§ãã è²ãã¿ã€ãã°ã©ãã£ãééãããã³ãã¬ãŒã¯ãã€ã³ããªã©ã®ãã¶ã€ã³ã®æ±ºå®ãã«ãã»ã«åããŸãã ãã¶ã€ã³ããŒã¯ã³ã䜿çšãããšããããã®å€ãäžå çã«ç®¡çããã³æŽæ°ã§ããããããã¹ãŠã®ã³ã³ããŒãã³ããšãã©ãããã©ãŒã ã§äžè²«æ§ã確ä¿ãããŸãã
ãã¶ã€ã³ããŒã¯ã³ã䜿çšããå©ç¹ïŒ
- äžå 管çïŒ ãã¶ã€ã³å€ã®åäžã®ä¿¡é Œã§ããæ å ±æºãæäŸããŸãã
- ããŒãèšå®æ©èœïŒ ããŸããŸãªããŒãéãç°¡åã«åãæ¿ããããšãã§ããŸãã
- ã¯ãã¹ãã©ãããã©ãŒã ã®äžè²«æ§ïŒ Webãã¢ãã€ã«ãããã³ãã®ä»ã®ãã©ãããã©ãŒã å šäœã§äžè²«ããã¹ã¿ã€ã«èšå®ãä¿èšŒããŸãã
- ä¿å®æ§ã®åäžïŒ ãã¶ã€ã³å€ã®æŽæ°ãšå€æŽãç°¡çŽ åããŸãã
ãã¶ã€ã³ããŒã¯ã³ã®äŸïŒJSONïŒïŒ
{
"color": {
"primary": "#007bff",
"secondary": "#6c757d",
"success": "#28a745",
"error": "#dc3545"
},
"font": {
"family": "Roboto, sans-serif",
"size": {
"base": "16px",
"h1": "32px",
"h2": "24px"
}
},
"spacing": {
"small": "8px",
"medium": "16px",
"large": "24px"
}
}
次ã«ããããã®ããŒã¯ã³ãCSSãŸãã¯JavaScriptã³ãŒãå ã§åç §ããŠãã³ã³ããŒãã³ãã«äžè²«ããŠã¹ã¿ã€ã«ãèšå®ã§ããŸãã Style Dictionaryã®ãããªããŒã«ã¯ãããŸããŸãªãã©ãããã©ãŒã ãšåœ¢åŒã®ãã¶ã€ã³ããŒã¯ã³ã®çæããã»ã¹ãèªååããã®ã«åœ¹ç«ã¡ãŸãã
5. ããŒãèšå®ãšã«ã¹ã¿ãã€ãº
å ç¢ãªã³ã³ããŒãã³ãã©ã€ãã©ãªã¯ãããŒãèšå®ããµããŒãããããŸããŸãªãã©ã³ããã³ã³ããã¹ãã«åãããŠãããŸããŸãªããžã¥ã¢ã«ã¹ã¿ã€ã«ãç°¡åã«åãæ¿ããããšãã§ããŸãã ããã¯ãCSS倿°ããã¶ã€ã³ããŒã¯ã³ããŸãã¯ããŒãèšå®ã©ã€ãã©ãªã䜿çšããŠå®çŸã§ããŸãã
以äžãæäŸããããšãæ€èšããŠãã ããã
- å®çŸ©æžã¿ã®ããŒãïŒ ãŠãŒã¶ãŒãéžæã§ããäžé£ã®äºåã«æ§ç¯ãããããŒããæäŸããŸãïŒäŸïŒã©ã€ããããŒã¯ããã€ã³ã³ãã©ã¹ãïŒã
- ã«ã¹ã¿ãã€ãºãªãã·ã§ã³ïŒ ãŠãŒã¶ãŒãããããã£ãŸãã¯CSSãªãŒããŒã©ã€ããéããŠåã ã®ã³ã³ããŒãã³ãã¹ã¿ã€ã«ãã«ã¹ã¿ãã€ãºã§ããããã«ããŸãã
- ã¢ã¯ã»ã·ããªãã£ã«çŠç¹ãåœãŠãããŒãïŒ èŠèŠéç¢è ã®ããã®ãã€ã³ã³ãã©ã¹ãããŒããªã©ãé害ã®ãããŠãŒã¶ãŒã®ããã«ç¹å¥ã«èšèšãããããŒããæäŸããŸãã
äŸïŒ ããŒãèšå®ã«CSS倿°ã䜿çšããïŒ
/* Default Theme */
:root {
--primary-color: #007bff;
--secondary-color: #6c757d;
--background-color: #fff;
--text-color: #333;
}
/* Dark Theme */
.dark-theme {
--primary-color: #00bfff;
--secondary-color: #99a3a4;
--background-color: #333;
--text-color: #fff;
}
.button {
background-color: var(--primary-color);
color: var(--text-color);
}
CSS倿°ãå®çŸ©ããããšã«ããã倿°ã®å€ã倿Žããããšã§ãããŒããç°¡åã«åãæ¿ããããšãã§ããŸãã ãã®ã¢ãããŒãã¯ãããŸããŸãªããžã¥ã¢ã«ã¹ã¿ã€ã«ã管çããããã®æè»ã§ä¿å®å¯èœãªæ¹æ³ãæäŸããŸãã
6. ã¢ã¯ã»ã·ããªãã£ïŒa11yïŒã«é¢ããèæ ®äºé
ã¢ã¯ã»ã·ããªãã£ã¯ããã¶ã€ã³ã·ã¹ãã ã®éèŠãªåŽé¢ã§ãããé害ã®ãã人ã ãã³ã³ããŒãã³ãã䜿çšã§ããããã«ããŸãã ãã¹ãŠã®ã³ã³ããŒãã³ãã¯ãã€ã³ã¯ã«ãŒã·ããªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããããã«ãWCAGïŒWeb Content Accessibility GuidelinesïŒã«æºæ ããå¿ èŠããããŸãã
äž»ãªã¢ã¯ã»ã·ããªãã£ã«é¢ããèæ ®äºé ïŒ
- ã»ãã³ãã£ãã¯HTMLïŒ ã»ãã³ãã£ãã¯HTMLèŠçŽ ã䜿çšããŠãã³ã³ãã³ãã«æ§é ãšæå³ãæäŸããŸãïŒäŸïŒ`<article>`ã`<nav>`ã`<aside>`ïŒã
- ARIA屿§ïŒ ARIAïŒAccessible Rich Internet ApplicationsïŒå±æ§ã䜿çšããŠãæ¯æŽæè¡ã«è¿œå æ å ±ãæäŸããŸãã
- ããŒããŒãããã²ãŒã·ã§ã³ïŒ ãã¹ãŠã®ã³ã³ããŒãã³ããããŒããŒãã䜿çšããŠå®å šã«ããã²ãŒãã§ããããšã確èªããŸãã
- è²ã®ã³ã³ãã©ã¹ãïŒ ããã¹ããšèæ¯è²ã®éã«ååãªè²ã®ã³ã³ãã©ã¹ããç¶æããŸãã
- ã¹ã¯ãªãŒã³ãªãŒããŒã®äºææ§ïŒ ã¹ã¯ãªãŒã³ãªãŒããŒã§ã³ã³ããŒãã³ãããã¹ãããŠãé©åã«è§£éãããŠããããšã確èªããŸãã
- ãã©ãŒã«ã¹ç®¡çïŒ é©åãªãã©ãŒã«ã¹ç®¡çãå®è£ ããŠããŠãŒã¶ãŒãã€ã³ã¿ãŒãã§ãŒã¹ã«èªå°ããŸãã
äŸïŒ ã¢ã¯ã»ã·ãã«ãã¿ã³ã³ã³ããŒãã³ãïŒ
<button aria-label="Close" onClick={handleClose}>
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="times" class="svg-inline--fa fa-times fa-w-10" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512">
<path fill="currentColor" d="M201.7 105.3L314.7 218.3c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 141.9l-98.3 98.3c-9.4 9.4-24.6 9.4-33.9 0L5.3 218.3c-9.4 9.4-9.4 24.6 0 33.9l113 113c9.4 9.4 24.6 9.4 33.9 0L314.7 105.3c9.4-9.4 9.4-24.6 0-33.9L292.1 48.8c-9.4-9.4-24.6-9.4-33.9 0L160 71.9 5.3 48.8c-9.4-9.4-24.6-9.4-33.9 0L5.3 71.9 118.3 332.7c9.4 9.4 24.6 9.4 33.9 0L314.7 71.9c9.4-9.4 9.4-24.6 0-33.9l-22.6-22.6c-9.4-9.4-24.6-9.4-33.9 0L160 105.3z"></path>
</svg>
</button>
ãã®äŸã§ã¯ã`aria-label`ã䜿çšããŠã¹ã¯ãªãŒã³ãªãŒããŒã«ããã¹ãã®ä»£æ¿ææ®µãæäŸãã`aria-hidden`ã䜿çšããŠæ¯æŽæè¡ããSVGãé衚瀺ã«ããŸãïŒ`aria-label`ãé¢é£æ å ±ãæäŸããããïŒã ãŸãã`focusable="false"`ã䜿çšãããšãSVGããã©ãŒã«ã¹ãåãåãããšããªããªããŸãã ã³ã³ããŒãã³ããé©åã«ã¢ã¯ã»ã¹å¯èœã§ããããšã確èªããããã«ãåžžã«æ¯æŽæè¡ã§ã³ã³ããŒãã³ãããã¹ãããŠãã ããã
7. åœéåïŒi18nïŒãšããŒã«ã©ã€ãºïŒl10nïŒ
ã°ããŒãã«ãªã¹ã±ãŒã©ããªãã£ãå®çŸããã«ã¯ãã³ã³ããŒãã³ãã©ã€ãã©ãªãåœéåïŒi18nïŒãšããŒã«ã©ã€ãºïŒl10nïŒããµããŒãããŠããå¿ èŠããããŸãã åœéåã¯ãã³ãŒãã倿ŽããããšãªããããŸããŸãªèšèªãå°åã«é©å¿ã§ããããã«ã³ã³ããŒãã³ããèšèšããã³éçºããããã»ã¹ã§ãã ããŒã«ã©ã€ãºã¯ãã³ã³ããŒãã³ããç¹å®ã®èšèªãšå°åã«é©å¿ãããããã»ã¹ã§ãã
äž»ãªi18n/l10nã®èæ ®äºé ïŒ
- ããã¹ãæœåºïŒ ãã¹ãŠã®ããã¹ãæååãã³ã³ããŒãã³ãããåå¥ã®èšèªãã¡ã€ã«ã«å€éšåããŸãã
- ãã±ãŒã«ç®¡çïŒ ããŸããŸãªãã±ãŒã«ã管çããããã®ã¡ã«ããºã ãå®è£ ããŸãïŒäŸïŒ`i18next`ãªã©ã®ããŒã«ã©ã€ãºã©ã€ãã©ãªã䜿çšïŒã
- æ¥ä»ãšæ°å€ã®ãã©ãŒãããïŒ ãã±ãŒã«åºæã®æ¥ä»ãšæ°å€ã®ãã©ãŒãããã䜿çšããŸãã
- å³ããå·ŠïŒRTLïŒã®ãµããŒãïŒ ã¢ã©ãã¢èªãããã©ã€èªãªã©ã®RTLèšèªãã³ã³ããŒãã³ãããµããŒãããŠããããšã確èªããŸãã
- é貚ã®ãã©ãŒãããïŒ ãŠãŒã¶ãŒã®ãã±ãŒã«ã«é©ãã圢åŒã§é貚å€ã衚瀺ããŸãã
- ç»åãšã¢ã€ã³ã³ã®ããŒã«ã©ã€ãºïŒ å¿ èŠã«å¿ããŠããã±ãŒã«åºæã®ç»åãšã¢ã€ã³ã³ã䜿çšããŸãã
äŸïŒ ããŒã«ã©ã€ãºã«`i18next`ã䜿çšããïŒ
// i18n.js
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import en from './locales/en.json';
import fr from './locales/fr.json';
i18n
.use(initReactI18next)
.init({
resources: {
en: { translation: en },
fr: { translation: fr }
},
lng: 'en',
fallbackLng: 'en',
interpolation: {
escapeValue: false // react already safes from xss
}
});
export default i18n;
// Button.js
import { useTranslation } from 'react-i18next';
function Button() {
const { t } = useTranslation();
return (
<button>{t('button.label')}</button>
);
}
export default Button;
// locales/en.json
{
"button.label": "Click me"
}
// locales/fr.json
{
"button.label": "Cliquez ici"
}
ãã®äŸã§ã¯ã`i18next`ã䜿çšããŠãåå¥ã®JSONãã¡ã€ã«ãã翻蚳ãããŒããã`useTranslation`ããã¯ã䜿çšããŠã`Button`ã³ã³ããŒãã³ãå ã®ç¿»èš³ãããããã¹ãã«ã¢ã¯ã»ã¹ããŸãã ããã¹ãæååãå€éšåããããŒã«ã©ã€ãºã©ã€ãã©ãªã䜿çšããããšã«ãããããŸããŸãªèšèªã«ç°¡åã«ã³ã³ããŒãã³ããé©å¿ãããããšãã§ããŸãã
8. ã³ã³ããŒãã³ãããã¥ã¡ã³ã
ã³ã³ããŒãã³ãã©ã€ãã©ãªã®æ¡çšãšã¡ã³ããã³ã¹ã«ã¯ãå æ¬çã§ã¢ã¯ã»ã¹ããããããã¥ã¡ã³ããäžå¯æ¬ ã§ãã ããã¥ã¡ã³ãã«ã¯ä»¥äžãå«ãŸããŠããå¿ èŠããããŸãã
- 䜿çšäŸïŒ åã³ã³ããŒãã³ãã«ã€ããŠãæç¢ºã§ç°¡æœãªäœ¿çšäŸãæäŸããŸãã
- ããããã£ã®èª¬æïŒ ãã¹ãŠã®ã³ã³ããŒãã³ãããããã£ãããã®åãããã©ã«ãå€ãããã³èª¬æãå«ããŠææžåããŸãã
- ã¢ã¯ã»ã·ããªãã£ã«é¢ããèæ ®äºé ïŒ åã³ã³ããŒãã³ãã®ã¢ã¯ã»ã·ããªãã£ã«é¢ããèæ ®äºé ã匷調衚瀺ããŸãã
- ããŒãèšå®æ å ±ïŒ åã³ã³ããŒãã³ãã®ããŒãèšå®ãšã«ã¹ã¿ãã€ãºã®æ¹æ³ã説æããŸãã
- ã³ãŒãã¹ããããïŒ ãŠãŒã¶ãŒããããžã§ã¯ãã«ã³ããŒããŠè²Œãä»ããããšãã§ããã³ãŒãã¹ãããããå«ããŸãã
- ã€ã³ã¿ã©ã¯ãã£ããã¢ïŒ ãŠãŒã¶ãŒãããŸããŸãªã³ã³ããŒãã³ãæ§æã詊ãããšãã§ããã€ã³ã¿ã©ã¯ãã£ããã¢ãæäŸããŸãã
StorybookãDoczãªã©ã®ããŒã«ã¯ãã³ãŒãããèªåçã«çæãããã€ã³ã¿ã©ã¯ãã£ããªã³ã³ããŒãã³ãããã¥ã¡ã³ãã®äœæã«åœ¹ç«ã¡ãŸãã ãããã®ããŒã«ã䜿çšãããšãã³ã³ããŒãã³ããåé¢ããŠè¡šç€ºããéçºè ãããããæ¢çŽ¢ããŠäœ¿ç𿹿³ãçè§£ããããã®ãã©ãããã©ãŒã ãæäŸã§ããŸãã
9. ããŒãžã§ã³ç®¡çãšãªãªãŒã¹ç®¡ç
å®å®ããä¿¡é Œæ§ã®é«ãã³ã³ããŒãã³ãã©ã€ãã©ãªãç¶æããã«ã¯ãé©åãªããŒãžã§ã³ç®¡çãšãªãªãŒã¹ç®¡çãäžå¯æ¬ ã§ãã Semantic VersioningïŒSemVerïŒã䜿çšããŠã倿Žã远跡ãããŠãŒã¶ãŒã«æŽæ°ãäŒããŸãã æ¬¡ã®ãã®ãå«ãæç¢ºãªãªãªãŒã¹ããã»ã¹ã«åŸããŸãã
- ãã¹ãïŒ æ°ããããŒãžã§ã³ããªãªãŒã¹ããåã«ããã¹ãŠã®å€æŽã培åºçã«ãã¹ãããŸãã
- ããã¥ã¡ã³ãã®æŽæ°ïŒ æ°ããããŒãžã§ã³ã®å€æŽãåæ ããããã«ããã¥ã¡ã³ããæŽæ°ããŸãã
- ãªãªãŒã¹ããŒãïŒ æ°ããããŒãžã§ã³ã®å€æŽã«ã€ããŠèª¬æããæç¢ºã§ç°¡æœãªãªãªãŒã¹ããŒããæäŸããŸãã
- éæšå¥šã®éç¥ïŒ éæšå¥šã®ã³ã³ããŒãã³ããŸãã¯æ©èœãæç¢ºã«äŒããŸãã
npmãYarnãªã©ã®ããŒã«ã¯ãããã±ãŒãžã®äŸåé¢ä¿ã管çããã³ã³ããŒãã³ãã©ã€ãã©ãªã®æ°ããããŒãžã§ã³ããããªãã¯ãŸãã¯ãã©ã€ããŒãã¬ãžã¹ããªã«å ¬éããã®ã«åœ¹ç«ã¡ãŸãã
10. ã¬ããã³ã¹ãšã¡ã³ããã³ã¹
æåããã³ã³ããŒãã³ãã©ã€ãã©ãªã«ã¯ãç¶ç¶çãªã¬ããã³ã¹ãšã¡ã³ããã³ã¹ãå¿ èŠã§ãã ã©ã€ãã©ãªãç¶æããããã®åœ¹å²ãšè²¬ä»»ãå®çŸ©ããæç¢ºãªã¬ããã³ã¹ã¢ãã«ã確ç«ããŸãã ããã«ã¯ä»¥äžãå«ãŸããŸãã
- ã³ã³ããŒãã³ãã®æææš©ïŒ åã ã®ã³ã³ããŒãã³ãã®æææš©ãç¹å®ã®ããŒã ãŸãã¯å人ã«å²ãåœãŠãŸãã
- è²¢ç®ã¬ã€ãã©ã€ã³ïŒ æ°ããã³ã³ããŒãã³ãã®è¿œå ãŸãã¯æ¢åã®ã³ã³ããŒãã³ãã®å€æŽã«é¢ããæç¢ºãªè²¢ç®ã¬ã€ãã©ã€ã³ãå®çŸ©ããŸãã
- ã³ãŒãã¬ãã¥ãŒããã»ã¹ïŒ ã³ãŒãå質ãšäžè²«æ§ã確ä¿ããããã«ãã³ãŒãã¬ãã¥ãŒããã»ã¹ãå®è£ ããŸãã
- 宿çãªç£æ»ïŒ ã³ã³ããŒãã³ãã©ã€ãã©ãªã®å®æçãªç£æ»ã宿œããŠãåé¡ãç¹å®ããŠå¯ŸåŠããŸãã
- ã³ãã¥ããã£ãšã³ã²ãŒãžã¡ã³ãïŒ ã³ã³ããŒãã³ãã©ã€ãã©ãªãäžå¿ã«ã³ãã¥ããã£ãè²æããŠãã³ã©ãã¬ãŒã·ã§ã³ãšãã£ãŒãããã¯ãä¿é²ããŸãã
ã³ã³ããŒãã³ãã©ã€ãã©ãªãä¿å®ããææ°ã®ç¶æ ã«ä¿ã¡ãã¢ã¯ã»ã¹å¯èœã«ããçµç¹ã®å šäœçãªèšèšããã³ãã¯ãããžãŒæŠç¥ã«æ²¿ã£ãŠç¶æããããã«ãå°çšã®ããŒã ãŸãã¯å人ã責任ãè² ãå¿ èŠããããŸãã
çµè«
é©åã«èšèšãããã³ã³ããŒãã³ãã©ã€ãã©ãªãåããããã³ããšã³ããã¶ã€ã³ã·ã¹ãã ã®æ§ç¯ã¯ãäžè²«æ§ãå¹çæ§ãã¹ã±ãŒã©ããªãã£ã®ç¹ã§å€§ããªã¡ãªãããããããå¯èœæ§ã®ããéèŠãªæè³ã§ãããã®èšäºã§æŠèª¬ãããŠããã¢ãŒããã¯ãã£ã®ååãæ³šææ·±ãæ€èšããããšã«ããã倿§ãªã°ããŒãã«ãªãŒãã£ãšã³ã¹ã«å¯Ÿå¿ããå ç¢ã§ä¿å®å¯èœãªã³ã³ããŒãã³ãã©ã€ãã©ãªãäœæã§ããŸãã ãã¹ãŠã®äººã䜿çšã§ãããã¹ãŠã®ãã©ãããã©ãŒã ãšããã€ã¹ã§ããžãã£ããªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«è²¢ç®ããããã«ãã¢ã¯ã»ã·ããªãã£ãåœéåãããã³å æ¬çãªããã¥ã¡ã³ããåªå ããããšãå¿ããªãã§ãã ããã é²åãããã¹ããã©ã¯ãã£ã¹ãšãŠãŒã¶ãŒã®ããŒãºã«æ²¿ã£ãŠããã¶ã€ã³ã·ã¹ãã ã宿çã«ã¬ãã¥ãŒããæŽæ°ããŠãã ããã
ãã¶ã€ã³ã·ã¹ãã ã®æ§ç¯ã¯å埩çãªããã»ã¹ã§ãããç¶ç¶çãªæ¹åãéèŠã§ãã ãã£ãŒãããã¯ãåãå ¥ããå€åããèŠä»¶ã«é©å¿ããçµç¹ãã°ããŒãã«ãªèŠæš¡ã§åªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸã§ããããã«ãããã¶ã€ã³ã·ã¹ãã ã®äœæã«åªããŠãã ããã