対象読者
- Reactの基本を修めている方
- 通信回線が弱いユーザーにも高速に表示できるサイトを作りたいエンジニア
- WebブラウザとNode.jsという異なるランタイムをそれぞれキャッチアップするのが辛くなってきたエンジニア
前提環境
筆者の検証環境は以下の通りです。
- macOS Sonoma 14.0
- Node.js 20.8.0
- NPM 10.1.0
- Remix 2.1.0
Webサイトとルーティング
Webサイト制作やアプリケーションのフレームワークに欠かせない機能のひとつとして、ページ遷移に関する機能を挙げる方は多いと思います。この機能は、ページへの経路(=ルート、route)を定義することから、一般的にルーティングと呼ばれています。
もちろん、ビジネス上の関心としてはページの中身であるコンテンツの比重が高くなるのですが、技術的な関心としてはルーティングは決して軽いものではありません。
Remixの開発チームは、元々はReact Routerというルーティングライブラリを開発していました。シングルページアプリケーション上で利用するもので、サーバーとの通信を伴わずに、ブラウザ上で画面やURL表示を切り替える機能を持っていました。Reactによるシングルページアプリケーションの開発の現場においては、デファクトスタンダードと呼べる立場となり、現場で叩き上げられたライブラリとなっています。
その魂を引き継いだRemixというフレームワークにとっても、ルーティングは重大な関心ごとで、内部のルーティング実装はReact Routerによって行われています。Remixの最大の特長は、そのルーティングと通信を高度に統合した開発体験を提供していることです。前回は通信について解説したので、今回はルーティングについて解説します。また、レイアウトと呼ばれる機能もルーティングと密接に関わっているため、併せて解説します。
本連載を追いかけてくださっている方への注意点として、第2回、第3回ではRemix v1のルーティング機能を前提として解説していましたが、今回から解説するRemix v2では、ファイルとフォルダの使い方が変わっています。最新版の create-remix
を利用してプロジェクトを作成した場合は、本記事以降を参考にしてルーティング機能を利用してください。