ããã«ã¡ã¯ãBASE ã§ Design Group ã«æå±ããŠãã äžäœå ã§ãã䞻㫠ãããã·ã§ããäœæãµãŒãã¹ãBASEã ã®ããã³ããšã³ããæ
åœããŠããŸãã èæ¯ BASE ã®ãã¶ã€ã³ããŒã ã¯ããæè¿ã§äººæ°ãæ¥æ¿ã«å¢ããæŽ»åãæŽ»çºã«ãªã£ãŠããŠããããã®äžã®ãããžã§ã¯ãã®äžã€ãšããŠãçŸåšã¹ã¿ã€ã«ã¬ã€ãã®å·æ°ã«åãçµãã§ããŸãã ãããã人æ°ãå¢ããŠããäžæ¹ã§ãã³ãŒãã£ã³ã°ã®ã«ãŒã«ã®çµ±äžãã³ãŒãã¬ãã¥ãŒãå人ã®è£éã«ä»»ããŠããããããŒã¯ã¢ãããããªãªãŒã¹ãããŸã§ã«æéãããã£ãŠããŸãããšãåé¡ã«ãªã£ãŠããŠããŸããã ããã§ãæ°ããã¹ã¿ã€ã«ã¬ã€ãã§ã¯ããã¶ã€ããŒããšã³ãžãã¢ã®äœæ¥å·¥æ°ãççž®ããããå¹çããéçºãé²ããããã«ãã³ãŒãã£ã³ã°ã«ãŒã«ã®æŽåãšãªã°ã¬ãã·ã§ã³ãã¹ããå°å
¥ããããšã«ããŸããïŒ ãã£ãããš stylelint ã䜿ã£ãŠã³ãŒãã£ã³ã°ã«ãŒã«ã管ç BackstopJS ã§ãã¹ããè¡ãããšã§ãã°ã¬ãé²ã åæãšããŠã nodejs ã yarn ãªã©ã®äžè¬çãªããã³ããšã³ãéçºç°å¢ãæŽã£ãŠãããã®ãšããŸãã stylelintãå°å
¥ stylelint ã䜿ã£ãŠããããŸã§å人ã®è£éã§ä¿ãããŠããã³ãŒãã£ã³ã°èŠçŽãžã®æºæ ãæ©æ¢°çã«è¡ããããã«ããŸãã å°å
¥ stylelintãã€ã³ã¹ããŒã« ãã®ä»å¿
èŠãªãã©ã°ã€ã³çãã€ã³ã¹ããŒã« stylelint-scss ïŒSassã®SCSSèšæ³ã®ããã®ãã©ã°ã€ã³ïŒ stylelint-order ïŒããããã£ãã¢ã«ãã¡ãããé ã«äžŠã³æ¿ãããã©ã°ã€ã³ïŒ stylelint-config-standard ïŒCSSã®ã³ãŒãã£ã³ã°èŠçŽéïŒ prettier-stylelint ïŒã³ãŒããã©ãŒããã¿ãŒprettierãšstylelintãçµã¿åãããŠäœ¿çšããïŒ yarn ã䜿ã£ãŠã€ã³ã¹ããŒã«ããŸãã $ yarn add -D stylelint stylelint-scss stylelint-order stylelint-config-standard prettier-stylelint èšå® æ¢åã®ã³ãŒãã£ã³ã°ã«ãŒã«ã«åãããŠã .stylelintrc ãèšå®ããŠãããŸãã BASE ã®å Žåã¯ããããã£ãã¢ã«ãã¡ãããé ã«ãœãŒããããã£ãã®ã§ã stylelint-order ã䜿çšãããããŠããŸããïŒç§ã¯ããŸãŸã§ abc ã®æãæããªããé çªã«ããããã£ã䞊ã¹ãŠããŸãã........ïŒ // .stylelintrc { " parser ": [ " css " ] , " plugins ": [ " stylelint-scss ", " stylelint-order " ] , " extends ": [ " stylelint-config-standard ", " ./node_modules/prettier-stylelint/config.js " ] , " rules ": { " indentation ": 4 , // ã€ã³ãã³ã " order/order ": [ " custom-properties ", " declarations " ] , // ã¢ã«ãã¡ãããé ã§ãœãŒããã " order/properties-alphabetical-order ": true , // ã¢ã«ãã¡ãããé ã§ãœãŒããã " length-zero-no-unit ": true , // å€ãã0ããªãåäœãçç¥ãã " number-leading-zero ": " always ", // å°æ°ç¹ã®é ã®ã0ãã¯çç¥ãã " color-hex-length ": " short ", // HEX圢åŒã®ã«ã©ãŒã³ãŒãã¯3æåã§è¡šèšãã " shorthand-property-no-redundant-values ": true // ã·ã§ãŒããã³ãã§ããããã£ãæžã } } èšå®ãã§ãããã package.json ã® scripts ã«ã³ãã³ãã远å ããŠã yarn lint-sass ã§å®è¡ã§ããããã«ããŸãã // package.json // ... " scripts ": { " lint-sass ": " prettier-stylelint --quiet --write src/sass/**/* " } // ... å®éã®äœ¿ç𿹿³ ãŸãã¯æãããŸãŸã« sass(scss) ãèšè¿°ããŸãã . btn--submit { color : $white ; ãbackground-color: $green ; border : none ; } ãã¡ããã¡ãã§ããïŒã§ã倧äžå€«ã§ããlint ãå®è¡ãããš... $ yarn lint-sass ãããªããŸãã . btn--submit { background-color : $green ; border : none ; color : $white ; } å®ç§ã§ããïŒããæã¯æããªããŠã倧äžå€«ã«ãªããŸããïŒ çµæ åžžã«ã³ãŒãã£ã³ã°ã«ãŒã«ãæèããå¿
èŠããªããªã£ãã®ã§ãããŒã¯ã¢ããã®ã¹ããŒããäžãããŸããïŒ 2. BackstopJSãå°å
¥ BackstopJS ã䜿ã£ãŠãæ»ããçºçããªããããåäœãã§ãã¯ããä»çµã¿ãäœããŸãã å°å
¥ BackstopJSãã€ã³ã¹ããŒã« stylelintãšåæ§ã«ãyarn ã䜿ã£ãŠã€ã³ã¹ããŒã«ããŸãã $ yarn add -D backstopjs backstop.json ã«ãªãã·ã§ã³ãèšå®ããã¹ãããã·ã§ãããæ®ã ã¹ãããã·ã§ããã䜿ã£ãŠãã¹ããã èšå® backstop.json ã«å¿
èŠãªãªãã·ã§ã³ãèšå®ããŠãããŸãã // backstop.json { " viewports ": [ { " label ": " sp ", " width ": 320 , " height ": 480 } , { " label ": " pc ", " width ": 1024 , " height ": 768 } ] , " scenarios ": [ { " label ": " reference ", // ã¹ãããã·ã§ããã®åå " url ": " ãã¹ãããURL ", " hideSelectors ": [] , " removeSelectors ": [] , " selectors ": [ "# test - sandbox " // ã¹ãããã·ã§ãããæ®åœ±ããéšå ] , " readyEvent ": null , " delay ": 500 , " misMatchThreshold " : 0.1 , " onBeforeScript ": "", " onReadyScript ": "" } , { " label ": " test ", // ã¹ãããã·ã§ããã®åå " url ": " ãã¹ãããURL ", " hideSelectors ": [] , " removeSelectors ": [] , " selectors ": [ "# test - sandbox " // ã¹ãããã·ã§ãããæ®åœ±ããéšå ] , " readyEvent ": null , " delay ": 500 , " misMatchThreshold " : 0.1 , " onBeforeScript ": "", " onReadyScript ": "" } ], " paths ": { " bitmaps_reference ": " ./backstop_data/bitmaps_reference ", " bitmaps_test ": " ./backstop_data/bitmaps_test ", " compare_data ": " ./backstop_data/bitmaps_test/compare.json ", " casper_scripts ": " ./backstop_data/casper_scripts " } , " engine ": " phantomjs ", " report ": [ " CLI ", " browser " ] , " cliExitOnFail ": false , " casperFlags ": [] , " debug ": false , " port ": 3001 } èšå®ãã§ããã gulpfile ã«ã¿ã¹ã¯ã远å ããŸãã // gulpfile.coffee // ... exports.backstopref = () => connect.server( { root: './build' , livereload: true } ) backstopjs( 'reference' ).then () -> connect.serverClose() exports.backstop = () => connect.server( { root: './build' , livereload: true } ) backstopjs( 'test' ).then () -> connect.serverClose() // ... ãããŠã package.json ã® scripts ã«ã³ãã³ãã远å ããŠã yarn backstop-ref ã§åç
§çšç»åã®äœæã yarn backstop-test ã§ãã¹ããå®è¡ã§ããããã«ããŸãã // package.json // ... " scripts ": { " backstop-ref ": " gulp backstopref ", " backstop-test ": " gulp backstop " , } // ... å®éã®äœ¿ç𿹿³ ã¯ããã«ããã¹ãã®å
ããŒã¿ã«ãªãåç
§çšã®ç»åãäœããŸãã $ yarn backstop-ref BackstopJS ã¯ããã®ç»åãããšã«æ¯èŒãã¹ããè¡ã£ãŠãããã®ã§ãäºæãã¬å€æŽãè¡ã£ãŠããŸã£ãå Žåã«ãã¹ãã倱æããããã«æ°ã¥ãããšãã§ããŸãã 詊ãã«ããã®ãã¿ã³ã® border-radius ã 8px ãã 0px ãžå€æŽããŠã¿ãŸãããã ãããŠããããã«ãã¹ãå®è¡çšã®ã³ãã³ããå©ããŸãã $ yarn backstop- test // ... compare | ERROR { requireSameDimensions: false , size: isDifferent, content: 0.32%, threshold: 0.1% } : reference bbq_reference_0_test-sandbox_0_sp.png compare | ERROR { requireSameDimensions: false , size: isDifferent, content: 0.32%, threshold: 0.1% } : test bbq_test_0_test-sandbox_0_sp.png compare | OK: reference bbq_reference_0_test-sandbox_1_pc.png compare | OK: test bbq_test_0_test-sandbox_1_pc.png report | Test completed... report | 2 Passed report | 2 Failed report | Writing jUnit Report report | Writing browser report report | jUnit report written to: ~~/backstop_data/ci_report/xunit.xml report | Resources copied report | Copied configuration to: ~~/backstop_data/html_report/config.js COMMAND | Executing core for `openReport` openReport | Opening report. report | *** Mismatch errors found *** COMMAND | Command `report` ended with an error after [ 0.51s ] COMMAND | Error: Mismatch errors found. at ~~/backstopjs/core/ command /report.js: 113 : 17 at < anonymous > :null:null COMMAND | Command ` test ` ended with an error after [ 5.371s ] COMMAND | Error: Mismatch errors found. at ~~/backstopjs/core/ command /report.js: 113 : 17 at < anonymous > :null:null [ 15 : 02 : 59 ] ' backstop ' errored after 5.38 s å·®åãçºçããã®ã§ããã¹ãã倱æããã¬ããŒãçšã® HTML ãåºåãããŸããã ãããéããŠã¿ããšãå·®åã®ããç®æããã³ã¯è²ã«ãªã£ãŠããŸãïŒåãããããã§ããïŒ çµæ äœæ¥ãéå§ããåã«ã¹ãããã·ã§ãããäœæããŠããããšã§ãè¡ã£ãäœæ¥ã§ã®ãã°ã¬ã«æ©ãæ°ã¥ããããé²ãããšã§ããããã«ãªããŸããã ãŸãšã ä»åãstylelintãBackstopJSãå©çšããããšã§ãå®è£
è
ã®è² æ
ã以åããã軜ããªããŸããïŒ å®è£
è
ãå¢ããŠãå·®åãçãŸãã«ããããã¶ã€ã³ã®äžè²«æ§ãä¿ã€ããšãã§ããä»çµã¿ãèããåŒãç¶ãã¹ã¿ã€ã«ã¬ã€ããäœæããŠãããããšæããŸãããŸãåæã«ãããããã¡ã³ããã³ã¹ããããç°å¢ãæŽããŠãããããšæããŸãïŒ