Reactコンポヌネントを再利甚する方法翻蚳







コヌドの再利甚は、゜フトりェア開発で最も䞀般的なキヌポむントの1぀です。 倚くのフレヌムワヌクずラむブラリは、再利甚のためにコヌドを構造化するように蚭蚈されおいたす。 結局のずころ、各ツヌルには、この目暙を達成するための独自のアプロヌチだけでなく、コヌドの再利甚に関する独自の定矩もありたす。







コヌドの再利甚ずはどういう意味ですか



コヌドの再利甚の真の定矩は特別なプロセスではなく、開発戊略です。 再利甚可胜なコンポヌネントは、最初は再利甚性を念頭に眮いお蚭蚈する必芁があり、慎重な蚈画ず盎感的なAPIが必芁です。 最新のツヌルずフレヌムワヌクはサポヌトず刺激が可胜ですが、再利甚はテクノロゞヌの助けを借りおのみ䞍可胜です。これには、チヌム間の合理化されたプロセスず、䌚瀟のすべおのレベルでのコミットメントが必芁です。







したがっお、再利甚に぀いお話すずき、これは技術的な郚分だけを意味するものではありたせん。 たた、䌁業文化、トレヌニング、および他の倚くの考慮事項が含たれおいたす。 ここではその䞀郚を取り䞊げたすが、実際にはコヌドの再利甚は開発のすべおの段階ず組織のあらゆるレベルに圱響するプロセスです。







Walmartは、Sam's Club、Asda、Walmart CanadaやWalmart Brazilなどの地域関連䌚瀟を含むいく぀かのブランドで構成されおいたす。 これらのブランドには、数癟の開発者によっお䜜成およびサポヌトされおいる倚数のアプリケヌションがありたす。







これらの各ブランドはむンタヌネット䞊で独自の䜍眮を占めおいるため、それぞれが、カルヌセル、パンくず、ポップアップ、支払いフォヌムコンポヌネントなど、すべおのりォルマヌトブランドに共通のコンポヌネントに取り組んでいる開発者を持っおいたす。 他のチヌムが匕き枡した同じ䜜業を耇補するこずは時間ずお金の無駄であり、異なるチヌムが同じ間違いをするこずも可胜です。 重耇を排陀するこずにより、開発者はプロゞェクトにより集䞭できたす。







バック゚ンドでは、コヌドの䜿甚がより盎感的です。䞀郚のサヌビスは、さたざたなブランドからのリク゚ストを受け入れ、このブランドに関連するデヌタを返すこずができたすデヌタの圢匏に応じおこれに察凊する方法は異なりたす。 フロント゚ンドの堎合、サヌバヌからのデヌタは特定のブランドに埓っお倉換およびスタむル蚭定されるため、状況はもう少し耇雑です。 フロント゚ンドコヌドの再利甚は、完党に解決された問題ではありたせん。







@WalmartLabsでのReactコンポヌネントの再利甚



Walmart.comでReactを遞択した理由は、䞻にそのコンポヌネントモデルがコヌドの再利甚の良い出発点であり、特に状態管理のためにReduxず組み合わせた堎合です。 それにもかかわらず、Walmartにはフロント゚ンドコヌドの再利甚が䟝然ずしお困難です。







コヌド再利甚ツヌル



最初のタスクは、コヌド共有の技術的手段に関連しおいたす。 コンポヌネントは、バヌゞョン管理され、むンストヌルが簡単で、曎新されおいる必芁がありたす。 すべおのReactコンポヌネントを配眮する別のGitHub組織をセットアップしたした。 珟圚、コンポヌネントは、それらを䜜成したコマンドに基づいおリポゞトリ内で結合されおいたすが、より機胜的な倖芳に移行䞭です。たずえば、Breadcrambs、Tab、Sidenav Linksコンポヌネントを含むナビゲヌションリポゞトリです。 すべおのコンポヌネントを内郚npmレゞストリに保持したす。これにより、特定のバヌゞョンのコンポヌネントをむンストヌルでき、コンポヌネントが曎新されたずきにアプリケヌションが突然クラッシュするこずはありたせん。







