<

Micro Frontends を調べたすべて

Micro Frontends に関わる記事を 100 件以上読みました(参考記事に記載しています)。そこから得た Micro Frontends についてこの投稿に記録します。 また、調査メモについて、次のリポジトリに残しています。

https://github.com/silverbirder/think-micro-frontends

発端

https://www.thoughtworks.com/radar/techniques/micro-frontends

実績企業

  • Airbnb
  • Allegro
  • Amazon
  • Beamery
  • Bit.dev
  • BuzzFeed
  • CircleCI
  • DAZN
  • Elsevier
  • Entando
  • Facebook
  • Fiverr
  • Hello Fresh
  • IKEA
  • Klarna
  • Microsoft
  • Open Table
  • OpenMRS
  • Otto
  • Paypal
  • SAP
  • Sixt
  • Skyscanner
  • Smapiot
  • Spotify
  • Starbucks
  • Thalia
  • Upwork
  • Zalando
  • ZEISS

ProsCons

Pros

観点内容
独立性・任意のテクノロジーと任意のチームで開発可能
展開・特定の機能をエンドツーエンド(バック、フロント、デプロイ)で確実に実行可能
俊敏性・特定のドメインについて最高の知識を持つチーム間で作業を分散すると、リリースプロセスが確実にスピードアップして簡素化される。
・フロントエンドとリリースが小さいということは、リグレッションテストの表面がはるかに小さいことを意味する。リリースごとの変更は少なく、理論的にはテストに費やす時間を短縮できる。
・フロントエンドのアップグレード/変更にはコストが小さくなる

Cons

観点内容
独立性・独立できず、相互接続しているチームが存在しがち
・多くの機能で複数のマイクロフロントエンドにまたがる変更が必要になり、独立性や自律性が低下
・ライブラリを共有すること自体は問題ないが、不適切な分割によって作成された任意の境界を回避するための包括的な場所として使用すると、問題が発生する。
・コンポーネント間の通信の構築は、実装と維持が困難であるだけでなく、コンポーネントの独立性が取り除かれる
・横断的関心事への変更ですべてのマイクロフロントエンドを変更することは、独立性が低下する
展開・より大きな機能の部分的な実装が含まれているため、個別にリリースできない
・サイト全体の CI / CD プロセス
俊敏性・重複作業が発生する
・検出可能性が低下した結果、一部の標準コンポーネントを共有できず、個別のフロントエンド間で実装が重複してしまう。
・共有キャッシュがないと、各コンポーネントは独自のデータセットをプルダウンする必要があり、大量の重複呼び出しが発生する。
パフォーマンス・マイクロフロントエンドの実装が不適切な場合、パフォーマンスが低下する可能性がある。

統合パターン

https://bluesoft.com/micro-frontends-the-missing-piece-of-the-puzzle-in-feature-teams/

統合選択基準技術
サーバーサイド統合良好な読み込みパフォーマンスと検索エンジンのランキングがプロジェクトの優先事項であること・Podium
・Ara-Framework
・Tailor
・Micromono
・PuzzleJS
・namecheap/ilc
エッジサイド統合サーバーサイド統合と同じ・Varnish EDI
・Edge Worker

CDN
・ Akamai
・ Cloudfront
・ Fastly
・CloudFlare
・ Fly.io
クライアント統合さまざまなチームのユーザーインターフェイスを 1 つの画面に統合する必要があるインタラクティブなアプリケーションを構築すること・Ajax
・Iframe
・Web Components
・Luigi
・Single-Spa
・FrintJS
・Hinclude
・Mashroom
ビルド時統合他の統合が非常に複雑に思われる場合に、
小さなプロジェクト(3 チーム以下)にのみ使用すること
・ Bit.dev
・ Open Components
・ Piral

機能

コミュニケーション

https://developer.mozilla.org/ja/docs/Web/API/CustomEvent

https://github.com/postaljs/postal.js

データ共有

  • ストレージ
    • URL
    • Cookie
    • Local Storage/Session Storage

モジュール共有

  • webpack

https://webpack.js.org/concepts/module-federation/

https://webpack.js.org/configuration/externals/

https://webpack.js.org/plugins/dll-plugin/

ルーティング

Vaddin router

https://vaadin.com/router

キャッシュ

https://developer.mozilla.org/ja/docs/Web/API/Service_Worker_API

https://developer.mozilla.org/ja/docs/Web/API/IndexedDB_API

認証

  • JWT

