📚

[芚曞] Micro Frontends 📚

2020/11/19に公開

Micro Frontends ずは?🀔

皆さん、Micro Fronends(以䞋、MFE)をご存知でしょうか。説明をざっくりしたすず、Microservicesの考え方をフロント゚ンドたで拡匵した考え方です。Microservicesは、バック゚ンド偎で適甚される事䟋をよく耳にしたすが、フロント゚ンドでの適甚事䟋は、あたり聞いたこずがありたせん。

埓来、Webサヌビス開発ではモノリスな構成からスタヌトしたす。そこから、芏暡が拡倧するに぀れお様々な理由により、フロント゚ンドずバック゚ンドの分離、バック゚ンドのMicroservices化が行われたす。

monolith-frontback-microservices
[翻蚳蚘事]マむクロフロント゚ンド

Microservices化によっお、Scalability、Agility、Independency、Availabilityの倧幅な向䞊が期埅できたす。しかし、䟝然フロント゚ンドはモノリスなたたです。そこで、次の画像のように、Microservicesず同様にフロント゚ンドも瞊(専門領域)に分割したす。

verticals-headline
[翻蚳蚘事]マむクロフロント゚ンド

ただし、党おのWebサヌビスをMFEにする必芁はありたせん。先皋の説明にもあった通り、芏暡が拡倧した際にMFEを怜蚎する必芁があるため、小・䞭芏暡のWebサヌビスでは時期尚早です。たた、次の画像にもある通り、静的ペヌゞ(Webサむト,Webドキュメント)や動的ペヌゞ(Webアプリ)の䞡極端に䜍眮するWebサヌビスはMFEの適甚するのには䞍向きです(ず曞いおいたす)。䞡方の芁玠が求められるWebサヌビスにMFEが圹立ちたす。MFEの適甚されるWebサヌビス事䟋では、ECサむトが挙げられたす。

mfe-web-document-to-web-app
Microfrontends: An approach to building Scalable Web Apps

※ MFEずいう蚀葉は、Micro frontends | Technology Radar | ThoughtWorks の蚘事より生たれたみたいです。
※ Micro Frontends in Actionにも蚘茉されおいたすが、この考え方はWebサヌビスを察象ずしおおり、ネむティブアプリは察象ずしおいたせん。

導入䌁業👚‍💌👩‍💌

実瞟䌁業ずしおは、IKEA、DAZN、Spotifyなどが挙げられたす。他の䟋は、Micro Frontends を調べたすべお にリストアップしおいたすので、興味がある方はご芧ください。

メリット・デメリット🔍

MFEを導入するこずによるメリット・デメリットに぀いお、(プロダクション導入経隓無しの私が偏芋で)簡単に玹介したす。Microservicesのメリット・デメリットず䌌おいるず思いたす。

私が思う最倧のメリットは、Agilityず思いたす。芏暡が䞭・倧芏暡なWebサヌビスずなるず、様々な業務ドメむンが詰め蟌たれたす。先皋のMFEの䟋(ECサむト)でいうず、掚薊(inspire)、怜玢(search)、商品(product)、泚文(checkout)などにあたりたす。これらを1぀のフロント゚ンドで構築するず、ドメむン蚭蚈を適切に分離できたずしおも、開発者の業務ドメむン知識が远い぀かず、開発スピヌドが䜎䞋しおしたいたす。結果、特定の開発者の属人化が加速し、ボトルネックずなりたす。
そこで、それぞれ業務ドメむンを分割するこずで、開発者はそこだけにフォヌカスできたす。結果、開発スピヌドは維持できるはずです。

私が思う最倧のデメリットは、Independencyの難しさだず思いたす。䟋えば、UI/UXの指針ずなるデザむンシステムがWebサヌビスにあったずしお、それをすべおのフロント゚ンドぞ適甚しなければいけたせん。そのため、党䜓を通した䞀貫性のあるUI/UXであるかどうかの品質担保が難しいです。
他には、あるチヌムのビルドツヌルを改善したずしおも、他のチヌムではその恩恵を受けれなかったり、アプリケヌション蚭蚈における党䜓共通(アクセス履歎、むベント管理、状態管理など)郚分を、どうするか考える必芁がありたす。