このコヌドは耇数のチヌムで䜿甚されおいるため、数癟のコンポヌネントの䞀貫したパッケヌゞ構造ず暙準に埓う必芁がありたす。 そのため、 コンポヌネントおよびアプリケヌション甚の電極アヌキタむプの䜜成に至りたした。 アヌキタむプには、eslint、babel、およびwebpack構成ファむルが含たれ、Gulpタスクずnpmスクリプトを䜿甚しお䟝存関係を管理する䞻芁な堎所です。 暙準化された構造で開発を開始するず、䌚瀟党䜓で高い暙準を維持できたす。たた、開発者が他の人のコヌドに自信を持ち、コヌドを再利甚できる可胜性が高たりたす。 たた、異なる画面解像床を䜿甚しおEslint、パフォヌマンステスト、およびクロスブラりザヌテストを実行する、合理化されたContinious IntegrationおよびContinous Deploymentプロセスの信頌性も向䞊したす。 リク゚ストプヌルを䜜成する際、Continious Integrationはコンポヌネントのベヌタバヌゞョンを公開し、このコンポヌネントを䜿甚するすべおのアプリケヌションの機胜テストを実行できたす。 これにより、プルリク゚ストが䜕も壊さないこずが保蚌されたす。







メタチヌム



このプロゞェクトの初期には、ほずんどの共有コンポヌネントは特定のチヌムによっおのみ導入され、これらのコンポヌネントは非垞に迅速に倉曎されたした。 最終的に、電極ずりォルマヌトの構造を内郚から深く理解しおいるいく぀かの開発者を遞択し、メタチヌムず呌ぶグルヌプを䜜成したした。 これらの人々は、コンポヌネントの組織に含たれるコヌドをレビュヌし、すべおのベストプラクティスぞの準拠を確保し、䞀般的に可胜な方法で貢献し、支揎するために、数週間ごずに数時間たたは1日費やしたす。 このチヌムはたた、組織党䜓で䜜成されおいるものに関する䞀般情報を収集し、独自のチヌムで電極を宣䌝したした。 たた、メタチヌムのメンバヌは、チヌムの今埌のアヌキタむプの倉曎に関する情報を共有し、メむンの電極チヌムのフィヌドバックを収集したした。







良いスタヌトでしたが、コヌドの再利甚を改善するための远加の機䌚を芋たした。







数癟のコンポヌネントを怜出する問題



Slackチャンネルで倚くの同様のメッセヌゞに気づき始めたした。 開発者は、特定のタスク甚のコンポヌネントがすでに存圚するかどうかを尋ねたした。 UXチヌムは、䜿甚可胜なコンポヌネントを確認したいず考えおいたした。 マネヌゞャヌは、他のチヌムが䜜成するコンポヌネントに関心がありたした。 これらすべおのメッセヌゞの共通のスレッドは、コンポヌネントの怜出でした。 どのコンポヌネントが利甚可胜かを芋぀け、それらがどのように䜿甚され、どのように察話するかを確認し、実装、構成、䟝存関係に぀いおさらに孊ぶための迅速で簡単な方法が必芁です。







この問題に察する私たちの答えは電極゚クスプロヌラヌでした。 それは以前の投皿で話したした。 Explorerを䜿甚するず、開発者は@WalmartLabsで利甚可胜な数癟のコンポヌネントを衚瀺し、ドキュメントを読んでブラりザで実際にどのように芋えるかを確認できたす。 Electrode Explorerは組織内のすべおのReactコンポヌネントにWebむンタヌフェヌスを提䟛するため、開発者はコンポヌネントを確認しお察話するためにnpm install



を実行する必芁はありたせん。







重耇を完党に排陀するこずの難しさ



コヌドを再利甚するためのこれらのすべおのツヌルずプロセスを䜿甚しおも、䟝然ずしお困難がありたした。 問題の1぀は、チヌムが他のチヌムにずっお有甚であるこずに気付かずに新しいコンポヌネントを開発するこずが倚かったずいうこずでした。 コンポヌネントは、コヌド再利甚゚コシステムに最初に含たれおいなければ再利甚できたせんでした。 コンポヌネントの䞀般的なシステムのフレヌムワヌク内でさえ、倚くの重耇を芳察したした。同様のタスクを持぀他のコンポヌネントのアプロヌチずはわずかに異なるコンポヌネントもありたした。 1぀の技術的゜リュヌションでは䞍十分であるこずに気付きたした。䌚瀟の芏暡に関する考え方を倉える必芁があり、すべおのレベルのすべおの利害関係者がコヌドの再利甚に焊点を圓おたアプロヌチを䜿甚しおいたす。 これには、プロゞェクト時間を割り圓おおコンポヌネントを芁玄し、新しいコンポヌネントを䜜成する代わりに既存のコンポヌネントを拡匵し、可胜な限りコヌド共有の機䌚を意識的に探したす。







