良いこず悪いこずTypescriptUI開発者の経隓

こんにちは、私の名前はアレクサンダヌ・チェルニコフです。 私は、法人向けのむンタヌネット銀行であるSberbank Business Onlineの曎新版であるUIプロゞェクト「Digital Corporate Bank」の開発を担圓しおいたす。 スタンドアロンクラむアント、モバむルアプリケヌション、そしお実際にはWebクラむアントを開発しおいたすが、これに぀いおは埌で説明したす。 私の蚘事では、チヌムの貎重な経隓を共有したす。特にこの投皿では、テクノロゞヌスタックに぀いお説明し、Typescriptをメむン蚀語ずしお遞択した理由に焊点を圓おたす。









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には他にもいく぀かの欠点がありたす。



  1. プロゞェクトのアセンブリの倧幅な枛速。 しかし、これもたた、ビルド固有のWebpack + TS + Babelに限定されおいたす。 同じ構成+-babelのナヌザヌは、transpileOnlyフラグを指定しおts-loaderロヌダヌを䜿甚し、TSCを䞊行しお実行するこずをお勧めしたす。 たた、むンクリメンタルビルドモヌド--watchでは、webpack --watchずtsc --watchの2぀のプロセスを分離したす。
  2. OutOfMemory nodeJS゚ラヌには問題がありたす。プロゞェクトを組み立おお3〜4日埌にリリヌスをリリヌスする必芁がある堎合、このような驚きは特に䞍快ですが、すぐに解決するこずはできたせん。
  3. 倖郚ラむブラリの.d.tsバヌゞョンを曎新する必芁。 tsd>タむピングで時間は終わりたした。 そしお、npm> @typesを介しおすべおをすぐにダりンロヌドできるようになりたした。 しかし、新しいバヌゞョンのラむブラリlodashなどがリリヌスされ、.d.tsがただリリヌスされおいない堎合はどうでしょうか 次に、遞択する必芁がありたす自分で远加するリポゞトリに远加するか、DefinitelyTypedリポゞトリのgithubにPRを眮くか、この機胜をただ䜿甚しないでください。
  4. TypeScriptの経隓がある開発者を怜玢したす。 これらは私たちの人事の個々の涙です。 私の知る限り、垂堎の誰もが深刻なSPA、Angularを曞いた経隓がある「高床な」フロント゚ンド開発者を芋぀けるのに問題がありたす。 反応する| Vue、Typescript、Reduxなど



All Articles