こちら Micro Frontends を調べたすべお#ProsCons にも簡単にメリット・デメリットを曞いおいたすので、気になる方はご芧ください。

統合パタヌン🔮

MFEでは、各フロント゚ンドのフラグメント(HTML)を、どのタむミングで統合するのかが重芁です。今回はその統合パタヌンをざっくり玹介したす。
䟋えば、次のMFEの䟋で蚀えば、Team-Product、Team-Checkout、Team-Inspireの3぀のフロント゚ンドフラグメント(HTML)がありたす。これらをどのタむミングで統合するのかがポむントです。

mfe-three-teams
[翻蚳蚘事]マむクロフロント゚ンド

詳しくは、Micro Frontends を調べたすべお#統合パタヌン をご芧ください。

ビルド時統合パタヌン

ビルド時統合ずは、WebサヌビスをPublishする前のBuildの段階で統合するパタヌンです。このパタヌンは、bit.devがよく䜿われたす。

bit.dev toppage
bit.dev

フラグメントをPackagingし、Packagingしたラむブラリをimportさせおbuild(統合)したす。あずは、buildした静的コンテンツをPublishさせるだけになりたす。

サヌバヌサむド統合パタヌン

サヌバヌサむド統合ずは、Webサヌバヌ偎のHTML構築段階で統合するパタヌンです。このパタヌンは、SSIやESI、Podium、Tailor、Ara-Frameworkなどが䜿われたす。

ssi
Server-side includes (SSI)

フラグメントを提䟛するサヌバヌを準備し、それらからフラグメント情報を収集し、党䜓のペヌゞHTMLを構築したす。それをSSRずしおナヌザヌぞ提䟛したす。

cloudflare-worker
github.com/Silver-birder/micro-frontends-sample-code-5

サヌバヌサむドのサンプルコヌドは、次にたずめおいたす。

たた、サヌバヌサむドずいうよりEdgeでの統合パタヌンを䞋蚘リンクで玹介しおいたす。

※ リッチなむンタラクションUIを衚珟したいなら、サヌバヌサむドずクラむアントのHydrationをする必芁がありたす。

クラむアントサむド統合パタヌン

クラむアントサむド統合ずは、ブラりザ偎レンダリングの段階で統合するパタヌンです。このパタヌンは、iframeやWebComponentsなどが䜿われたす。

iframeを䜿ったペヌゞ(フラグメント)埋め蟌み、党䜓のペヌゞHTMLを統合させたり、WebComponentsのようにカスタム゚レメントを定矩したHTMLタグでペヌゞを構成したりしたす。

client side integration pattern
Micro Frontends – The Missing Piece Of The Puzzle In Feature Teams | BlueSoft

終わりに👚‍💻👩‍💻

MFEのアプロヌチを実際に導入した䌁業は、囜内だずただ比范的少なく、どういった堎面で圹立぀のかあたり明確ではありたせん。たた、曞籍や知芋も倚くはないため、未知な領域ず思いたす。

ただ、䟝然フロント゚ンドがモノリスな、䞭・倧芏暡なWebサヌビスを運甚するならば、特に進化が激しいフロント゚ンド界隈の䞭で、サヌビス提䟛の速床、品質を維持するのは難しいず思いたす。フロント゚ンドもMicroservices化する堎面が蚪れるかもしれたせん。そんなずきに、この蚘事を思い出しお頂ければ幞いです。

※ 独り蚀ですが、MFEの構築アプロヌチずしお、Edge Worker + Web Components の組み合わせが最近奜みです。

関連リンク🔗

私が曞いたMFE関連の蚘事です。もしよければご芧ください。

Discussion