新しい角床を遞んだ理由

画像



私の蚘事では、新しいAngularを゚ンタヌプラむズアプリケヌションの基盀ずしお䜿甚した経隓を皆さんず共有したいず思いたす。 新しいAngularはReact、Vue、たたは他の人気のあるラむブラリよりも優れおいるずいうスピヌチは、この蚘事には含たれたせんが、もちろん、競合他瀟ず比范したす。 すべおの゜リュヌションには長所ず短所があり、あるプロゞェクトに適しおいるものは、別のプロゞェクトで掻気づくこずができたす。 そのため、新しいAngularが私たちを匕き付けたものを説明する前に、開発ですでに䜿甚しおいるものに぀いお少しお話ししたす。







私たちの䞻なプロゞェクトは長い開発パスを持ち、すでに時代遅れのテクノロゞヌであるマリオネット+バックボヌン+コフィスクリプトで構築されおいたす。 数幎前、私たちはそのようなスタックでプロゞェクトを開発するこずが非垞に困難になったこずに気付き、フロント゚ンド゚コシステムで代替案を研究し、そこで「獣」をどのように移行できるかを考え始めたした。







プロゞェクトの䜜業を開始しお、珟圚人気のあるReact + Redux +スタック[Reselect、Redux-Saga、Redux-formなど]を遞択したした。 これは、新しいスタックを遞択する最初の詊みであり、残念ながら倱敗したした。䜕幎も前にマリオネットほど䟿利ではなかったようです。 箄6か月前の調査の結果、私たちの遞択は新しいAngularに萜ち、私たちはそれに満足しおいたす。 新しいAngularは䌚瀟のメむンプロゞェクトでは䜿甚されおいたせんが、将来的にはこの゜リュヌションぞの移行に支障はありたせんCoffeescriptの巚倧なコヌドベヌスに止められない限り。 それで、新しいAngularで芋぀けたものずそれが奜きだった方法を芋おみたしょう。







重芁床ではなく、ポむントがランダムに衚瀺されたす。 もちろん、゜リュヌションの利点を考慮するものから始め、最埌に欠点に぀いおお話したす。







長所



角床はフレヌムワヌクです



これは私たちにずっお最も重芁な利点の1぀です。 5幎前に䌚瀟でプロゞェクトを始めたずき、クヌルで党䜓的な補品を構築するのは簡単だず思いたした。 なんお玠朎なんだ :)より倚くの人々がプロゞェクトに接続するほど、䞀般的なスタむルずアヌキテクチャに゜リュヌションの「動物園」党䜓を持ち蟌むのにより倚くの時間を費やしたした。 これは、Marionetteが開発者を制限するこずのないプリミティブのセットにすぎないため、Marionetteが私たちに䞎えた自由のためです。







すべおの人は異なっおおり、誰もが奜きなように補品のコヌドを䜜成したす。 この問題に苊劎しおいないずすぐに、コヌディングスタむルを導入し、コヌドを修正し、アヌキテクチャの説明を䜜成したしたが、同僚の1人から非暙準の゜リュヌションに出くわすこずがあり、プロゞェクトを同じ開発ずアヌキテクチャに戻すために倚倧な劎力を費やす必芁がありたした。







その埌、Reactの開発時間があり、ReduxずFluxが私の助けになったようです。 はい、これにより、これらのモデルの倉曎がコヌド党䜓に散圚するこずを心配する必芁がなくなりたしたが、問題の1぀はただ残っおいたした。 私は、補品に匕きずり蟌たれたラむブラリヌのセット党䜓を远わなければなりたせんでした。 私たちのスタックは、その倚様性ずアプロヌチに満ちおいたした。







次に、Angularに切り替えたした。 その柔軟性にもかかわらず、開発者にずっおはかなり制限的なフレヌムワヌクです。 たた、非垞に倚くの可胜性が含たれおいるため、プロゞェクトに新しいラむブラリを導入するこずは私たちにずっお非垞にたれなむベントになり、制埡が容易になりたした。 Angularチヌムが提䟛するコヌディング暙準の存圚により、私は完党に息を吐き、リラックスし、開発により倚くの時間を割くこずができたした。







もちろん、Angularではカオスを䜜成できたすが、パフォヌマンスを評䟡するずき、たたは再利甚しようずするず、誀っお構築されたコヌドがすぐに衚瀺されるため、これは非垞に困難です。 より厳しいフレヌムワヌクを甚意できたらうれしいのですが、残念ながら、拡匵する可胜性は倱われたすが、したくありたせん。 私には、Angularで劥協点が芋぀かったようです-これはすべおのマリオネットを蚱可しおいるわけではありたせんが、難しいExtjsは蚱可しおいたせん。







CLIシステムの可甚性



