【Next.js和訳】Migrating to Next.js/Incrementally Adopt Next.js
この記事について
この記事は、Migrating to Next.js/Incrementally Adopting Next.jsの記事を和訳したものです。
記事内で使用する画像は、公式ドキュメント内の画像を引用して使用させていただいております。
Incrementally Adopting Next.js
Next.js は段階的に導入できるように設計されています。Next.js では、既存のコードを使い続けながら、必要な分だけ(または少しだけ)React を追加することができます。小さく始めて段階的にページを増やしていくことで、全面的なリライトを避け、機能拡張の作業が脱線するのを防ぐことができます。
ストラテジー
Subpath
1 つ目の戦略は、特定のサブパスの下にあるすべてのものが Next.js アプリを指すように、サーバーやプロキシを設定することです。例えば、既存の Web サイトがexample.com
で、example.com/store
が Next.js の e コマースストアを提供するようにプロキシを設定することができます。
basePath
を使うと、Next.js アプリケーションのアセットやリンクが自動的に新しいサブパス/store
で動作するように設定できます。Next.js の各ページは独立したルートなので、pages/products.js
のようなページは、アプリケーション内のexample.com/store/products
にルーティングされます。
module.exports = {
basePath: '/store',
}
basePath
について詳しく知りたい方は、ドキュメントをご覧ください。
Rewrites
2 つ目の方法は、あなたのドメインのルート URL を指す新しい Next.js アプリを作成することです。そして、next.config.js
内のrewrites
を使って、既存のアプリにプロキシされるサブパスを設定します。
例えば、次のようなnext.config.js
を使って、example.com
から提供される Next.js アプリを作成したとしましょう。これで、この Next.js アプリに追加したページ(例:pages/about.js
を追加した場合は/about
)へのリクエストは Next.js で処理され、それ以外のルート(例:/dashboard
)へのリクエストはproxy.example.com
にプロキシされることになります。
module.exports = {
async rewrites() {
return {
// すべてのNext.jsページ(ダイナミックルートを含む)をチェックした後と静的ファイルをチェックした後、他のリクエストをプロキシします。
fallback: [
{
source: '/:path*',
destination: `https://proxy.example.com/:path*`,
},
],
}
// Next.js < v10.1の場合は、代わりにno-op rewriteを使うことができます。
return [
// チェックを行うために、no-op rewriteを定義する必要があります。プロキシを試みる前に、すべてのpages/staticファイルをチェックするように
{
source: '/:path*',
destination: '/:path*',
},
{
source: '/:path*',
destination: `https://proxy.example.com/:path*`,
},
]
},
}
rewrites について詳しく知りたい方は、ドキュメントをご覧ください。
モノレポとサブドメインによるマイクロフロントエンド
Next.js とVercelでは、マイクロフロントエンドを採用し、モノレポとしてデプロイすることが簡単にできます。これにより、サブドメインを使って新しいアプリケーションを段階的に採用することができます。マイクロフロントエンドのメリットをいくつか紹介します。
- コードベースが小さくなり、まとまりができ、メンテナンス性が向上します。
- 分離された自律的なチームによる、よりスケーラブルな組織。
- フロントエンドの一部を段階的にアップグレード、アップデート、または書き換えできる。
モノレポの設定が完了したら、通常通り Git リポジトリに変更をプッシュすると、接続している Vercel プロジェクトにコミットがデプロイされます。
結論
さらに詳しく知りたい方は、subpathとrewritesについてをご覧ください。また、マイクロフロントエンドを使った例をご紹介します。
Discussion