èªåè©äŸ¡ã«ããJavaScriptã³ãŒãå質ã®åäžãå ç¢ã§ä¿å®æ§ã®é«ãã¢ããªã±ãŒã·ã§ã³æ§ç¯ã®ããã®ãã¬ãŒã ã¯ãŒã¯ãããŒã«ããã¹ããã©ã¯ãã£ã¹ãå æ¬çã«è§£èª¬ã
JavaScriptã³ãŒãå質ãã¬ãŒã ã¯ãŒã¯ïŒèªåè©äŸ¡ã·ã¹ãã
仿¥ã®ããŒã¹ã®éããœãããŠã§ã¢éçºç°å¢ã«ãããŠãã³ãŒãå質ã®ç¢ºä¿ã¯æåªå äºé ã§ããå ç¢ãªJavaScriptã³ãŒãå質ãã¬ãŒã ã¯ãŒã¯ãšèªåè©äŸ¡ã·ã¹ãã ãçµã¿åãããããšã¯ãä¿å®æ§ãæ¡åŒµæ§ãä¿¡é Œæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ãããã®ã¬ã€ãã§ã¯ããã®ãããªãã¬ãŒã ã¯ãŒã¯ã®ã³ã³ããŒãã³ããã¡ãªãããå®è£ ã«ã€ããŠãäžçäžã®éçºè ã察象ã«è§£èª¬ããŸãã
ã³ãŒãå質ãéèŠãªçç±
é«å質ãªã³ãŒãã¯ããã°ãåæžããä¿å®æ§ãåäžãããéçºè éã®ã³ã©ãã¬ãŒã·ã§ã³ã匷åããŸããäžæ¹ãäœå質ãªã³ãŒãã¯ä»¥äžã®ãããªçµæãæããŸãã
- éçºã³ã¹ãã®å¢å
- ã»ãã¥ãªãã£è匱æ§ã®ãªã¹ã¯å¢å
- ããŒã ã®çç£æ§ã®äœäž
- ãããã°ãšãªãã¡ã¯ã¿ãªã³ã°ã®å°é£ã
- ãšã³ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãžã®æªåœ±é¿
ã³ãŒãå質ãã¬ãŒã ã¯ãŒã¯ãæ¡çšããããšã§ãéçºã©ã€ããµã€ã¯ã«ã®æ©æã«ã³ãŒãã®æ¬ é¥ãç¹å®ãã鲿¢ããããã®äœç³»çãªã¢ãããŒããæäŸããããããã®èª²é¡ã«å¯ŸåŠã§ããŸããããã¯ãã³ãã¥ãã±ãŒã·ã§ã³ãšäžè²«æ§ãéµãšãªãã°ããŒãã«éçºããŒã ã«ãšã£ãŠç¹ã«éèŠã§ãã
JavaScriptã³ãŒãå質ãã¬ãŒã ã¯ãŒã¯ã®ã³ã³ããŒãã³ã
å æ¬çãªJavaScriptã³ãŒãå質ãã¬ãŒã ã¯ãŒã¯ã¯ãããã€ãã®äž»èŠãªã³ã³ããŒãã³ãã§æ§æãããŸãã1. ã³ãŒãã¹ã¿ã€ã«ã¬ã€ããšèŠçŽ
æç¢ºã§äžè²«æ§ã®ããã³ãŒãã£ã³ã°ã¹ã¿ã€ã«ã¬ã€ãã®ç¢ºç«ã¯ãã³ãŒãå質ãã¬ãŒã ã¯ãŒã¯ã®åºç€ãšãªããŸãããããã®ã¬ã€ãã¯ããã©ãŒããããåœåèŠåãã³ãŒãæ§é ã®ã«ãŒã«ãå®çŸ©ããŸããäžè¬çãªã¹ã¿ã€ã«ã¬ã€ãã«ã¯ä»¥äžã®ãããªãã®ããããŸãã
- Airbnb JavaScript Style Guide: åºãæ¡çšãããŠããå æ¬çãªã¹ã¿ã€ã«ã¬ã€ãã§ãã
- Google JavaScript Style Guide: å¯èªæ§ãšä¿å®æ§ã«éç¹ã眮ãããããäžã€ã®é«ãè©äŸ¡ãããŠããã¹ã¿ã€ã«ã¬ã€ãã§ãã
- StandardJS: ã³ãŒãã®èªåãã©ãŒããããåããã¹ã¿ã€ã«ã®è°è«ãæé€ããã¹ã¿ã€ã«ã¬ã€ãã§ãã
äžè²«ããã¹ã¿ã€ã«ã¬ã€ãã«åŸãããšã§ãã³ãŒãã®å¯èªæ§ãåäžããéçºè ã®èªç¥çè² è·ã軜æžãããŸããããã¯ãã³ãŒãã£ã³ã°ã®èæ¯ãç°ãªãã°ããŒãã«ã«åæ£ããããŒã ã«ãšã£ãŠç¹ã«æçã§ãã
2. ãªã³ãã£ã³ã°
ãªã³ã¿ãŒã¯ãã¹ã¿ã€ã«éåãæœåšçãªãšã©ãŒãã¢ã³ããã¿ãŒã³ãã³ãŒãã§èªåçã«ãã§ãã¯ããéçè§£æããŒã«ã§ãããããã¯å®çŸ©ãããã¹ã¿ã€ã«ã¬ã€ãã匷å¶ããéçºããã»ã¹ã®æ©ã段éã§åé¡ãæ€åºããã®ã«åœ¹ç«ã¡ãŸããäžè¬çãªJavaScriptãªã³ã¿ãŒã«ã¯ä»¥äžã®ãããªãã®ããããŸãã
- ESLint: ã«ã¹ã¿ã ã«ãŒã«ãšãã©ã°ã€ã³ããµããŒããããé«åºŠã«èšå®å¯èœã§æ¡åŒµå¯èœãªãªã³ã¿ãŒã§ããESLintã¯çŸä»£ã®JavaScriptãããžã§ã¯ãã§äžè¬çã«äœ¿çšãããŠãããECMAScriptæšæºããµããŒãããŠããŸãã
- JSHint: æœåšçãªãšã©ãŒãšã¢ã³ããã¿ãŒã³ãæ€åºããããšã«éç¹ã眮ãããããäŒçµ±çãªãªã³ã¿ãŒã§ãã
- JSCS: (çŸåšã¯éæšå¥šãšãªãESLintã«çµ±åãããŠããŸã) ãã€ãŠäººæ°ããã£ãã³ãŒãã¹ã¿ã€ã«ãã§ãã«ãŒã§ãã
äŸ: ESLintã®èšå®
ESLintã®èšå®ãã¡ã€ã«ïŒ.eslintrc.jsãŸãã¯.eslintrc.jsonïŒã¯ããããžã§ã¯ãã®ãªã³ãã£ã³ã°ã«ãŒã«ãå®çŸ©ããŸãã以äžã¯åºæ¬çãªäŸã§ãã
module.exports = {
"env": {
"browser": true,
"es2021": true,
"node": true
},
"extends": [
"eslint:recommended",
"plugin:react/recommended"
],
"parserOptions": {
"ecmaFeatures": {
"jsx": true
},
"ecmaVersion": 12,
"sourceType": "module"
},
"plugins": [
"react"
],
"rules": {
"semi": ["error", "always"],
"quotes": ["error", "double"]
}
};
ãã®èšå®ã¯ãæšå¥šãããESLintã«ãŒã«ãæ¡åŒµããReactãµããŒããæå¹ã«ããã»ãã³ãã³ãšäºéåŒçšç¬Šã®äœ¿çšã匷å¶ããŸãã
3. éçè§£æ
éçè§£æããŒã«ã¯ãã³ãŒãã®æ§é ãããŒã¿ãããŒãäŸåé¢ä¿ãåæããŠãæœåšçãªã»ãã¥ãªãã£è匱æ§ãããã©ãŒãã³ã¹ã®ããã«ããã¯ãã³ãŒãã®è€éæ§ã®åé¡ãç¹å®ããããšã§ããªã³ãã£ã³ã°ãè¶ ããåæãè¡ããŸããäŸãšããŠã¯ä»¥äžã®ãããªãã®ããããŸãã
- SonarQube: JavaScriptãå«ãè€æ°ã®ããã°ã©ãã³ã°èšèªããµããŒããããå æ¬çãªéçè§£æãã©ãããã©ãŒã ã§ããã³ãŒãå質ãã»ãã¥ãªãã£è匱æ§ãã³ãŒãã«ãã¬ããžã«é¢ãã詳现ãªã¬ããŒããæäŸããŸãã
- ESLint with Plugins: ESLintã¯ãæªäœ¿çšã®å€æ°ãæœåšçãªã»ãã¥ãªãã£ã®è匱æ§ãæ€åºãããªã©ãããé«åºŠãªéçè§£ææ©èœãæäŸãããã©ã°ã€ã³ã§æ¡åŒµã§ããŸãã
eslint-plugin-securityã®ãããªãã©ã°ã€ã³ã¯äŸ¡å€ããããŸãã - JSHint: äž»ã«ãªã³ã¿ãŒã§ãããéçè§£ææ©èœãæäŸããŸãã
éçè§£æã¯ãæåã®ã³ãŒãã¬ãã¥ãŒäžã«æããã«ãªããªãå¯èœæ§ã®ããé ããåé¡ãç¹å®ããã®ã«åœ¹ç«ã¡ãŸãã
4. ã³ãŒãã¬ãã¥ãŒ
ã³ãŒãã¬ãã¥ãŒã¯ãéçºè ãäºãã®ã³ãŒããæ€æ»ããŠæœåšçãªãšã©ãŒãç¹å®ããæ¹åãææ¡ããã³ãŒãã£ã³ã°æšæºãžã®æºæ ã確èªããéèŠãªããã»ã¹ã§ãã广çãªã³ãŒãã¬ãã¥ãŒã«ã¯ãæç¢ºãªã¬ã€ãã©ã€ã³ã建èšçãªãã£ãŒãããã¯ãååçãªç°å¢ãå¿ èŠã§ãã
ã³ãŒãã¬ãã¥ãŒã®ãã¹ããã©ã¯ãã£ã¹:
- æç¢ºãªã¬ã€ãã©ã€ã³ã確ç«ãã: ã³ãŒãã¬ãã¥ãŒã®ç¯å²ãæ¿èªã®åºæºãã¬ãã¥ãŒæ åœè ã®åœ¹å²ãšè²¬ä»»ãå®çŸ©ããŸãã
- 建èšçãªãã£ãŒãããã¯ãæäŸãã: ã³ãŒãã®æ¹åã«åœ¹ç«ã€ãå ·äœçã§å®è¡å¯èœãªãã£ãŒãããã¯ãæäŸããããšã«çŠç¹ãåœãŠãŸããå人çãªæ»æã䞻芳çãªæèŠã¯é¿ããŸãã
- ã³ãŒãã¬ãã¥ãŒããŒã«ã䜿çšãã: GitHubã®ãã«ãªã¯ãšã¹ããGitLabã®ããŒãžãªã¯ãšã¹ããBitbucketã®ãã«ãªã¯ãšã¹ããªã©ã®ããŒã«ã䜿çšããŠãã³ãŒãã¬ãã¥ãŒããã»ã¹ãåçåããŸãã
- ã³ã©ãã¬ãŒã·ã§ã³ã奚å±ãã: éçºè ã質åããããã£ãŒãããã¯ãæäŸãããããããšããããããªããååãšãªãŒãã³ãªã³ãã¥ãã±ãŒã·ã§ã³ã®æåãè²ã¿ãŸãã
ã°ããŒãã«ããŒã ã§ã¯ãã¿ã€ã ãŸãŒã³ã®éãã«ããã³ãŒãã¬ãã¥ãŒãå°é£ã«ãªãå ŽåããããŸããéåæã³ãŒãã¬ãã¥ãŒã®å®è·µãšååã«ææžåãããã³ãŒããäžå¯æ¬ ã§ãã
5. ãã¹ã
ãã¹ãã¯ã³ãŒãå質ã®åºæ¬çãªåŽé¢ã§ããå æ¬çãªãã¹ãæŠç¥ã«ã¯ä»¥äžãå«ãŸããŸãã
- åäœãã¹ã: åã ã®ã³ã³ããŒãã³ããŸãã¯é¢æ°ãåé¢ããŠãã¹ãããŸãã
- çµ±åãã¹ã: ç°ãªãã³ã³ããŒãã³ããŸãã¯ã¢ãžã¥ãŒã«éã®çžäºäœçšããã¹ãããŸãã
- ãšã³ãããŒãšã³ãïŒE2EïŒãã¹ã: ãŠãŒã¶ãŒã®èŠç¹ããã¢ããªã±ãŒã·ã§ã³å šäœã®ãããŒããã¹ãããŸãã
äžè¬çãªJavaScriptãã¹ããã¬ãŒã ã¯ãŒã¯ã«ã¯ä»¥äžã®ãããªãã®ããããŸãã
- Jest: ã»ããã¢ãããšäœ¿çšãç°¡åãªããŒãèšå®ã®ãã¹ããã¬ãŒã ã¯ãŒã¯ã§ããFacebookã«ãã£ãŠéçºãããJestã¯ãReactã¢ããªã±ãŒã·ã§ã³ã«é©ããŠããŸãããã©ã®JavaScriptãããžã§ã¯ãã§ã䜿çšã§ããŸãã
- Mocha: ã¢ãµãŒã·ã§ã³ã©ã€ãã©ãªãšã¢ããã³ã°ãã¬ãŒã ã¯ãŒã¯ã®éžæãéçºè ã«èš±å¯ãããæè»ã§æ¡åŒµå¯èœãªãã¹ããã¬ãŒã ã¯ãŒã¯ã§ãã
- Cypress: ãã¹ãã®äœæãšå®è¡ã®ããã®èŠèŠçãªã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããããšã³ãããŒãšã³ããã¹ããã¬ãŒã ã¯ãŒã¯ã§ããCypressã¯ãè€éãªãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ãéåæåäœã®ãã¹ãã«ç¹ã«åœ¹ç«ã¡ãŸãã
- Playwright: è€æ°ã®ãã©ãŠã¶ããµããŒããããã©ãŠã¶ã€ã³ã¿ã©ã¯ã·ã§ã³ã®èªååã®ããã®è±å¯ãªæ©èœãæäŸãããææ°ã®ãã¹ããã¬ãŒã ã¯ãŒã¯ã§ãã
äŸ: Jeståäœãã¹ã
// sum.js
function sum(a, b) {
return a + b;
}
module.exports = sum;
// sum.test.js
const sum = require('./sum');
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
ãã®äŸã¯ãsum颿°ã®æ©èœãæ€èšŒããããã«Jestã䜿çšããç°¡åãªåäœãã¹ãã瀺ããŠããŸãã
6. ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³/ç¶ç¶çãããã€ïŒCI/CDïŒ
CI/CDãã€ãã©ã€ã³ã¯ãã³ãŒã倿Žã®ãã«ãããã¹ãããããã€ã®ããã»ã¹ãèªååããŸããCI/CDãã€ãã©ã€ã³ã«ã³ãŒãå質ãã§ãã¯ãçµ±åããããšã§ãéçºè ã¯æ¬çªç°å¢ã«ãããã€ãããã®ãé«å質ãªã³ãŒãã®ã¿ã§ããããšãä¿èšŒã§ããŸãã
äžè¬çãªCI/CDããŒã«ã«ã¯ä»¥äžã®ãããªãã®ããããŸãã
- Jenkins: å¹ åºããã©ã°ã€ã³ãšçµ±åããµããŒããããªãŒãã³ãœãŒã¹ã®èªååãµãŒããŒã§ãã
- GitHub Actions: GitHubãªããžããªã«çŽæ¥çµ±åãããCI/CDãã©ãããã©ãŒã ã§ãã
- GitLab CI/CD: GitLabãªããžããªã«çµ±åãããCI/CDãã©ãããã©ãŒã ã§ãã
- CircleCI: ã»ããã¢ãããšäœ¿çšãç°¡åãªã¯ã©ãŠãããŒã¹ã®CI/CDãã©ãããã©ãŒã ã§ãã
CI/CDãã€ãã©ã€ã³ã§ã³ãŒãå質ãã§ãã¯ãèªååããããšã§ãã³ãŒããæ¬çªç°å¢ã«ãããã€ãããåã«ãå®çŸ©æžã¿ã®åè³ªåºæºãæºãããŠããããšã確èªã§ããŸãã
èªåè©äŸ¡ã·ã¹ãã ã®å°å ¥
èªåè©äŸ¡ã·ã¹ãã ã¯ãã³ãŒãå質ãã¬ãŒã ã¯ãŒã¯ã®ã³ã³ããŒãã³ããçµ±åããŠãã³ãŒãå質ãèªåçã«è©äŸ¡ããŸãããã®ãããªã·ã¹ãã ãå®è£ ããããã®ã¹ããããã€ã¹ãããã¬ã€ãã以äžã«ç€ºããŸãã
- ã³ãŒãã¹ã¿ã€ã«ã¬ã€ããéžæãã: ãããžã§ã¯ãã®èŠä»¶ãšããŒã ã®å¥œã¿ã«åã£ãã¹ã¿ã€ã«ã¬ã€ããéžæããŸãã
- ãªã³ã¿ãŒãèšå®ãã: ãªã³ã¿ãŒïŒäŸïŒESLintïŒãèšå®ããŠãéžæããã¹ã¿ã€ã«ã¬ã€ãã匷å¶ããŸãããªã³ã¿ãŒã®ã«ãŒã«ããããžã§ã¯ãåºæã®ããŒãºã«åãããŠã«ã¹ã¿ãã€ãºããŸãã
- éçè§£æãçµ±åãã: éçè§£æããŒã«ïŒäŸïŒSonarQubeïŒãçµ±åããŠãæœåšçãªã»ãã¥ãªãã£è匱æ§ãã³ãŒãã®è€éæ§ã®åé¡ãªã©ãç¹å®ããŸãã
- ã³ãŒãã¬ãã¥ãŒã¯ãŒã¯ãããŒãå®è£ ãã: æç¢ºãªã¬ã€ãã©ã€ã³ãå«ã¿ãã³ãŒãã¬ãã¥ãŒããŒã«ãå©çšããã³ãŒãã¬ãã¥ãŒã¯ãŒã¯ãããŒã確ç«ããŸãã
- åäœãã¹ããçµ±åãã¹ããE2Eãã¹ããèšè¿°ãã: ã³ãŒãã®æ©èœæ§ãšä¿¡é Œæ§ãä¿èšŒããããã«ãå æ¬çãªãã¹ãã¹ã€ãŒããéçºããŸãã
- CI/CDãã€ãã©ã€ã³ãèšå®ãã: ã³ãŒãããªããžããªã«ã³ãããããããã³ã«ããªã³ã¿ãŒãéçè§£æããŒã«ããã¹ããèªåçã«å®è¡ãããããã«CI/CDãã€ãã©ã€ã³ãèšå®ããŸãã
- ã³ãŒãå質ãç£èŠãã: ã³ãŒãå質ã¡ããªã¯ã¹ã宿çã«ç£èŠããæéã®çµéãšãšãã«é²æã远跡ããŸããæ¹åãå¿ èŠãªé åãç¹å®ããããã«ããã·ã¥ããŒããšã¬ããŒãã䜿çšããŸãã
äŸ: GitHub Actionsã䜿çšããCI/CDãã€ãã©ã€ã³
name: CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Use Node.js 16
uses: actions/setup-node@v2
with:
node-version: '16.x'
- name: Install dependencies
run: npm install
- name: Run ESLint
run: npm run lint
- name: Run tests
run: npm run test
ãã®GitHub Actionsã¯ãŒã¯ãããŒã¯ãmainãã©ã³ããžã®ã³ãŒãããã·ã¥ãŸãã¯mainãã©ã³ããžã®ãã«ãªã¯ãšã¹ãã®äœææã«ãESLintãšãã¹ããèªåçã«å®è¡ããŸãã
èªåè©äŸ¡ã®ã¡ãªãã
èªåè©äŸ¡ã¯ããã€ãã®ã¡ãªãããæäŸããŸãã
- æ©æã®æ¬ 饿€åº: éçºããã»ã¹ã®æ©ã段éã§ã³ãŒãã®æ¬ é¥ãç¹å®ããåŸã§ä¿®æ£ããã³ã¹ããåæžããŸãã
- ã³ãŒãå質ã®åäž: ã³ãŒãã£ã³ã°æšæºãšãã¹ããã©ã¯ãã£ã¹ã匷å¶ããããé«å質ãªã³ãŒãããããããŸãã
- çç£æ§ã®åäž: å埩çãªã¿ã¹ã¯ãèªååããéçºè ãããè€éãªåé¡ã«éäžã§ããããã«ããŸãã
- ãªã¹ã¯ã®äœæž: ã»ãã¥ãªãã£è匱æ§ãããã©ãŒãã³ã¹ã®ããã«ããã¯ã軜æžããã¢ããªã±ãŒã·ã§ã³é害ã®ãªã¹ã¯ãäœæžããŸãã
- ã³ã©ãã¬ãŒã·ã§ã³ã®åŒ·å: ã³ãŒãã¬ãã¥ãŒã®ããã®ãäžè²«æ§ã®ãã客芳çãªåºç€ãæäŸããéçºè éã®ã³ã©ãã¬ãŒã·ã§ã³ãä¿é²ããŸãã
JavaScriptã³ãŒãå質ããµããŒãããããŒã«
- ESLint: é«åºŠã«èšå®å¯èœã§æ¡åŒµå¯èœãªãªã³ãã£ã³ã°ããŒã«ã§ãã
- Prettier: äžè²«ããã¹ã¿ã€ãªã³ã°ã®ããã®æèŠã®ããã³ãŒããã©ãŒããã¿ãŒã§ããESLintãšçµ±åãããããšãå€ãã§ãã
- SonarQube: ãã°ãè匱æ§ãã³ãŒãã¹ã¡ã«ãæ€åºããããã®éçè§£æãã©ãããã©ãŒã ã§ãã
- Jest: åäœãã¹ããçµ±åãã¹ãããšã³ãããŒãšã³ããã¹ãã®ããã®ãã¹ããã¬ãŒã ã¯ãŒã¯ã§ãã
- Cypress: ãã©ãŠã¶èªååã®ããã®ãšã³ãããŒãšã³ããã¹ããã¬ãŒã ã¯ãŒã¯ã§ãã
- Mocha: ChaiïŒã¢ãµãŒã·ã§ã³ã©ã€ãã©ãªïŒããã³SinonïŒã¢ããã³ã°ã©ã€ãã©ãªïŒãšçµã¿åãããŠäœ¿çšãããããšãå€ããæè»ãªãã¹ããã¬ãŒã ã¯ãŒã¯ã§ãã
- JSDoc: JavaScriptãœãŒã¹ã³ãŒãããAPIããã¥ã¡ã³ããäœæããããã®ããã¥ã¡ã³ããžã§ãã¬ãŒã¿ãŒã§ãã
- Code Climate: èªåã³ãŒãã¬ãã¥ãŒããã³ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ãµãŒãã¹ã§ãã
課é¡ãšèæ ®äºé
ã³ãŒãå質ãã¬ãŒã ã¯ãŒã¯ã®å®è£ ã«ã¯ãããã€ãã®èª²é¡ã䌎ãå¯èœæ§ããããŸãã
- åæã»ããã¢ãããšèšå®: ããŒã«ãšããã»ã¹ã®ã»ããã¢ãããšèšå®ã«ã¯æéããããå ŽåããããŸãã
- 倿Žãžã®æµæ: éçºè ã¯æ°ããã³ãŒãã£ã³ã°æšæºãããŒã«ãæ¡çšããããšã«æµæã瀺ãå ŽåããããŸãã
- äžè²«æ§ã®ç¶æ: ç¹ã«å€§èŠæš¡ãªããŒã ã§ã¯ããã¹ãŠã®éçºè ãã³ãŒãã£ã³ã°æšæºãšãã¹ããã©ã¯ãã£ã¹ãéµå®ããŠããããšã確èªããã®ã¯å°é£ãªå ŽåããããŸãã
- èªååãšäººéã®å€æã®ãã©ã³ã¹: èªååã¯äººéã®å€æãè£å®ãããã®ã§ãããå®å šã«çœ®ãæãããã®ã§ã¯ãããŸãããã³ãŒãã¬ãã¥ãŒããã®ä»ã®äººéäž»å°ã®ããã»ã¹ã¯äŸç¶ãšããŠéèŠã§ãã
- ã°ããŒãã«åãšããŒã«ãªãŒãŒã·ã§ã³: JavaScriptã³ãŒããç°ãªããã±ãŒã«ãæåã»ãããåŠçããå¿ èŠãããå Žåãããããšãèæ ®ããŠãã ãããã³ãŒãå質ãã§ãã¯ã¯ãããã®åŽé¢ã«å¯ŸåŠããå¿ èŠããããŸãã
ã°ããŒãã«JavaScriptéçºã®ããã®ãã¹ããã©ã¯ãã£ã¹
ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã®JavaScriptã¢ããªã±ãŒã·ã§ã³ãéçºããéã«ã¯ã以äžã®ãã¹ããã©ã¯ãã£ã¹ãæ€èšããŠãã ããã
- åœéåïŒi18nïŒ: åœéåã©ã€ãã©ãªãšãã¯ããã¯ã䜿çšããŠãè€æ°ã®èšèªãšãã±ãŒã«ããµããŒãããŸãã
- ããŒã«ãªãŒãŒã·ã§ã³ïŒl10nïŒ: ã¢ããªã±ãŒã·ã§ã³ãç¹å®ã®æåçããã³å°åçãªèŠä»¶ã«åãããŠé©å¿ãããŸãã
- UnicodeãµããŒã: ã¢ããªã±ãŒã·ã§ã³ãUnicodeæåããµããŒãããããŸããŸãªæåã»ãããåŠçã§ããããã«ããŸãã
- æ¥ä»ãšæå»ã®ãã©ãŒããã: ç°ãªããã±ãŒã«ã«é©ããæ¥ä»ãšæå»ã®ãã©ãŒãããèŠåã䜿çšããŸãã
- é貚ã®ãã©ãŒããã: ç°ãªããã±ãŒã«ã«é©ããé貚ã®ãã©ãŒãããèŠåã䜿çšããŸãã
- ã¢ã¯ã»ã·ããªãã£ïŒa11yïŒ: WCAGãªã©ã®ã¢ã¯ã»ã·ããªãã£ã¬ã€ãã©ã€ã³ã«åŸããé害ãæã€ãŠãŒã¶ãŒãã¢ã¯ã»ã¹ã§ããã¢ããªã±ãŒã·ã§ã³ãèšèšããŸãã
çµè«
é©åã«å®çŸ©ãããå®è£ ãããJavaScriptã³ãŒãå質ãã¬ãŒã ã¯ãŒã¯ãšèªåè©äŸ¡ã·ã¹ãã ã¯ãå ç¢ã§ãä¿å®æ§ãé«ããæ¡åŒµæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ããã³ãŒãã£ã³ã°æšæºãæ¡çšãããªã³ã¿ãŒãšéçè§£æããŒã«ã掻çšããã³ãŒãã¬ãã¥ãŒã¯ãŒã¯ãããŒãå®è£ ããå æ¬çãªãã¹ããèšè¿°ããããšã§ãéçºè ã¯ã³ãŒããå®çŸ©æžã¿ã®åè³ªåºæºãæºãããŠããããšãä¿èšŒã§ããŸãããã®ãã¬ãŒã ã¯ãŒã¯ã¯ã倿§ãªèŠä»¶ãšæåŸ ãæã€è€éãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããŠããã°ããŒãã«ããŒã ã«ãšã£ãŠç¹ã«éèŠã§ãããããã®ãã©ã¯ãã£ã¹ãæ¡çšããããšã§ãããé«å質ãªã³ãŒããçç£æ§ã®åäžããªã¹ã¯ã®äœæžãã³ã©ãã¬ãŒã·ã§ã³ã®åŒ·åã«ã€ãªãããæçµçã«ã¯ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«ãšã£ãŠããè¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ããããããŸãã