Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ReatcにおけるMRAH設計のススメ

Avatar for Hayashibara Yuto Hayashibara Yuto
June 20, 2025
46

 ReatcにおけるMRAH設計のススメ

Reactアプリの初回表示が遅い、JSが重い、タップがカクつく——そんな課題を解決するのが「MRAH(Modular Rendering and Adaptive Hydration)」という設計アーキテクチャです。

このLTでは、MRAHの基本思想から具体的なReactでの実装パターン(onVisible / onInteraction / onIdle)まで、Core Web Vitalsの改善とUX向上を両立させるための最新手法を紹介します。

Next.jsやReact 19環境で役立つ知見を5分に凝縮。Hydrate EverythingからHydrate Wiselyへの転換を、一緒に体感してください。

---
Slow initial display, heavy JS, and choppy taps in React applications - the “Modular Rendering and Adaptive Hydration (MRAH)” design architecture is the solution to such problems.

In this LT, we will introduce the latest methods to both improve Core Web Vitals and UX, from the basic philosophy of MRAH to specific React implementation patterns (onVisible / onInteraction / onIdle).

We hope you will join us to experience the shift from “Hydrate Everything” to “Hydrate Wisely”.

#React #Nextjs #SSR

Avatar for Hayashibara Yuto

Hayashibara Yuto

June 20, 2025
Tweet

Transcript

  1.  Introductio " Outline - What’s MRAHÆ & Why MRAHÆ

    Ä Let’s Code  When we useÆ Á Conclution MRAH Design in React| CONTENTS | Ahoxa 2
  2. MRAH Design in React | About me | Ahoxa 3

    林原優仁 Hayashibara Yuto ‘25年3月 大阪大学経済学部卒業 ‘25年6月 本業+個人で活動 ƒ React, ReactNativ‰ ƒ Hont ƒ Gt ƒ Blende‡ ƒ Unity n 週4ジム(行ってた— n 猫が世界を救う ‘24年8月 株式会社HRBrain 入社 経歴 趣味・スタック @4h0xa
  3. What’s MRAH MRAH Design in React | What’s MRAH |

    Ahoxa 4 MRAH
 M ... Moduler R ... Rendering and A ... Adaptive H ... Hydration
  4. MRAH Design in React | What’s MRAH | Ahoxa 5

    Review: Hydration 具体的な流れ• k” サーバーでHTMLを先に生成してブラウザに送’ u” ブラウザでReactのJSバンドルが読み込まれ’ c” ReactがそのHTMLと「自分が描画すべき内容(仮想DOM)」を突き合わせ’ D” 差がなければOK → そのまま再利I 9” 差があると「Hydrationエラー」が発生 SSRされたHTMLを、クライアント側でReactが「再活性化(水やり)」して、 動的なUIに変換する処理のこと。 Hydration
  5. Why MRAH MRAH Design in React | Wht MRAH |

    Ahoxa 6 React SSRの課題 全部Hydrationは非効‚ – 通常のReact SSR:ページ全体を再Hydrateするため、JSバンドルが肥大化 モバイルUX悪化の要€ – JS読み込み&初期化に時間がかかT – スクロール・タップが重くなる(INPスコアが悪化) LCP・INPなどの Web Vitals に悪影{ – 特にINP(入力遅延)はReact 18〜19の評価指標として重視
  6. Let’s Code. MRAH Design in React | Let’s Code |

    Ahoxa 7 MRAHはあくまで思想 † コンポーネントごとに遅延処理をさせc † SSR済みHTMLを活用すc † Hydrationを遅延 or 事前に分割する
  7. Intersection Observerで、表示された らHydration開始 表示時に Hydration(onVisible) MRAH Design in React |

    Let’s Code | Ahoxa 8 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import from import from const import export const const return div p p null div { useInView } ; { lazy, Suspense } ; LazyReview (() ( )); () { { ref, inView } ({ triggerOnce }); ( < ref={ref}> <Suspense fallback={< >Loading...</ >} > {inView <LazyReview /> } </Suspense> </ > ); }; "react- intersection-observer" "react" "./ Review" = => = => = : ? : lazy ReviewWrapper useInView true
  8. クリック・フォーカスなど、ユーザー操 作時にHydrate 表示時に Hydration(onInteraction) MRAH Design in React | Let’s

    Code | Ahoxa 9 1 2 3 4 5 6 7 8 9 10 11 12 13 14 const import const const return p p button button LazyForm (() ( )); () { [clicked, setClicked] ( ); clicked ( <Suspense fallback={< >Loading form...</ >}> <LazyForm /> </Suspense> ) ( < onClick={() ( )} >問い合わせ</ > ); }; = => = => = ? : => lazy LazyInteractiveForm useState setClicked "./ Form" false true
  9. 負荷が落ち着いてからゆっくりHydrate ブラウザがアイドル状態のとき にHydration(onIdle) MRAH Design in React | Let’s Code

    | Ahoxa 10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 import from const import const const if in else return null { useEffect, useState, lazy, Suspense } ; LazyWidget (() ( )); () { [ready, setReady] ( ); (() { ( window) { (() ( )); } { (() ( ), ); } }, []); ( <Suspense fallback={ }> {ready <LazyWidget />} </Suspense> ); }; "react" "./ Widget" 'requestIdleCallback' = => = => = => => => && lazy IdleHydrateWidget useState useEffect requestIdleCallback setReady setTimeout setReady false true true 1000
  10. When we use? MRAH Design in React | Let’s Code

    | Ahoxa 11 “Adaptive Hydration”
 であることを忘れない Hero 即SSR + 即Hydrate 商品カード Intersection Observerで遅延Hydrate フォーム クリック時にHydrate Footer 静的要素のみ(Hydration不要)
  11. MRAH Design in React | Conclusion | Ahoxa 12 

    Conclusion ReactアプリのHydrationは、全部やるものではなく、 選ぶものへ。SSRは義務ではなく、選択肢です。
 MRAHで、“賢く水やり”をしていきましょう。