バンドル最適化
外部パッケージをバンドルすることで、アプリケーションのパフォーマンスを大幅に改善できます。 デフォルトでは、アプリケーションにインポートされたパッケージはバンドルされません。これはパフォーマンスに影響を与えたり、外部パッケージが事前にバンドルされていない場合(例:モノレポや node_modules
からインポートされた場合)に動作しない可能性があります。このページでは、パッケージバンドリングを分析し、設定する方法を説明します。
JavaScript バンドルの分析
@next/bundle-analyzer
は、アプリケーションバンドルのサイズを管理するための Next.js プラグインです。各パッケージとその依存関係のサイズを視覚的に報告します。この情報を使用して、大きな依存関係を削除したり、コードを分割または遅延ロードしたりできます。
インストール
以下のコマンドを実行してプラグインをインストールします:
次に、next.config.js
にバンドルアナライザーの設定を追加します。
レポートの生成
バンドルを分析するには、以下のコマンドを実行します:
レポートがブラウザに3つの新しいタブで開きます。定期的にアプリケーションのバンドルを評価することで、長期的なアプリケーションのパフォーマンスを維持できます。
パッケージインポートの最適化
アイコンライブラリなどの一部のパッケージは、数百のモジュールをエクスポートするため、開発および本番環境でパフォーマンスの問題を引き起こす可能性があります。
next.config.js
に optimizePackageImports
オプションを追加することで、これらのパッケージのインポート方法を最適化できます。このオプションは、実際に使用するモジュールのみをロードしながら、多数の名前付きエクスポートを使用するインポート文の利便性を維持します。
Next.js は一部のライブラリを自動的に最適化するため、optimizePackageImports
リストに含める必要はありません。完全なリストをご覧ください。
特定のパッケージのバンドル
特定のパッケージをバンドルするには、next.config.js
の transpilePackages
オプションを使用できます。このオプションは、事前にバンドルされていない外部パッケージ(モノレポや node_modules
からインポートされたパッケージなど)をバンドルする際に便利です。
すべてのパッケージをバンドル
App Router のデフォルト動作として、すべてのパッケージを自動的にバンドルするには、next.config.js
の bundlePagesRouterDependencies
オプションを使用できます。
バンドリングから特定のパッケージを除外
bundlePagesRouterDependencies
オプションが有効になっている場合、next.config.js
の serverExternalPackages
オプションを使用して、特定のパッケージを自動バンドリングから除外できます: