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

Webアプリケーションのアーキテクチャパターンから読み解くNext.js

pvcresin
November 06, 2020

 Webアプリケーションのアーキテクチャパターンから読み解くNext.js

Eight Engineer Meetup #1

pvcresin

November 06, 2020
Tweet

More Decks by pvcresin

Other Decks in Programming

Transcript

  1. 鳥山 らいか / Raika Toriyama Sansan 株式会社 > Eight 事業部

    > Eight Career 部 > エンジニア (新卒 2 年目) • @pvcresin • 好きなこと:散歩・お笑い・断捨離 • 好きな言語:TypeScript, Kotlin, (Rust)
  2. • Classic SSR • SPA • BFF • SSR •

    SSG • ISR • おまけ Contents
  3. • CSR (Client Side Rendering) + Ajax • サーバから返される空の HTML

    をもとに、 JS でルーティング・UI 構築・通信を行う • 初期表示以降、必要なデータだけを API から取得するため 画面遷移が高速 • React などの View 用コンポーネントライブラリの台頭 SPA (Single Page Application) Client 初回 Ajax Empty CSR JSON API Server
  4. • フロントエンドのためのバックエンド(サーバ) • バックエンドの API サーバ化・マイクロサービス化の潮流 • UI 構築 /

    Data 操作 の関心の分離 • 役割 ◦ API Gateway ◦ Session 管理 ◦ SSR(後述) BFF (Backends For Frontends) BFF Client micro service API Server micro service micro service Front-end Back-end
  5. • SPA においてクライアントで行っていた UI 構築ロジックを BFF側 (Node.js) でも利用 • 初回アクセス時にサーバから完璧なコンテンツが

    表示された HTML が返される • View 用ライブラリ ≒ テンプレートエンジン SSR (Server Side Rendering) SSR BFF Client 初回
  6. • 多くの場合、「初期表示を SSR + その後は SPA」 • 初期表示までの時間短縮・ページ遷移の高速化 • Next.js

    初期の思想 デメリット • リクエストを受けてから HTML を生成するので マシンリソースを消費 する SSR BFF Client SSR (Server Side Rendering) CSR 初回 Ajax JSON Next.js
  7. • ビルド時に全ての HTML ファイルを生成 • ファイルを CDN から返すためレスポンスが高速 • 更新頻度の低い、ブログ・ドキュメント等に向く

    • Next.js も途中から対応 デメリット • 全ての HTML ファイルを再生成・デプロイし直す必要 = 時間がかかる SSG (Static Site Generation) CDN Client Server Deploy SSG
  8. • 従来は SSG か SSR のプロジェクトのどちらか一方を選択する必要があった • ページごとに SSG /

    SSR を選べるように (Next.js v9.3~) • SSR (同期的) ➡ SSG (非同期的) に SSG + SSR Hybrid
  9. • Next.js v9.5~ • 初回アクセス ◦ 初めて HTML を生成 •

    再度アクセス ◦ キャッシュされた HTML を返しつつ、 裏で再生成(Stale-While−Revalidate) • 全ての HTML を生成する必要がないため、ビルド時間が短縮 ISR (Incremental Static Regeneration) CDN Client Server SSG 初回 2回目