もちろん、これは角床のキラヌ機胜ずはほど遠く、Reactにも独自のclireact-starter-kitがありたすが、それにもかかわらず、ボむラヌプレヌトを遞択するのに時間を費やすよりも、コン゜ヌルクラむアントを䜿甚しお新しい゜リュヌションの研究を開始する方がはるかに簡単です䜕かが機胜しない理由を芋぀ける。 さらに、コン゜ヌルクラむアントには、最小限のアプリケヌションテンプレヌトをすぐに生成し、開発モヌドたたは運甚モヌドでコヌドを簡単に実行し、テストを実行できるずいう倧きな利点がありたす。







もちろん、これはすべお゚ントリのしきい倀を䞋げ、ファむルの堎所やアプリケヌションの「スケルトン」の蚘述に぀いおある皋床たで考えずに、すぐにビゞネスコヌドの蚘述を開始できるようにしたす。 たた、Angularのナヌザヌに敬意を衚する必芁がありたす。コン゜ヌルクラむアントはemberjsクラむアントの䞊に構築されおいたす。 昔々、私ぱンバヌに出䌚い、圌らのコン゜ヌルクラむアントの利䟿性に喜んで驚いおいたしたが、これは私がその時に気づいた唯䞀の゚ンバヌの利点でした。







タむプスクリプト



Typescriptが最初に登堎したずき、その目的を理解せず、型チェックはすべお「巧劙」であるず信じおいたした。たた、䞍正なデヌタ転送による倚くの欠陥はありたせんでした。 時間が経぀に぀れお、気が倉わり、フロヌパッケヌゞをReactプロゞェクトに導入するこずさえ詊みたしたが、1週間の苊劎の埌、私たちはあきらめ、それなしで生きるこずができるず決めたした。







次に、Typescriptで完党に蚘述されおいるAngularに泚目し、もう䞀床操䜜しおみたせんかず考えたした。 Typescriptに切り替えお最初に感謝したのは、es6をbabelや他のトランスパむラヌの蚭定で䞍必芁に倧隒ぎせずに簡単に䜿甚できるこずでしたそしお、次の曎新でコヌドアセンブリが壊れないずいう確実性。 コヌドを蚘述するだけで、コンパむラはそれらを問​​題なくes5に倉換したす。







しかし、䜕よりも、IDEでのコヌドの蚘述がはるかに䟿利で楜しいものになったこずを嬉しく思いたす-自動補完が正しく機胜し、コヌドコンテキストを離れるこずなくメ゜ッドのドキュメントを芋るこずができ、コヌドが自己ドキュメント化されたした。 メ゜ッドに枡すオブゞェクトの皮類をコメントで蚘述する必芁はなくなりたした。これによりTypescriptが提䟛されたした。







少し埌に、むンタヌフェむスずデコレヌタの魅力に感謝したした。 はい、もちろん、Reactを䜿甚しおTypescriptで蚘述できるため、Angularのナニヌクなプラスではありたせんが、フレヌムワヌク自䜓がTypescriptで蚘述されおいる堎合、コヌドのシヌムレスな統合が可胜になりたす。







コンポヌネントアプロヌチ



珟圚のほずんどすべおの゜リュヌションはコンポヌネントアプロヌチパラダむムを䜿甚しおおり、Angularはそのような゜リュヌションを提䟛する最初の䌁業ではありたせん。 ただし、Angularアプロヌチを他の゜リュヌションのアプロヌチず比范するず、いく぀かの違いがありたす。









Rxjs



AngularはRxJSラむブラリの䞊に構築されおおり、䜿甚しないのは奇劙でした。 しかし、このラむブラリに初めお出䌚ったずき、私たちはぞっずしたした。 デヌタの凊理チェヌンを正しく蚘述する方法を芋぀けるのに数日かかりたした。 結果は、このラむブラリに䜕かを曞き蟌もうずしたこずがある人だけが読むこずができるコヌドです。 それは私たちをずおも怖がらせお、RxJSの䜿甚を攟棄するこずさえ考えたした。







少し時間が経っお、ドキュメントを䜕床か読み盎し、動䜜䞭のラむブラリを詊し、それに慣れたした。 RxJSラむブラリを䜿甚するず、デヌタ凊理で非垞にクヌルなこずができ、ほずんどの堎合、コヌドは意図したずおりに動䜜したす。 確かに、今でも、6か月埌、私はこのラむブラリの完党なパワヌを完党には知らないこずを理解しおいたす。 しかし、その埌、私はそれを䜿甚するこずを拒吊する可胜性は䜎いこずを理解しおいたす。







もちろん、RxJはReactに埋め蟌むこずができたすが、フレヌムワヌクで同じものを䜿甚する堎合、たずえば、Angular HTTPモゞュヌルを䜿甚しおバック゚ンドを操䜜するなど、フレヌムワヌクにコヌドを簡単に関連付けるこずができたす。







䟝存性泚入



䟝存性泚入はほがすべおの堎所でAngularで䜿甚されおいるずいう事実から始めなければなりたせん。぀たり、非垞に倧きな境界内でフレヌムワヌクの動䜜を倉曎するこずができたす。







さらに、AngularのDIは柔軟性が高いため、Singleton、Factory、Facadeなど、よく知られおいる倚くのパタヌンを実装できたす。 コンポヌネントの盞互䜜甚から、モヌダルりィンドりやナヌザヌぞの通知を衚瀺するサヌビスの䜜成たで、あらゆる堎所でDIを䜿甚しおいたす。 そしおもちろん、バック゚ンドでのすべおの䜜業は、サヌビスずDIを通じお構築されたす。







私はそれを䜿ったネガティブな経隓があるので、reduxアプロヌチの支持者ではありたせん-プロゞェクトの1぀で、倧量の定型コヌド、倚くの堎合、倧芏暡なreduxサガハンドラヌずスロヌダりンするゲッタヌの遅延にうんざりしおいたした。 おそらくそれを間違っお䜿甚したかもしれたせんが、それはポむントではなかったようです。 このスタック党䜓をむンタヌフェむスを䜿甚しお完成したプロゞェクトに組み蟌みたしたが、新しいものは構築せず、バック゚ンドで䜜業を匷化しお、すべおを状態プロセッサおよび副䜜甚プロセッサに䟿利に適合させたした。







しかし、Angularに戻りたす。 reduxアプロヌチは必芁ないが、いわゆる「trueの単䞀状態」にしたい堎合は、Angularでサポヌトされおいるサヌビス、RxJSコンポヌネント、およびUniderectialデヌタフロヌを䜿甚できたす。 コヌドははるかにコンパクトであり、reduxアプロヌチよりも悪くありたせん。 時間が経぀に぀れお、コヌドをほずんど倉曎するこずなく、それをリデュヌスアプロヌチに倉換できるようになりたす。 このアヌキテクチャが最終的にどのように芋えるかに぀いおは、 こちらをご芧ください 。







モゞュヌル



Marionettejsで初めおモゞュヌルに出䌚い、信じられないほど䟿利でした。 モゞュヌルを倚数のファむルに分割したす-個別にコントロヌラヌ、個別にビュヌなど そしお、マリオネットが私のためにすべおをたずめた埌。







Reactでプロゞェクトを開発しおいるずき、モゞュヌルに぀いおよく芚えおいたしたが、Reactにはすぐに䌌たものは䜕もありたせん。そのようなものを怜玢したり実装したりする時間はありたせんでした。 これに察しお、Angularは最初からモゞュヌルの抂念を提䟛したす。 たた、コヌドベヌスずのコラボレヌションが倧幅に簡玠化されたす。 ビゞネスコンポヌネントのすべおの郚分をモゞュヌルに収集するだけで、別の開発者がそれを䜿甚するには、モゞュヌルをコヌドに远加するだけです。







モゞュヌルにはコンポヌネント甚の独自の名前空間があるため、倖郚コヌドで誰かが「内郚」を利甚できるこずを心配する必芁はありたせん。 これは、残りのコヌドからの優れた抜象化レむダヌです。 そしおもちろん、他の開発者が䜿甚できるように、必芁なコンポヌネントを倖郚に゚クスポヌトする機䌚がありたす。







さらに、モゞュヌルはコヌドを文曞化するための優れたツヌルです。 もちろん、モゞュヌルを䜿甚する機胜があり、それらに぀いお知る必芁がありたす。 最初の機胜は、モゞュヌルで定矩されたサヌビスがアプリケヌション党䜓にアクセス可胜であり、これらのサヌビスの名前に泚意する必芁があるこずです。 Angularは、衝突を避けるために、新しいJS暙準のSymbolタむプの類䌌物を䜿甚した゜リュヌションを提䟛したす。







2番目の機胜は遅延読み蟌みモゞュヌルに隠されおおり、そのようなモゞュヌルから読み蟌たれたサヌビスはモゞュヌル内でのみ利甚可胜です。 これは、補品がプラグむンシステム䞊に構築されおおり、サヌビスぞの劚害されないアクセスが必芁なため、回避策を暡玢するかなり䞍快な機胜です。 アプリケヌションの開始時にサヌビスを早期にプリロヌドするため、この機胜を陀倖したした。







フレヌムワヌクの開発ずそのサポヌト



Reactずは異なり、Angularはたった1人の株䞻であるGoogleによっお開発されおおり、私たちにずっおこれは重芁です。 スタックの開発は本質的にコミュニティによっお行われおいるReactの経隓から、遞択されたラむブラリがサポヌトされなくなったり、欠陥を修正する率が非垞に䜎いこずが䜕床かあり、これにより開発が遅くなりたした。







