Micro Frontendsで築いた
共通基盤と運用の試行錯誤
Building a Shared Platform
with Micro Frontends:
Operational Learnings
金子 優斗 (@kyntk_1128)
Yuto Kaneko
Slide 2
Slide 2 text
Survey
● 「マイクロフロントエンド」って聞いたことあるかた?
Have you heard of “Micro Frontends” before?
● マイクロフロントエンドを採用したことがあるかた?
Have you ever used Micro Frontends?
Slide 3
Slide 3 text
→ Solution: Micro Frontends (MFE)
巨大化したフロントエンドをどう分割するか
How do we break down a growing frontend?
出典: Micro Frontends - extending the microservice idea to frontend development
Slide 4
Slide 4 text
金子 優斗 (@kyntk_1128)
Yuto Kaneko
● 2024/05 Money Forward Join
● Nagoya Branch
● Running
● Coffee ☕
● 最近の目標 / My recent goal
「懸垂ができるようになりたい」
I want to be able to do pull-ups.
Slide 5
Slide 5 text
Agenda
❏ マネーフォワード クラウドについて
❏ マイクロフロントエンドとは
❏ 導入の目的
❏ MFE のデリバリー方法
❏ 運用で見えてきた課題と学び
❏ 未解決の課題と今後
❏ About Money Forward Cloud
❏ What Micro Frontends Are
❏ Why We Adopted Micro Frontends
❏ How We Deliver Micro Frontends
❏ Challenges and Learnings
❏ Unresolved Challenges and What’s
Next
Slide 6
Slide 6 text
Agenda
❏ マネーフォワード クラウドについて
❏ マイクロフロントエンドとは
❏ 導入の目的
❏ MFE のデリバリー方法
❏ 運用で見えてきた課題と学び
❏ 未解決の課題と今後
❏ About Money Forward Cloud
❏ What Micro Frontends Are
❏ Why We Adopted Micro Frontends
❏ How We Deliver Micro Frontends
❏ Challenges and Learnings
❏ Unresolved Challenges and What’s
Next
Slide 7
Slide 7 text
マネーフォワード クラウドとは
出典元 : 株式会社マネーフォワード 会社紹介資料
法人向け
バックオフィス向け
SaaS
ファイナンスサービス
個人向け 金融機関等向け
PFM(家計簿・資産管理)サービス Fintech推進・DX支援
金融機関・特定サービス向け
マネーフォワード
デジタル通帳・かんたん通帳
Money Forward Cloud is a SaaS for businesses
申請内容入力
Enter application details
申請、承認のステップ
Enter application details
申請内容・承認者確認、提出
Review details and approvers,
then submit
承認
Approval
Slide 10
Slide 10 text
Agenda
❏ マネーフォワード クラウドについて
❏ マイクロフロントエンドとは
❏ 導入の目的
❏ MFE のデリバリー方法
❏ 運用で見えてきた課題と学び
❏ 未解決の課題と今後
❏ About Money Forward Cloud
❏ What Micro Frontends Are
❏ Why We Adopted Micro Frontends
❏ How We Deliver Micro Frontends
❏ Challenges and Learnings
❏ Unresolved Challenges and What’s
Next
Slide 11
Slide 11 text
巨大化したフロントエンドをどう分割するか
How can we split a growing / monolithic frontend?
出典: Micro Frontends - extending the microservice idea to frontend development
Slide 12
Slide 12 text
MFE:マイクロサービスの思想をフロントエンドに拡張
Extending the microservices mindset to the frontend
出典: Micro Frontends - extending the microservice idea to frontend development
A
B
C
TeamA
TeamB
TeamC
複数のチームで開発し、統合
Slide 13
Slide 13 text
❏ About Money Forward Cloud
❏ What Micro Frontends Are
❏ Why We Adopted Micro Frontends
❏ How We Deliver Micro Frontends
❏ Challenges and Learnings
❏ Unresolved Challenges and What’s
Next
Agenda
❏ マネーフォワード クラウドについて
❏ マイクロフロントエンドとは
❏ 導入の目的
❏ MFE のデリバリー方法
❏ 運用で見えてきた課題と学び
❏ 未解決の課題と今後
Slide 14
Slide 14 text
自社が抱えていた問題:似た機能が個別実装されていた
Our internal issue: similar features were implemented
separately across products
Product A
⚙
承認ワークフロー
A
Product B
⚙
承認ワークフロー
B
TeamA
TeamB
データの二重管理、UI/UXの不統一などの問題
Duplicated data management and inconsistent UI/UX
Slide 15
Slide 15 text
● プロダクト側での開発・保守の負荷を大幅に軽減
Big reduction in product-side workload
● 切り出されたチームが自律的に改善
Dedicated team improves autonomously
マイクロサービスとして切り出し、UI も含めて提供
Extracted as a microservice and provided with its UI as well
Team MFE
⚙
承認ワークフロー
基盤
⚙
承認ワークフロー
基盤
⚙
承認ワークフロー
基盤
Product A Product B
Slide 16
Slide 16 text
なぜ UI も提供するのか / Why provide the UI, too?
1. 承認ワークフローの UI は非常に複雑なため / UI is complex
2. 全プロダクトで同じ UI を使い、一貫したUXを実現するため / Consistent UX across
products
3. 価値を届けるスピードを上げるため / Faster delivery of value
Slide 17
Slide 17 text
複数チームが独立して開発・運用しながら
共通機能や UI を共有したい
Independent teams need to share
features/UI
どのようなときにMFEを導入するか / When to use MFE
UIが複雑で、各プロダクトが個別に実装す
る負荷が高い (※後で補足)
UI is complex and costly to build per
product
A
B
C
TeamA
TeamB
TeamC
⚙
承認ワークフロー
A
⚙
承認ワークフロー
B
Slide 18
Slide 18 text
❏ About Money Forward Cloud
❏ What Micro Frontends Are
❏ Why We Adopted Micro Frontends
❏ How We Deliver Micro Frontends
❏ Challenges and Learnings
❏ Unresolved Challenges and What’s
Next
Agenda
❏ マネーフォワード クラウドについて
❏ マイクロフロントエンドとは
❏ 導入の目的
❏ MFE のデリバリー方法
❏ 運用で見えてきた課題と学び
❏ 未解決の課題と今後
Slide 19
Slide 19 text
垂直統合 / Vertical Composition
垂直統合 vs 水平統合
水平統合 / Horizontal Composition
Team A Team B
https://xxx/feat-a https://xxx/feat-b
Team A Team A
https://xxx/feat-a https://xxx/feat-b
Team C
Team B
Team C
Team B
❏ About Money Forward Cloud
❏ What Micro Frontends Are
❏ Why We Adopted Micro Frontends
❏ How We Deliver Micro Frontends
❏ Challenges and Learnings
❏ Unresolved Challenges and What’s
Next
Agenda
❏ マネーフォワード クラウドについて
❏ マイクロフロントエンドとは
❏ 導入の目的
❏ MFE のデリバリー方法
❏ 運用で見えてきた課題と学び
❏ 未解決の課題と今後
Slide 24
Slide 24 text
✅ プロダクト側での開発負荷を大幅に軽減する
Big reduction in product workload
✅ 小さいチームで自律的に高速に価値を届ける
Small teams ship value fast
✅ 1ページ内でシームレスな体験を実現する
Seamless in-page experience
✅ プロダクトをまたいで一貫したUXを実現する
Seamless in-page experience
当初の目的はすべて達成 / We achieved all initial goals
Slide 25
Slide 25 text
⚠ 拡張性と組み込みコストのトレードオフ
Trade-off: flexibility vs integration cost
⚠ 疎結合設計とその限界
Limits of loose coupling
⚠ 認証・認可のアーキテクチャの課題と、変更
Auth architecture issues & changes
⚠ UIの一貫性
Consistent UI within the same page
見えてきた課題 / Challenges uncovered
Slide 26
Slide 26 text
コンポーネントをホストプロダクト側で拡張をしたい要望
Requests to extend components on the host side
課題1. UI をどこまで共通化すべきか / How far should UI be shared?
あるステップに
設定追加したい
独自の条件で
承認者を選びたい
カラムを
追加したい
ラベルを変えたい
承認前に
コールバックを
挟みたい
Slide 27
Slide 27 text
MFEが適している
範囲
Where MFE is
suitable
拡張の必要性が低く、実装難易度が高いもの
Low need for extension, high implementation cost
プロダクト独自の拡張性
Product-specific extensibility
実装難易度
Implementation
difficulty
プロダクト独自の拡張が増えると
保守が大変
実装難易度が低いものは
提供価値が高くない
Slide 28
Slide 28 text
⚠ 拡張性と組み込みコストのトレードオフ
Trade-off: flexibility vs integration cost
⚠ 疎結合設計とその限界
Limits of loose coupling
⚠ 認証・認可のアーキテクチャの課題と、変更
Auth architecture issues & changes
⚠ UIの一貫性
Consistent UI within the same page
見えてきた課題 / Challenges uncovered
Slide 29
Slide 29 text
疎結合設計: Custom Eventを用いた伝達
Loose coupling: communication via Custom Events
Host product
MFE component MFE component
Props
1
2
Slide 30
Slide 30 text
不採用の案: Callbackを用いたコミュニケーション
Rejected approach: communication via callbacks
Host product
MFE component MFE component
Callback
Call
Callback
Call
Callback関数を渡す方式だと、
拡張時にホスト側の修正が必要になる
Callbacks require host changes whenever extensions are needed
Slide 31
Slide 31 text
Event Bus Pattern
EventをPublish,
Subscribe
することで、
お互いを知らずに情
報をやりとり
MFE component MFE component
Event
Bus
By publishing /
subscribing
events, they can
exchange data
without knowing
each other
Slide 32
Slide 32 text
CustomEvent設計の課題 1: 描画タイミングの問題
Send State
MFE component MFE component
Route Component
Submit Button Component
❌
描画タイミングによっては、
Stateの同期に失敗する
Depending on render timing, state sync
can fail
Slide 33
Slide 33 text
CustomEvent設計の課題 1: 描画タイミングの問題
Stateの再送
レンダリング
完了通知
レンダリング完了のイベントを送信
Stateを再送するようにした
Send a “rendered” event and resend state
after that
MFE component MFE component
描画タイミングによっては、
Stateの同期に失敗する
Depending on render timing, state sync
can fail
Slide 34
Slide 34 text
コールバック関数も受け取れるように
Added support for callbacks
CustomEvent設計の課題 2: イベント駆動の限界
特定のイベント前に、
同期的に処理を挟む必要が出てきた
Needed synchronous processing before
certain events
承認前に
バリデーションを
挟みたい
Slide 35
Slide 35 text
⚠ 拡張性と組み込みコストのトレードオフ
Trade-off: flexibility vs integration cost
⚠ 疎結合設計とその限界
Limits of loose coupling
⚠ 認証・認可のアーキテクチャの課題と、変更
Auth architecture issues & changes
⚠ UIの一貫性
Consistent UI within the same page
見えてきた課題 / Challenges uncovered
Slide 36
Slide 36 text
ログインはホストプロダクトでのみ行う / Login happens only on the host product
ユーザーはログイン状態で
MFEを利用する / Users access the MFE while already logged in
課題3. 認証・認可のアーキテクチャの課題と、変更
Auth architecture issues & changes
要件に合わせて適切なアーキテクチャを設計する必要がある
Architecture must fit the requirements
認証・認可のアーキテクチャv2
Auth architecture v2
Host product Frontend
MFE Frontend
Host product Backend
Rendering
API Request (Cross Origin)
MFE Backend
Auth request Response with permissions
Slide 40
Slide 40 text
見えてきた課題 / Challenges uncovered
⚠ 拡張性と組み込みコストのトレードオフ
Trade-off: flexibility vs integration cost
⚠ 疎結合設計とその限界
Limits of loose coupling
⚠ 認証・認可のアーキテクチャの課題と、変更
Auth architecture issues & changes
⚠ UIの一貫性
Consistent UI within the same page
Slide 41
Slide 41 text
UI をアップデートするのは各チーム依存のため
ホストプロダクトと MFE の UI の不一致が発生
Different team update timings cause UI mismatches
between the host and the MFE on the same page.
課題4. UIの一貫性 / Consistent UI within the same page
MFE Team
Button
Product Team
Button
Design system v1 Design system v2
🚀
🚀
Slide 42
Slide 42 text
コンポーネントライブラリの活用推進
Promoting use of the component library
MFE Team
Product Team
Button
Design system v2
Component Library
Team
Build-time Composition
Build-time Composition
🚀
🚀
コンポーネントライブラリを使うことで最新のデザインシステムに追従
Using the component library keeps us aligned with the latest design system
Slide 43
Slide 43 text
Agenda
❏ マネーフォワード クラウドについて
❏ マイクロフロントエンドとは
❏ 導入の目的
❏ MFE のデリバリー方法
❏ 運用で見えてきた課題と学び
❏ 未解決の課題と今後
❏ About Money Forward Cloud
❏ What Micro Frontends Are
❏ Why We Adopted Micro Frontends
❏ How We Deliver Micro Frontends
❏ Challenges and Learnings
❏ Unresolved Challenges and What’s
Next
Slide 44
Slide 44 text
書類提出までのステップで新たにDialog
が追加された
A new dialog was added in the
submission flow
● プロダクトに組み込んでのE2Eが必要
E2E must run on each host product
● プロダクトの変更によりE2Eがテストが落ちることもあり、修正が大変
Host changes often break E2E, making fixes costly
未解決の課題1: E2E テストのメンテナンスの課題
Unresolved Issue 1: E2E test maintenance
Slide 45
Slide 45 text
未解決の課題2: アセットサイズの問題
Unresolved Issue 2: Asset size growth
● Web Componentsはホスト、MFEで異なるライブラリを使える
Host and MFE can use different libraries
● ブラウザにダウンロードするアセットサイズが大きくなる
Larger asset downloads
● 十分にパフォーマンスの監視もできていない
Performance monitoring is still limited
v19.2.0 v18.3.1
Slide 46
Slide 46 text
● 対応がプロダクトごとに異なり、MFEと連携ができていない
Different i18n approaches per product, not aligned with MFE
● 仕組みの標準化に取り組んでいる
Working on standardising the approach
未解決の課題3: i18n の不統一
Unresolved Issue 3: Inconsistent i18n
English
日本語
Slide 47
Slide 47 text
● 共通ライブラリの提供
Providing shared libraries
● 実装ガイドラインの策定
Creating implementation guidelines
MFEを実装するための仕組みを整えて、活用を促進
Improving the foundation to make MFE easier to adopt
今取り組んでいること: MFE の標準化
Current Focus: Standardizing MFE