🐕

Reactベースのフレームワークをまとめてみる

2024/12/29に公開

事前知識

Reactとは
  • JavaScript(TypeScript)を用いたUIライブラリ
  • コンポーネント志向
    • UIをコンポーネント(部品)として分割する概念
    • コンポーネントは再利用できる
  • 宣言的
  • 仮想DOM
    • 仮想DOMのプロセス
      1. Reactは最初に仮想DOMと呼ばれるものを作成する
      2. UIが更新されると新しい仮想DOMと前の仮想DOMを比較する(差分検出
      3. Reactは差分検出で発見した必要最小限の変更のみを実際のDOMに適用する
  • SPA
    • 1つのHTMLを動的に切り替える

Reactベースのフレームワークまとめ

Reactのフレームワークを、ルーティング、データフェッチ、レンダリングの観点で表にしてみた

ルーティング データフェッチ レンダリング
Next.js ファイルベース メソッドベース SSR、SSG、CSR、ISR
Remix ファイルベース ルートベース SSR、SSG、CSR、ISR
Gatsby ファイルベース ルートベースorAPI SSG、CSR、PWA
Blitz.js ファイルベース メソッドベース SSR、SSG、CSR、ISR
Razzle SSR、SSG、CSR
RedwoodJS ファイルベース Cellコンポーネントベース SSR、CSR
UmiJS 設定ベースorファイルベース dva CSR

レンダリングについて
種類 概要 特徴
SSR 各リクエストごとにサーバー側でページを生成 ページの初期読み込みが速く、SEOに優れている
SSG ビルド時にページを事前生成 非常に高速で、頻繁に変更されないコンテンツに最適
CSR クライアント側でデータを取得し、ページをレンダリング ユーザーのインタラクションが多いページや動的コンテンツに適している
ISR SSG+SSRの利点 頻繁に更新されるコンテンツでも静的サイトのパフォーマンスメリットを享受できる
ルーティングについて
  • ファイルベースルーティング
    • 特定のディレクトリ内のファイルやフォルダ構造に基づいて自動的にルート(URLパス)を生成する方法
  • 設定ベースルーティング
    • アプリケーションのルート(URLパス)を専用の設定ファイルやコード内で明示的に定義する方法

各フレームワークの特徴

Next.js

https://nextjs.org/
柔軟性と拡張性のあるフレームワーク

  • Image Optimization
    • webページの画像を効率的に読み込む機能

Remix

https://remix.run/
エッジコンピューティング&高速SSRに特化したフレームワーク

  • ネストされたルートをサポートしたルーティング
  • 高速SSRレンダリング
    • ページロード時にデータをプリエンプティブにフェッチし、コンポーネントごとにデータをロード

Gatsby

https://www.gatsbyjs.com/
SSG(静的サイト生成)に特化したフレームワーク

  • データフェッチング
    • 下記を組み合わせてデータ取得
      • ビルド時にGraphQLから
      • クライアント側でAPIから

Blitz.js

https://blitzjs.com/
Next.jsをベースにしたフルスタックフレームワーク

  • データフェッチング
    • Next.jsのデータフェッチメソッド+Blitz.js独自のクエリとミューテーションという概念を使用
      • クエリ:データの読み取り専用の関数
      • ミューテーション:データの作成、更新、削除を行う関数

Razzle

https://razzlejs.org/
柔軟性が特徴のフレームワーク
ルーティング、データフェッチングにもフレームワークの縛りがない

RedwoodJS

https://redwoodjs.com/
フロントエンドとバックエンドを統合したフレームワーク

  • cellコンポーネントとは
    • query,loading,empty,failure,successの要素で構成される
    • queryがデータを取得するためのGraphQLクエリ

UmiJS

https://v3.umijs.org/
企業向けのフレームワーク

  • ルーティング
    • 設定ファイルで設定ベースのルーティングが可能
    • 設定ファイルがなければファイルベースルーティングとなる
  • dvaとは
    • Reduxをベースにした状態管理
    • データフェッチの管理
    • ミドルウェア
    • モジュール化

Discussion