ããã«ã¡ã¯ã2幎ç®ã®y_kwmtã§ããæ¥åã§ESLintã«è§Šããæ©äŒããã£ãã®ã§ãESLintã«ã€ããŠããã°ã«ãŸãšããŸãã ESLintãšã¯ ã€ã³ã¹ããŒã« å®è¡ ãšã©ãŒãèŠåã®çš®é¡ æåŸã« åè ESLintãšã¯ ESLint㯠JavaScript ã®ããã®éçæ€èšŒããŒã«ã§ãã ãã¡ã€ã«å
ã®ãã°ãèŠã€ããããæ¬åŒ§ãã¹ããŒã¹ã®äœ¿ãæ¹ãªã©ã®ã¹ã¿ã€ã«ãçµ±äžãããŠããããã§ãã¯ããŸãã èªåã§æ€èšŒã«ãŒã«ãèšå®ããããšãã§ããã®ã§ããããžã§ã¯ãã«åãããã«ãŒã«ãèšå®ããããšãã§ããŸãã ã€ã³ã¹ããŒã« ESLintã¯Node8.10.0以éãå©çšããŠå®è¡ããããšãã§ããŸãã Node.js ã®ããã±ãŒãžç®¡çããŒã«npmãå©çšããŠã€ã³ã¹ããŒã«ããŸãã > npm install -g eslint ããŒãžã§ã³ç¢ºèªã¯ãã¡ãããå®è¡ããããšãã§ããŸãã > eslint -v v6.3.0 å®è¡ ESLintãå®è¡ããã«ããã£ãŠä»¥äžã®2ã€ã®ãã¡ã€ã«ãçšæããŸãã hello.js function helloWorld(name) { document .body.textContent = "Hello World. " + nama + "!" } helloWorld( "World" ); .eslintrc { " root ": true , // 芪éå±€ãèŠããåŠã " parserOptions ": { // ãµããŒãããJavaScriptèšèªãªãã·ã§ã³ " ecmaVersion ": 6 // ES6æ§æ } , " env ": { " browser ": true , // ãã©ãŠã¶ã®ã°ããŒãã«å€æ°ãæå¹ã«ãããåŠã " commonjs ": true , // CommonJSã°ããŒãã«å€æ°ãšCommonJSã¹ã³ãŒããæå¹ã«ãããåŠã " node ": true , // nodeã®ã°ããŒãã«å€æ°ãšnodeç¹æã®ã«ãŒã«ãæå¹ã«ãããåŠã " mocha ": true // mochaã®ã°ããŒãã«å€æ°ãæå¹ã«ãããåŠã } , " extends ": [ " eslint:recommended " ] , " rules ": { " array-bracket-spacing ": [ " warn ", " never " ] , // é
åå
ã®æ¬åŒ§ã®éé " arrow-body-style ": [ " warn ", " as-needed " ] , // ç¢å°é¢æ°æ¬äœã®åšãã®æ³¢æ¬åŒ§ã®äœ¿çš " arrow-parens ": [ " warn ", " as-needed " ] , // ã¢ããŒé¢æ°ã®æ¬åŒ§ã®äžè²«ããäœ¿çš " arrow-spacing ": " warn ", // ã¢ããŒé¢æ°ã®ç¢å°ã®åŸãåãã«ã¹ããŒã¹ãèŠæ±ããã " brace-style ": [ " warn ", " 1tbs " ] , // ãã¬ãŒã¹ã¹ã¿ã€ã«ãé©çš " camelcase ": " warn ", // ãã£ã¡ã«ã±ãŒã¹ " comma-spacing ": [ " warn ", { " after ": true }] , // ã«ã³ãååŸã®ã¹ããŒã¹ " dot-notation ": " warn ", // ããã衚èšã¹ã¿ã€ã«ã®äœ¿çšã®å¥šå± " eqeqeq ": [ " warn ", " smart " ] , // åå®å
šã§ãªãç䟡æŒç®åãæé€ " indent ": [ " warn ", 2 , { // ã€ã³ãã³ã " SwitchCase ": 1 , // ãã¹ãã®æ·±ã " FunctionDeclaration ": { " parameters ": 1 } , // 颿°å®£èšã®ãã©ã¡ãŒã¿ã®ã€ã³ãã³ãã¬ãã« " MemberExpression ": 1 , // è€æ°è¡ã®ããããã£ãã§ãŒã³ã®ã€ã³ãã³ãã¬ãã« " CallExpression ": { " arguments ": 1 } // 颿°åŒã³åºãåŒã®åŒæ°ã®ã€ã³ãã³ãã¬ãã« }] , " key-spacing ": [ " warn ", { " beforeColon ": false , " afterColon ": true , " mode ": " minimum " }] , // ãªããžã§ã¯ããªãã©ã«ã»ããããã£ã®ããŒãšå€ã®éã®ééãåŒ·å¶ " keyword-spacing ": " warn ", // ããŒã¯ãŒããšããŒã¯ãŒãã®éé " no-console ": " off ", // consoleãèš±å¯ããªã " no-empty ": " off ", // 空ã®ãããã¯ã¹ããŒãã¡ã³ããèš±å¯ããªã " no-multi-spaces ": " warn ", // ããŒã¯ãŒãéã®2ã€ä»¥äžã®ã¹ããŒã¹ãèš±å¯ããªã " no-redeclare ": " off ", // è€æ°ååã倿°ã宣èšèš±å¯ããªã " no-restricted-globals ": [ " warn ", " Promise " ] , // æå®ããã°ããŒãã«å€æ°ãå©çšããªã " no-trailing-spaces ": " warn ", // è¡ã®æ«å°Ÿã«ç©ºçœãå
¥ããªã " no-undef ": " error ", // 宣èšããŠããªã倿°ã䜿çšããªã " no-unused-vars ": [ " warn ", { " args ": " none " }] , // å©çšããŠããªã倿°ãèŠå " one-var ": [ " warn ", " never " ] , // ãããã¯ã¹ã³ãŒãå
ã§ã¯1床ã®å®£èšã§å¿
èŠãªå€æ°å®£èšãè¡ã " padded-blocks ": [ " warn ", " never " ] , // ãããã¯å
ã®ããã£ã³ã°ãåŒ·å¶ " object-curly-spacing ": [ " warn ", " never " ] , // 1è¡ã§ãªããžã§ã¯ãå®çŸ©ããéãæ³¢æ¬åŒ§ã®ååŸã«ç©ºçœãå
¥ããªã " quotes ": [ " warn ", " single " ] , // ã¯ã©ãŒã " react/prop-types ": " off ", // propsã®å€ã«å¯ŸããŠPropTypesãæå®ããŠããªãå Žåã«èŠå " react/jsx-no-bind ": " off ", // jsxå
ã§ã®bindãçŠæ¢ãã " semi ": [ " warn ", " always " ] , // ASIã®ã»ãã³ãã³ã®äœ¿çšãèš±å¯ãããåŠã " space-before-blocks ": [ " warn ", " always " ] , // ãããã¯åã®ã¹ããŒã¹ãèš±å¯ããªãããããåŠã " space-before-function-paren ": [ " warn ", " never " ] , // 颿°ã®æ¬åŒ§ã®åã«ã¹ããŒã¹ãèš±å¯ãããåŠã " space-in-parens ": [ " warn ", " never " ] , // æ¬åŒ§å
ã®ã¹ããŒã¹ãèš±å¯ããã " strict ": [ " warn ", " global " ] // use strict ãèšè¿°ããããš } } ãã¡ãã®.eslintrcã®rulesã«ã³ãŒãã£ã³ã°ã®ã«ãŒã«ã远å ãåé€ããããšãã§ããŸãã ãµã³ãã«ã³ãŒãhello.jsã«å¯ŸããŠæ¬¡ã®ã³ãã³ããå®è¡ããŸãã > eslint hello.js(ãã¡ã€ã«å) eslintã³ãã³ããå®è¡ãããšæ¬¡ã®ãããªçµæãåŸãããŸãã åèšã§7ã€ã®ãšã©ãŒãçºçããŠããŸããå·Šããé ã«è¡çªå·ãšäœçœ®ãèŠåããšã©ãŒããèŠåãšãšã©ãŒã®çš®é¡ã.eslintrcã«è¿œå ãããŠããã«ãŒã«åã衚瀺ãããŠããŸãã ãšã©ãŒãèŠåã®çš®é¡ Use the global form of 'use strict' 'use strict'ãçç¥ããŠããã®ã§ãèŠåãçºçããŠããŸãã èŠåãåºããªãããã«ããã«ã¯ãã¡ã€ã«ã®å
é ã«'use strict'ã远èšããŠãã ããã ãã¡ãã¯ã"strict": ["warn", "global"]ãã§ã«ãŒã«ãèšå®ãè§£é€ã§ããŸãã Expected indentation of 2 spaces but found 4 ã€ã³ãã³ãã§ã¹ããŒã¹2ååéããå¿
èŠãããã®ã«4ååéããŠããã®ã§èŠåãçºçããŠããŸãã èŠåãåºããªãããã«ããã«ã¯ã€ã³ãã³ããä¿®æ£ããŠãã ããã ãã¡ãã¯ãindentãã§ã«ãŒã«ãèšå®ãè§£é€ã§ããŸãã Strings must use singlequote ã·ã³ã°ã«ã¯ã©ãŒãã䜿çšããªããã°ãããªãããããã«ã¯ã©ãŒãã䜿çšããŠããã®ã§ãèŠåãçºçããŠããŸãã èŠåãåºããªãããã«ããã«ã¯ã·ã³ã°ã«ã¯ã©ãŒãã䜿çšããŠãã ããã ãã¡ãã¯ã"quotes": ["warn", "single"]ãã§ã«ãŒã«ãèšå®ãè§£é€ã§ããŸãã nama is not defined ãnamaããšãã倿°ãå®çŸ©ãããŠããªããšæãããŠããŸãã ãšã©ãŒãåºããªãããã«ããã«ã¯namaãšãã倿°ãå®çŸ©ããããåé€ããŠãã ããã ãã¡ãã¯ã"no-undef": "error"ãã§ã«ãŒã«ãèšå®ã§ããŸãã Missing semicolon è¡æ«ã« ã»ã ã³ãã³ããªãã®ã§ãèŠåãçºçããŠããŸãã èŠåãåºããªãããã«ããã«ã¯ ã»ã ã³ãã³ã远å ããŠãã ããã ãã¡ãã¯ã "semi": ["warn", "always"]ãã§ã«ãŒã«ãèšå®ãè§£é€ã§ããŸãã çºçãã7ã€ã®èŠåããšã©ãŒã®ä¿®æ£ãè¡ããå床eslintã³ãã³ããå®è¡ããŠåé¡ãªããã°ãäœã衚瀺ãããŸããã æåŸã« ESLintã§çºçããèŠåã®æ¹ä¿®ãæ¥åã§è¡ã£ãããšããã£ããã«ãããã°ã«ESLintã«ã€ããŠãŸãšããŸããã JavaScript ã®ã³ãŒãã£ã³ã°ãè¡ãæ¹ã
ã®åèã«ãªãã°ãšæããŸãã ã³ãŒãã倿Žããéãã³ãŒããèªã¿ã¥ãããšçè§£ã倿Žã«æéãããã£ãŠããŸãã®ã§ã ä»ã®éçºè
ã«è¿·æããããªããããèšå®ãããŠããã³ãŒãèŠçŽãå®ããèªã¿ãããã³ãŒããæžãããšãå¿æããŠãããŸãã åè qiita.com eslint.org ãšã³ãžã㢠äžéæ¡çš ãµã€ã ã©ã¯ ã¹ã§ã¯ããšã³ãžãã¢ã»ãã¶ã€ããŒã® äžéæ¡çš ãç©æ¥µçã«è¡ã£ãŠãããŸãïŒ ãèå³ãããŸãããæ¯éã確èªããé¡ãããŸãã https://career-recruit.rakus.co.jp/career_engineer/ ã«ãžã¥ã¢ã«é¢è«ãç³èŸŒã¿ãã©ãŒã ã©ã®è·çš®ã«å¿åããã°è¯ããããããªããšããæ¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãéæè¡ã£ãŠãããŸãã 以äžãã©ãŒã ãããç³èŸŒã¿ãã ããã rakus.hubspotpagebuilder.com ã©ã¯ ã¹Developersç»é²ãã©ãŒã https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ ã€ãã³ãæ
å ± äŒç€Ÿã®é°å²æ°ãç¥ãããæ¹ã¯ãæ¯é±éå¬ããŠããã€ãã³ãã«ãåå ãã ããïŒ âTECH PLAY techplay.jp âconnpass rakus.connpass.com