Viteからの移行
このガイドは、既存のViteアプリケーションをNext.jsに移行する方法を説明します。
なぜ切り替えるのか?
ViteからNext.jsへの切り替えを検討する理由はいくつかあります:
初期ページの読み込み時間が遅い
デフォルトのViteプラグイン for Reactを使用してアプリケーションを構築した場合、アプリケーションは純粋にクライアントサイドのアプリケーションとなります。クライアントサイドオンリーのアプリケーション、別名シングルページアプリケーション(SPA)は、しばしば初期ページの読み込み時間が遅くなることがあります。これはいくつかの理由により発生します:
- ブラウザがReactコードとアプリケーション全体のバンドルをダウンロードして実行するまで、コードがリクエストを送信してデータを読み込むことができません。
- アプリケーションのコードは、新しい機能や追加の依存関係を追加するたびに成長します。
自動コード分割がない
以前の読み込み時間が遅くなる問題は、ある程度コード分割で管理できます。しかし、手動でコード分割を行おうとすると、多くの場合、パフォーマンスが悪化します。手動でコード分割することで、ネットワークウォーターフォールを意図せずに導入することが簡単です。Next.jsは自動コード分割が組み込まれたルーターを提供します。
ネットワークウォーターフォール
パフォーマンスの悪化を引き起こす一般的な原因は、アプリケーションがデータを取得するためにクライアント-サーバー間で連続的なリクエストを行うことです。SPAでデータを取得する一般的なパターンは、最初にプレースホルダーをレンダリングし、コンポーネントがマウントされた後にデータを取得することです。残念ながら、これはデータを取得する子コンポーネントが親コンポーネントのデータ読み込み完了までデータ取得を開始できないことを意味します。
クライアントでのデータ取得はNext.jsでもサポートされていますが、データ取得をサーバーにシフトすることで、クライアント-サーバーのウォーターフォールを排除するオプションも提供します。
高速で意図的なローディング状態
React Suspenseを介したストリーミングに対する組み込みサポートを利用することで、ネットワークウォーターフォールを引き起こすことなく、UIのどの部分を最初にロードするか、どの順序でロードするかについてより意図的であることができます。
これにより、ページがより迅速に読み込まれるようになり、レイアウトシフトを排除できます。
データ取得戦略を選択する
ニーズに応じて、Next.jsではページおよびコンポーネント単位でデータ取得戦略を選択できます。ビルド時、サーバーのリクエスト時、またはクライアントでデータを取得することを決定できます。たとえば、CMSからデータを取得し、ブログ投稿をビルド時にレンダリングし、効率的にCDNでキャッシュできます。
ミドルウェア
Next.js Middlewareは、リクエストが完了す る前にサーバー上でコードを実行することを可能にします。これは、ユーザーが認証専用のページにアクセスした際、未認証のコンテンツのフラッシュを避けるために、ユーザーをログインページにリダイレクトするのに特に有用です。ミドルウェアは、実験や国際化にも有用です。
組み込みの最適化
画像、フォント、およびサードパーティのスクリプトは、アプリケーションのパフォーマンスに大きく影響することがあります。Next.jsには、それらを自動的に最適化する組み込みのコンポーネントが備わっています。
移行手順
この移行の目的は可能な限り速く動作するNext.jsアプリケーションを構築することであり、その後、Next.jsの機能を段階的に採用できるようにすることです。まずは、既存のルーターを移行せずに、純粋にクライアントサイドアプリケーション(SPA)として維持することにします。これにより、移行プロセス中に問題に直面する可能性を最小限に抑え、マージの競合を減少させます。
ステップ1: Next.js依存関係のインストール
最初に行うべきことは、依存関係としてnext
をインストールすることです:
npm install next@latest
ステップ2: Next.js構成ファイルの作成
プロジェクトのrootにnext.config.mjs