https://jwt.io/

計測

  • Google Analytics
  • Navigation Timing API
  • Resource Timing API
  • High Resolution Time API
  • User Timing API
  • Frame Timing API
  • Server Timing API
  • Performance Observer

Real User Monitoring

  • SpeedCurve
  • Catchpoint
  • New Relic
  • Boomerang.js
  • Parfume.js
  • sitespeed.io

Synthetics Monitoring

  • Lighthouse
  • WebpageTest

Proxy

コンポジションプロキシ。テンプレートを組み合わせる。

https://github.com/tes/compoxure

アクセス履歴

https://developer.mozilla.org/ja/docs/Web/API/History_API

分割ポリシー

フロントエンドを分割する方針について

  • 水平分割
    • 画面内にある要素で分割
    • ビジネス上の機能
  • 垂直分割
    • 画面毎に分割

Web サイト ⇔Web アプリ

Microfrontends: An approach to building Scalable Web Apps
Microfrontends: An approach to building Scalable Web Apps

マイクロフロントエンドは、かなりのオーバーラップがあるバンドの中央部分の大部分に最も適しています。バンドの両極端に該当するプロジェクトにマイクロフロントエンドアーキテクチャを実装しようとすると、生産性に反するそうです。

リポジトリ

パターンProsCons技術
モノリポコードベース全体に簡単にアクセスできる。
(検出可能性が高い)
モノリポジトリは、特に大規模なチームで作業しているときに、
動作が遅くなる傾向があり、バージョン管理下のコミットとファイルの数が増加する。
・nx.dev
・lerna
マルチリポ・マルチリポジトリは、非常に大規模なプロジェクトと
それに取り組む非常に大規模なチームがある場合に最適。
マルチリポジトリ環境では、各マイクロアプリを
個別にビルドする必要がある。

他アーキテクチャ

アーキテクチャ名関係リンク
Modular MonolithDeconstructing the Monolith – Shopify Engineering
kgrzybek/modular-monolith-with-ddd
Enterprise Architecture (Clean Architecture)Building an Enterprise Application with Vue
soloschenko-grigoriy/vue-vuex-ts
Jam StackJam Stack
App ShellApp Shell モデル

書籍

https://www.manning.com/books/micro-frontends-in-action

参考記事

Tags

「マイクロフロントエンド」を読みました

2022-11-13

DAZN の Luca Mezzalira さんが書かれたマイクロフロントエンドを読みました。簡単な書籍レビューを残しておこうかなと思います。...

Micro Frontendsで組成するフラグメントをWeb Componentsで定義してModule Federationで共有する

2022-05-28

Micro Frontends(以降、MFE)で組成するフラグメントを Web Components で定義して Module Federation で共有する方法を、ざっくり紹介します。...

クライアントサイド(ES Module)でMicro Frontends

2021-01-16

2021年、あけましておめでとうございます。本年も宜しくおねがいします。最近、体重が増えてしまったため、有酸素運動を頑張っています。本記事は、昨年の冬あたりから検証していた クライアントサイド統合でのMicro Frontendsについて話そうと思います。検証したソースコードは、次のリポジトリにあります。...

[覚書] Micro Frontends

2020-11-19

Micro Frontends とは?皆さん、**Micro Fronends**(以下、MFE)をご存知でしょうか。説明をざっくりしますと、Microservicesの考え方をフロントエンドまで拡張した考え方です。Microservicesは、バックエンド側で適用される事例をよく耳にしますが、フロントエンドでの適用事例は、あまり聞いたことがありません。...

Cloudflare Workers (Edge Worker) で Micro Frontends

2020-11-15

今回、またMicro Frontendsの構築を試みようと思います。構築パターンの内、サーバーサイド統合パターン、特にエッジサイド統合を試しました。その内容を紹介します。サンプルコードは、下記に残しています。...

Zalando tailor で Micro Frontends with ( LitElement & etcetera)

2020-10-04

Zalando社が開発したTailorを使って、サンプルWebアプリをMicro Frontendsで構築してみました。Tailorはサーバーサイドで統合するアーキテクチャです。クライアントサイドは、Web Componentsで作られているLit Elementを使って統合しました。どういった内容か、ここに投稿しようと思います。...

Ara-Framework で Micro Frontends with SSR

2020-08-23

みなさん、こんにちは。silverbirder です。、Micro Frontends があります。今、Ara-Frameworkというフレームワークを使った Micro Frontends のアプローチ方法を学んでいます。...

