LoginSignup
22
10

More than 1 year has passed since last update.

Remixの特徴と思想について

Last updated at Posted at 2021-12-13

はじめに

こんにちは。 KDDIアジャイル開発センターの小板橋です。 この記事は、KDDI Engineer&Designer Advent Calendar 2021の14日目の記事です。

  • 2021/11/23にReact Routerの制作者(Michael JacksonとRyan Florence)が新たに作成したRemixのV1.0が正式リリースされました。
  • 今回は、このRemixの特徴と思想についてまとめていきます。

Remixとは

  • Remixとは、React製のフルスタックフレームワークでファイルベースのルーティングができます。(Next.jsと同様)
  • remixでは、SSGなどであらかじめレンダリングしておく(事前にビルドをして静的サイトを作成しておく)のではなく、サーバサイドレンダリングやfetch APIを利用して画面表示のデータをやり取りするようです。
  • Fetch APIを最大限使うことでCache controlでSSGと同じようなことしています。

特徴1: なので、SSGの機能を含んでいないということになります。

なぜなのか、それは秒ごとに変わるコンテンツに対応させるにはSSGでは無理だったからです。
なので、最近ではSSGでも動的なデータを含むサイト作成する手段として生まれたのが、ISRです。

あとは、SSGの欠点として例えば、ビルド時間がかかるや、サイトの変更をするまでに一度ビルドしないといけないことや、認証が必要なサービスには利用できないといったことです。

  • RimixではSSRとFetch APIを利用すると冒頭で説明しましたが、そうすると画面表示までのパフォーマンスに影響を与えるのではないかという問題が現れます。

それを解決する方法が2つある。

  • 1つ目の解決策 : CDN環境での実行です。ただ、ここで扱うCDN環境はCloudflareのようなものを指しています。(分散サーバー/分散データベースをエッジで実行できる環境)
  • なので、現在は、Cloudflareのみに対応している状況です。

  • 2つ目の解決策 : ファイルベースのルーティングです。

  • React Router v6の機能でもあるNestedRouteingをサポートしています。

  • これを使うと、コンポーネント間の関連する部分のみを更新することができます。

例えば、同じようなファイルベースのルーティングをするNext.jsの挙動だと、pageを移動するとそれまでのコンポーネントが全てマウントされ直される(内部の状態は失われる)ので、関連するものを再度マウントする必要がありました。
NestedRouteingでは、全体に関連するレイアウトコンポーネントを作ることなく、共通化することが簡単に出来ます。
また、Remixがファイル構造を知っていることで不必要にFetchされることがなくなるのも特徴の一つです。

特徴その2: cache-headerの設定

  • Remixでは、ページコンポーネントごとにheadersをexportするだけで、HTTP headerをコントロールできます。
  • それを利用することで、Cache-Control HTTPヘッダーを調整することができます。

特徴その3: 環境依存がない

  • Next.jsでは、VercelにデプロイすることでISRの恩恵やパフォーマンスの最適化ができます。(もちろん他の環境へのデプロイはできるが)
  • Remixの場合、Vercel/AWS Lambda/Cloudflareなどのアダプターが用意されている

参考資料

22
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
10