Slide 1

Slide 1 text

G I N Z A . J S # 7 2 0 1 9 / 1 2 / 0 9 Hiroaki KARASAWA

Slide 2

Slide 2 text

⾃⼰紹介 HiroakiKARASAWA

Slide 3

Slide 3 text

今⽇のトピック マイクロフロントエンド What are Micro Frontends? The term Micro Frontends first came up in ThoughtWorks Technology Radar at the end of 2016. It extends the concepts of micro services to the frontend world. The current trend is to build a feature-rich and powerful browser application, aka single page app, which sits on top of a micro service architecture. Over time the frontend layer, often developed by a separate team, grows and gets more difficult to maintain. That’s what we call a Frontend Monolith. Michael Geers - https://micro-frontends.org/

Slide 4

Slide 4 text

まずはマイクロフロントエンドについて ⼀つのページの異なる部分を全く異なるアプリケーションとして開発しよう ←TeamA ←TeamB TeamC→ 何らかのWebサイト

Slide 5

Slide 5 text

まずはマイクロフロントエンドについて モチベーションはバックエンドにおけるマイクロサービスとだいたい⼀緒 サービス単位のチーム構成で意思決定速度の向上 デプロイの独⽴化 技術選択の⾃由化 他いろいろ

Slide 6

Slide 6 text

事例紹介 Spotify が有名 某フリマアプリでは… Webの取引画⾯ アプリの取引画⾯ (実はWebView) アプリの取引画⾯をWeb に組み込む⽅法がないか模索中 現状、様々な取引タイプでWeb の開発が間に合ってない ※ 「この問題を解決するための⼀つの⼿段としてマイクロフロントエンドを検討している」というだけ!

Slide 7

Slide 7 text

マイクロフロントエンドの⼿法 統合の仕⽅はいろいろ Run-time か Build-time か Server-side か Client-side か iframe か WebComponents か いろいろあるが基本は " 統合層" と " コンポーネント" 2 Component3 Component1 Integrationlayer

Slide 8

Slide 8 text

Tailor 今⽇紹介したいやつ

Slide 9

Slide 9 text

Tailor is a layout service 統合層において賢いことをしてくれる 各コンポーネントは個別にサーバーを⽴てて何かをサーブするだけでいい 統合層は iframe の使い⽅に近い Server1 TailorServer リクエスト Server2 Server3

Slide 10

Slide 10 text

コード例(Tailor サーバー) ←テンプレートのパスを指定 ←リクエストの処理を丸投げ

Slide 11

Slide 11 text

コード例(テンプレート)

Slide 12

Slide 12 text

各サービスの動き⽅ 各サーバーでは HTML を返しつつ JS を HTTP ヘッダーの Link で指定している JS では ReactDOM.render で各エントリーポイント(
など)に React コンポーネントをマウントしている ReactDOM.render を呼びたいだけなら script タグで JS を読み込めば良いだけでは? はい… ReactDOM.render(

Slide 13

Slide 13 text

script で JS ファイルを指定しても動く

Slide 14

Slide 14 text

もちろん Tailor を使ったほうが良いことがある HTML はバックエンドで組み⽴てられるので初期レンダリングが速い fragment タグに attribute を指定することで細かい制御ができる

Slide 15

Slide 15 text

fragment に指定できる attribute primary - 対応する fragment のステータスコードをページ⾃体のステータスコードに async - fragment の実⾏を遅延する(初期描画に不要な要素に指定してブロッカーにな ることを防ぐ) timeout - 指定された時間の後に結果を取得できない時描画しない fallback-src - src のリソースを取得できないときに代わりに使⽤される 他にも、ローディング系イベントにフックしてパフォーマンス測定ができたり

Slide 16

Slide 16 text

Project Mosaic Tailor をはじめとしたマイクロフロントエンドのための OSS 群 Skipper - マイクロフロントエンドのためのすごい速いリバースプロキシ Innkeeper - Skipper のルーティングを管理するためのツール 他 - https://www.mosaic9.org/

Slide 17

Slide 17 text

補⾜ コンポーネント同⼠のコミュニケーションはどうやる? 特にサポートはない CustomEvent を使ったり 共有 Redux ストアを参照したりできそう 認証はどこでやる? Tailor が動いてるサーバーに最初にアクセスされるのでそこで出来そう 実験で使ってみた程度なので他にも考えることあるかも(予防線)

Slide 18

Slide 18 text

FURTHER READING Micro Frontends の理論と実践
 - 価値提供を⾼速化する真のマイクロサービスのあり⽅- https://speakerdeck.com/nobuhikosawai/the-theory-and-practice-of-micro-frontends フロントエンドエンジニアは Micro Frontends の夢を⾒るか https://tech.mercari.com/entry/2018/12/06/162827 Micro Frontends https://martinfowler.com/articles/micro-frontends.html Tailor made Micro Frontends https://craftsmen.nl/tailor-made-micro-frontends/