あるラむブラリを別のラむブラリに倉曎しなければならず、ラむブラリをフォヌクしお独自の倉曎を加える必芁が䜕床もありたした。 はい、Angularでこれに圱響されたせんが、ここではフレヌムワヌク自䜓に倚くの芁玠が含たれおいるため、サヌドパヌティのラむブラリははるかに少なくなっおいたす。 Angular自䜓の欠陥に぀いおは、緊急の必芁がある堎合に、Angularチヌムからの有料サポヌトを䜿甚できたす。これは、問題の解決や別の解決策の発芋に圹立ちたす。 しかし、もちろん、これは少しの予算を費やす必芁がありたす。







これらはAngularが持぀すべおの利点ではなく、私たちにずっお重芁ず思われる利点だけです。 さらに、AngularはコヌドをWebWorkersに倉換する機胜を備えおいるため、マルチスレッド化、サヌバヌサむドレンダリングなどが可胜になりたす。 珟圚、これらの機胜は必芁ありたせんが、必芁な堎合は、コヌドを倧幅に倉曎せずにい぀でも䜿甚できるのは玠晎らしいこずです。







短所



他の゜リュヌションず同様に、Angularは理想的な補品ずはほど遠いものであり、もちろん短所もありたす。







かなり平凡なドキュメント



ドキュメントがありたすが、その品質には倚くの芁望がありたす。 倚くの堎合、ドキュメントを開くず、クラスメ゜ッドの名前が衚瀺されたすが、クラスメ゜ッドの機胜や方法に぀いおの説明はありたせん。 説明が存圚する堎合でも、生きおいる䟋がなければ、いずれかの方法を䜿甚する方法を理解するこずは垞に可胜ずは限りたせん。







Angularでコンポヌネントを動的に䜜成しようずした人は誰でも私を理解するでしょう。 いく぀かのこずがドキュメントに欠けおいるため、目暙を達成する方法を理解するにはコヌドを掘り䞋げる必芁がありたす。 しかし、時間の経過ずずもにこの問題は解消され、ドキュメントが远加されるず思いたす。







倧量の結果コヌド



すぐにAngularを䜿甚する堎合、出力では倚額のモゞュヌルが埗られ、そこから憂鬱ず悲しみが生じたす。 しかし、ドキュメントを少し掘り䞋げるず、出力のコヌドのサむズを倧幅に削枛する倚くの゜リュヌションを芋぀けるこずができたす。 そしお、いく぀かのアプロヌチがありたす。









私たちにずっお、このマむナスは特に重芁ではありたせん。アプリケヌションは6か月ごずにリリヌスされ、倧きな負荷はなく、ブラりザヌのキャッシュが私たちを救うからです。 そしお、誰かがモバむルデバむスからそれを䜿甚するこずを想定しおいたせん。このため、別個のネむティブアプリケヌションを䜜成する方が良いでしょう。







耇雑な゚ントリのしきい倀



Angularは非垞に掗緎されたフレヌムワヌクです。 䞀方では、cliを䜿甚しお、簡単にコヌドの蚘述を開始できたすが、他方では、倉曎怜出機胜の動䜜方法などのドキュメントを孊習しなくおも、非垞に最適でないコヌドを䜜成したり、たったく機胜しないこずさえできたす。







たた、このマむナスを枡さず、遅延ロヌドモゞュヌルのサヌビスが別のモゞュヌルで衚瀺されない理由を理解しようずしお倚くの時間を費やしたした。 Angularの耇雑さに加えお、RxJsラむブラリは倚くの時間を費やしたした。これは簡単に理解できるものではありたせんが、䟡倀がありたす。







おわりに



䞊蚘に基づいお、Angularは倧芏暡なアプリケヌションの構築を恐れるこずのできない真の䌁業フレヌムワヌクになったずいう結論に達したした。 これは䞻に、RxJずTypescriptの遞択など、正しく行われた決定のチェヌンであるAngularの最初のバヌゞョンでの経隓の理解ず、行われた決定の敎合性によるものでした。







Reactは良いアむデアの集たりですが、すぐに䜿える機胜が倚くないため、倚くの堎合、誰もがコミュニティから提䟛される機䌚から自分の「モンスタヌ」を䜜りたす。 その結果、新しい開発者が耇雑なプロゞェクトに参加する時間はAngularの時間よりもはるかに長くなり、倚くの堎合、近隣のチヌムでさえ問題を抱えおいたす。 しかし、繰り返したすが、これは玔粋に私たちの意芋であり、私たちの経隓ず創造されたプロゞェクトに由来しおいたす。 Angularを遞択する堎合、開発の速床ず、開発者がコヌドを倉曎しお補品を前進させるこずができる速さが重芁です。








All Articles