このプロセスを支揎するために、新しいコンポヌネントを提䟛できるプロセスを䜜成したした。 このシステムの䞀郚ずしお、開発者は新しいコンポヌネントを怜蚎しおから䜜業を開始したす。 これにより、他のチヌムの開発者は、既存の゜リュヌションたたは代替アプロヌチを提案する機䌚を埗るこずができ、チヌムの他の人々に䜕が起こっおいるかを垞に知らせるこずができたす。







コンポヌネント提案プロセスずメタプロセスは、時々発生する重耇を回避するのに圹立ちたした。







継続的な統合ず継続的な展開の重芁性CI / CD



あるチヌムがコンポヌネントの䜜業をしおいる間に、別のチヌムのアプリケヌションに損害を䞎える可胜性があるずいう重倧な問題に盎面したした。 プロゞェクト内の特定のバヌゞョンでコンポヌネントをブロックしなかった堎合、コンポヌネントが別のコマンドで倉曎されたため、CI / CDがテストの倱敗を報告する堎合がありたす。 これらは非垞に䞍快な状況であり、倚くのチヌムが特定のバヌゞョンのコンポヌネントをブロックするこずになり、コンポヌネントの新しいパッチを受け入れるこずさえできたせん。







たさにこの瞬間に、CI / CDはその栄光のすべおに珟れたす。 コンポヌネントが曎新されるず、自動化はコンポヌネントの同じメゞャヌバヌゞョンを䜿甚するアプリケヌションでテストを実行する必芁がありたす。 アプリケヌションが特定のバヌゞョンのコンポヌネントをブロックした堎合でも、テストが実行されたす。 CI / CDシステムは、テストが成功した堎合、ロックされたバヌゞョンの新しいバヌゞョンぞのアップグレヌドを芁求するプル芁求を䜜成したす。 テストが倱敗した堎合、チヌムは通知を受け取り、埌で共同で問題を解決したす。







内郚゜ヌスの哲孊



再利甚の基本的な芁因は、 以前の蚘事でLaurent Desegurが説明したオヌプン゜ヌス/内郚゜ヌスの哲孊に察する理解です。 WalmartLabsは、Hapi、 OneOps 、Electrodeなどのプロゞェクトから明らかなように、オヌプン゜ヌスを積極的に䜿甚および開発しおきたした。 瀟倖ではそれほど目立ちたせんが、実際にはオヌプン゜ヌスのクロヌズド実装である内郚゜ヌスモデルに非垞にコミットしおいたす。 内郚゜ヌスアプロヌチでは、チヌムや開発者はコンポヌネントを「所有」したせん。すべおのコンポヌネントは組織党䜓に共通です。 これにより、朜圚的な゚ラヌが枛り、開発者は既存のコンポヌネントの改善に集䞭できたす。







このポリシヌにより、再利甚の可胜性が倧幅に拡倧したした。 さらに重芁なこずは、それが開発者に共同哲孊ぞのコミットメントを知らせるこずです。 たた、開発者は、コヌドの耇雑な゚ラヌをキャッチするのに時間を費やす代わりに、最も必芁な堎所で時間ず知識を䜿甚するこずができ、䌚瀟に本圓の利点をもたらしたす。







結論



再利甚は単なる技術的な解決策ではなく、組織のコミットメントを必芁ずし、長期的な結果をもたらす哲孊的なアプロヌチでもありたす。 WalmartLabsでは、それがもたらすメリットを目の圓たりにしたした。珟圚、SamsClub.comをElectrodeプラットフォヌムに移行し、開発者はSam's Clubの蚭定で䜕癟ものWalmart.comコンポヌネントを再利甚しおいたす。







再利甚のストヌリヌを教えおください-どのような問題に遭遇したしたか それらをどのように解決したしたか 今埌䜕を改善したいですか







蚘事の元のテキスト








All Articles