![](https://habrastorage.org/webt/xe/s9/8d/xes98d_jddahgkwwus8rjf76hfo.jpeg)
Sberbank Business Onlineã®æ°ããããŒãžã§ã³ã2.5幎éäœæããŠããŸãã æ¥å¹ŽãSberbankã®ãã¹ãŠã®æ³äººã¯ã©ã€ã¢ã³ããããã«ç§»ç®¡ããäºå®ã§ãã
ããã§ã¯ãã¹ã¿ãã¯ããå§ããŸãããã TypeScriptãReactãRefluxïŒã¬ã¬ã·ãŒïŒãReduxãBluebird Promiseãããã³Bootstrapãå®è£ ããŸããã LESSã«ã¹ã¿ã€ã«ãèšè¿°ããŸãã BabelãWebpackãããã³ãã®ãã©ã°ã€ã³ã䜿çšããŠãããããã¹ãŠãåéããŸãã Webpackã¯æåã®ããŒãžã§ã³ã§ããã2çªç®ã«åãæ¿ããäºå®ã§ãã å€ãã®äººãå°ãããããããŸããïŒãªãTypescriptãšBabelãåæã«å¿ èŠãªã®ã§ããïŒ ç¬¬äžã«ãTypeScriptã®åã¯ã誰ãã転眮ã®æ¹æ³ãç¥ã£ãŠããããã§ã¯ãªãããã®æ©èœã§ããã«ã«è¿œãã€ããã®ã¯ããæè¿ã§ããã 第äºã«ãTypeScriptã¯ãã£ãã·ã¥ã§ããŸããã ãŸããbabelã¯æ¢è£œã®ES5ã¹ã¯ãªããããã©ã«ããŒã«ä¿åã§ããŸãã ãœãŒã¹ãå€æŽãããŠããªãå Žåã圌ã¯ããã«ããããããããåããŸãã ãããžã§ã¯ãã«æ°åãããå Žåããã®æéã®ç¯çŽã¯éåžžã«æ¥œããã§ãã
æè¡ã¹ã¿ãã¯ã¯ããªãæ°é®®ã§ãã é£äžã¯ããã€ãã®ããšãäžåºŠã«æãäžããªããã°ãªããŸãããäŸãã°ãTSãReactãReduxããããžã§ã¯ãèªäœããããŠéè¡ã®èŠ³ç¹ããã§ãã 50ã60人ã®ãã¡ãå·ã§åããŠããã®ã¯ããã20ïŒ ã§ãããæ®ãã¯ãã³ããŒããæ¥ç¶ãããŠãããé »ç¹ã«å€æŽãããŸãã
ãã®ãããªç¶æ³ã§ã®ã³ãŒãã¬ãã¥ãŒã®å¯ŸåŠæ¹æ³ 以åã¯ãæãçµéšè±å¯ãªéçºè ã®äžéšããã¹ãŠã®ããŒã ã®ã³ãŒããèŠãŠããŸãããããã®ãããªå°ããªãã©ãããããããŸããã çŸåšãããŒã éã§åçã«åæ£ããããšããŠããŸãã ããããå°é家ãå€ãã®ããŒã ã«ç»å ŽããŠããŸãïŒåœŒãã¯ãããžã§ã¯ãã«ç²ŸéããŠããŠã圌ããã©ãã«ããŠã©ãã«ããããç¥ã£ãŠããŸãïŒã圌ãã¯èªè»¢è»ãªã©ãçºæããŸããã ãããã£ãŠã圌ãã¯ããŒã ã®ã¡ã³ããŒã ãã§ãªããä»ã®ã¡ã³ããŒãã¬ãã¥ãŒããŸãã
ã¬ãã¥ãŒã¯å°ãèªååãããŠããããã«ãªã¯ãšã¹ãã§äžèŽããå¿ èŠã®ããã©ãã«ãè¿œå ããŸãã ãã®åŸãç·è²ã«å€ãããPRã¯èªåçã«ããŒãžãããŸãã ã³ãŒãã¹ã¿ã€ã«ããšãã¹ããŒããã¢ãŒããã¯ããCSSãE2Eãã¹ããªã©ãããŸããŸãªã©ãã«ããããŸãã .lessãã¡ã€ã«ãå€æŽãããå Žå-CSSãè¿œå ãããã«ãŒãã«ã³ãŒããŸãã¯äœã¬ãã«ã®ãã®ãå€æŽãããå Žå-Architectãè¿œå ãããŸãã ãšãã¹ããŒããååŸããã«ã¯ãå°ãªããšã2人ã®ãšãã¹ããŒããåéããå¿ èŠããããŸãã
ãŸãããããžã§ã¯ãã«åããŠåå ãã人ãJSã«ããŸã匷ããªã人ã¯ãã³ãŒãã¬ãã¥ãŒåã®ã³ãŒããšã¯å€§ããç°ãªããŸãã
TypeScriptãšJavaScript
å€ãã®äººãTSã«ã€ããŠæžããŠãES5ã§çœ®ãæããããæ°ããæ©èœã䜿çšããç¬éãèŠã€ããŸããã ããããããã§ãããšã©ãŒã³ãŒãã®éçåæã®ããã«ãå ¥åã«TSã䜿çšããŸããã ã¯ããJSã§ã³ãŒããæ£ããäœæã§ããŸãããTSã®ããã«ä¿èšŒããããšã¯ã§ããŸããã 誰ããããªããããããã®TSã³ãŒãïŒãªãŒããŒãããïŒãæžããªããã°ãªããªããšããçæãå ¥ããŸãã ãå€ããã³ãŒãJS> TSããªãã¡ã¯ã¿ãªã³ã°ãããšãã«ãã©ã³ã¿ã€ã ã§ã®ã¿æ©èœããåºæ¬çãªãšã©ãŒãæ€åºãããŸããã ã³ã³ããååšããªããããã€ã³ããå¿ããããŠãããããã©ã±ãããæ©æã«éããããŠããããªã©ãå°éäžå¯èœãªã³ãŒããæªäœ¿çšã®åŒæ°ãªã©ã¯èšããŸã§ããããŸããã 3000-4000ã¹ã¯ãªããã§ã¯ãTSãªãã§ã©ã®ããã«çããããæ³åããã®ã¯äžè¬çã«å°é£ã§ãã
ãã¡ãããJavaScriptã§ã³ãŒããèšè¿°ããå Žåãåä»ãèšèªããããã®ããã«ãã³ã³ãã€ã©ãæ¯æŽããŠã³ãŒããèšè¿°ã§ããŸããå€æ°ãåå®çŸ©ãããå€æ°ã«ç°ãªãåãæžã蟌ãŸããåžžã«åãåãè¿ããŸãã åé¡ã¯ãbabel.jsã䜿çšãããŠããå ŽåãTypeScriptãåŠç¿ããããšã«æå³ã¯ãããŸããïŒ
ç§ãã¡ã¯ãã°ãã°ããã«ã€ããŠè°è«ããŸãã äžéšã®ååã¯ãããªãTSãå¿ èŠãªã®ã§ããïŒ ç§ãã¡ã¯ãã³ãŒããé©åã«äœæãã培åºçãªã³ãŒãã¬ãã¥ãŒãå®æœããã€ã³ã¿ãã¥ãŒãã人ãéžã³ãå®éã«JSãžã§ãã€ã玹ä»ããŸãã ããããã ãã人çèŠå ãæ lazãéæ»ãäžæ³šæããã£ã³ã»ã«ããŸããã§ããã TSãJSã³ãŒãã«æ¥ç¶ããããšã劚ãããã®ã¯äœããããŸããã æ¬åœã«ãšã©ãŒã1ã€ããªãå Žåãã³ã³ãã€ã©ã¯äœãèŠã€ããããŸããããã°ãããããŒã ããããæãæ¬æ¥ã©ããã«åœ¢æãããŠããããšãåã¶ããšãã§ããŸãã ããããTSãå®å šã«äœ¿çšããããšã¯äŸç¶ãšããŠåŠšãã«ã¯ãªããŸããã ããã«ãç¹å¥ãªè²»çšã¯å¿ èŠãããŸããã
ããã«ãä»å¹Žã®ããŒãžã§ã³1.8 TSã§ã¯äŸ¿å©ãªæ©èœãäœæããŸããã ããã§ãçŽç²ãªJSã§åã確èªã§ããŸãããããžã§ã¯ãã«ã.jsããã¡ã€ã«ãè¿œå ããallowJsãã©ã°ãèšå®ããã ãã§ãã ãã§ãã¯ããããªãã³ãŒããããå Žåã¯ã@ ts-nocheckã¢ãããŒã·ã§ã³ã䜿çšããŠç¡èŠããŠãåé¡ãããŸããã ã³ãŒãã®ã¬ãã¥ãŒäžãå°ããªãã°ããã£ããããããšã¯ã»ãŒäžå¯èœã§ãããTSã¯æéãšãšãã«ã®ãŒã®ç¯çŽã«åœ¹ç«ã¡ãŸãã ãŸãã¯ããªãªãŒã¹ãã©ã³ããè¿œå ããŠã100åã®ãã¡ã€ã«ã§ç«¶åãçºçããããã«ããŸã...å·è¡ã®ç¶æ ã§MERGEãã¿ã³ãæŒãæ¹æ³ã確èªããããšæããŸãã
TypeScriptãšãããŒ
ããããŒã¯ã©ãã§ããïŒããšå°ããŸãã ES6ãšTypescriptã®ã©ã¡ãããéžæããŸããããFlowã«ã€ããŠã¯èª°ãç¥ããŸããã§ããã éçã³ãŒãåæã®éãã«èå³ããã人ã®ããã«ãTypeScriptãšFlowãæ¯èŒããHolyJS 2017 Piterã«ã³ãã¡ã¬ã³ã¹ã®Ilya Klimovã«ããèå³æ·±ãã¬ããŒãããå§ãããŸãã
è»èã§é£ã¶
ãªãŒããŒãããã«å ããŠãTypescriptã«ã¯ä»ã«ãããã€ãã®æ¬ ç¹ããããŸãã
- ãããžã§ã¯ãã®ã¢ã»ã³ããªã®å€§å¹ ãªæžéã ããããããããŸãããã«ãåºæã®Webpack + TS + Babelã«éå®ãããŠããŸãã åãæ§æïŒ+-babelïŒã®ãŠãŒã¶ãŒã¯ãtranspileOnlyãã©ã°ãæå®ããŠts-loaderããŒããŒã䜿çšããTSCã䞊è¡ããŠå®è¡ããããšããå§ãããŸãã ãŸããã€ã³ã¯ãªã¡ã³ã¿ã«ãã«ãã¢ãŒãïŒ--watchïŒã§ã¯ãwebpack --watchãštsc --watchã®2ã€ã®ããã»ã¹ãåé¢ããŸãã
- OutOfMemory nodeJSãšã©ãŒã«ã¯åé¡ããããŸãããããžã§ã¯ããçµã¿ç«ãŠãŠ3ã4æ¥åŸã«ãªãªãŒã¹ããªãªãŒã¹ããå¿ èŠãããå Žåããã®ãããªé©ãã¯ç¹ã«äžå¿«ã§ãããããã«è§£æ±ºããããšã¯ã§ããŸããã
- å€éšã©ã€ãã©ãªã®.d.tsããŒãžã§ã³ãæŽæ°ããå¿ èŠã tsd>ã¿ã€ãã³ã°ã§æéã¯çµãããŸããã ãããŠãnpm> @typesãä»ããŠãã¹ãŠãããã«ããŠã³ããŒãã§ããããã«ãªããŸããã ããããæ°ããããŒãžã§ã³ã®ã©ã€ãã©ãªïŒlodashãªã©ïŒããªãªãŒã¹ããã.d.tsããŸã ãªãªãŒã¹ãããŠããªãå Žåã¯ã©ãã§ããããïŒ æ¬¡ã«ãéžæããå¿ èŠããããŸãïŒèªåã§è¿œå ããïŒãªããžããªã«è¿œå ããããDefinitelyTypedãªããžããªã®githubã«PRã眮ãïŒãããã®æ©èœããŸã 䜿çšããªãã§ãã ããã
- TypeScriptã®çµéšãããéçºè ãæ€çŽ¢ããŸãã ãããã¯ç§ãã¡ã®äººäºã®åã ã®æ¶ã§ãã ç§ã®ç¥ãéããåžå Žã®èª°ããæ·±å»ãªSPAãAngularãæžããçµéšããããé«åºŠãªãããã³ããšã³ãéçºè ãèŠã€ããã®ã«åé¡ããããŸãã åå¿ãã| VueãTypescriptãReduxãªã©