Micro Frontends を学んだすべて

2020-05-04

Micro FrontendsというWebフロントエンドアーキテクチャがあります。このアーキテクチャを知るために、書籍を読み、簡単なサンプルWebアプリを開発しました。そこから学んだことをすべて議事録として残したいと思います。...

TikTokスクレイプ基盤をGCP上で構築してハマったこと

2021-08-28

TikTokへスクレイプするバッチをGCP上で構築しました。GCP構築のシステム設計話と、その構築時に、ハマったことを共有します。...

ブラウザの仕組みを学ぶ

2021-05-24

Webフロントエンジニアたるもの、ブラウザの仕組みに興味を持つのは自然の摂理です。本記事では、私がブラウザの仕組みを学んでいく過程を備忘録として残します。...

リモートワークになってから『気軽にすぐ聞く』ことが難しくなった

2021-03-10

リモートワークが普及しつつある今、オンラインでの仕事に慣れているエンジニアも多いのではないでしょうか。私も、そのエンジニアの一人であり、約1年はリモートワークしています。そんな中、久々に会社へ出社すると、気軽に話しかける楽さ を実感しました。この体験について、深堀りしたいと思います。...

20代後半エンジニアである私がこれから学ぶべきこと

2020-10-29

私は、現在26歳のWebエンジニアです。これまでの技術に対する学び方と、これからの技術に対する学び方について、少し考えたいと思っています。...

ZoomのMeetingを自動生成するGASライブラリ zoom-meeting-creator を作った

2020-06-06

みなさん、Zoom使っていますか? ZoomのMeetingを自動生成するGASライブラリを公開しましたので、そのきっかけと使い方について紹介しようと思います。...

アカウント画像一括更新ツールを作ったので、紹介と学びについて

2020-06-04

GoogleやGithubなど、様々なサービスのプロフィール情報(画像, etc)を一括更新するツール、puppeteer-account-manager を開発しました。開発の目的や、開発から得た知見を紹介します。...

Micro Frontends を学んだすべて

2020-05-04

Micro FrontendsというWebフロントエンドアーキテクチャがあります。このアーキテクチャを知るために、書籍を読み、簡単なサンプルWebアプリを開発しました。そこから学んだことをすべて議事録として残したいと思います。...

TwitterにあるLinkを収集するツール Cotlin で、世界中のプレゼンテーション資料を知ろう

2020-03-15

Twitterに投稿されているLinkを収集するツール Cotlin を作りました。Collect links in tweet から、Cotlinという名前にしました。Androidのアレに似ています。...

Google Apps Script で FetchAllとRedirctURL の組み合わせは悪い

2020-02-24

Google Apps Script (以下、GAS)で、困ったことがあったので備忘録として残しておこうと思います。...

GMailをGCalendarに登録するサービス rMinc を作ってみた

2020-02-17

ターゲットユーザー * GMailとGCalendarを使っている人 メールを開くって面倒じゃないですか? 例えば、次のようなメールを受信していたとします。* アマゾンで商品を購入した際、お届け予定日が記載されたメール * 映画館(TOHOシネマ)でネット予約した際、上映日が記載されたメール * ホテルをネット予約した際、宿泊日が記載されたメール...

1コマ漫画検索サービスTiqav2 (Algolia + Cloudinary + Google Cloud Vision API) 作ってみた

2020-02-08

画像で会話って楽しい 皆さん、チャットツールでコミュニケーションするとき、絵文字や画像って使ってますか?僕はよく使ってます。人とコミュニケーションするのに、文字だけだと堅苦しいイメージですよね。例えば、『OKです、それで先に進めて下さい。』というフレーズだけだと、相手がどのような感情なのか読み取りにくいです。...

フィリピンに行ってきたら、日本は良いなって思うようになった

2019-10-27

2019年10月11日~2019年10月15日の5日間、フィリピンに行ってきました。日本人男性(前職の先輩:Kikuchi)とフィリピン人女性が結婚するため、その結婚式旅行に同伴させて頂きました。Kikuchiさんとは、私が新人の頃に大変お世話になった方なので、お祝いの気持ちが込み上げてきました。:)...

技術書典7で初執筆した経験をすべて公開

2019-09-06

技術書典7で初執筆しました。記事の目的 * 執筆でどういったことをしたのかの備忘録 * 執筆を考えている人の助けになりたい実際に販売する本は↓のものです。...