こんにちは。
Next.js 13の新しいアップデートがリリースされましたね。今回はその中でも特に注目されている「ルートグループ」の新機能に焦点を当て、アプリのルートレイアウトを最適化する方法をご紹介します。
1. ルートグループの基本的な使い方
まずは基本的な使い方から見ていきましょう。
ルートグループを利用することで、関連するページをグループ化し、共通のレイアウトやデータフェッチを行うことができます。
具体例1: 基本的なルートグループの作成
// pages/group.tsx
import { routeGroup } from 'next/route-group'
export default routeGroup({
prefix: '/dashboard',
layout: 'DashboardLayout',
redirects: [
{
source: '/',
destination: '/overview',
},
],
})
このコードは、/dashboard
というプレフィックスを持つルートグループを作成しています。DashboardLayout
というレイアウトを使用し、/dashboard
へのアクセスを/dashboard/overview
へリダイレクトします。
2. レイアウトの共有
ルートグループを利用すると、複数のページでレイアウトを共有することが可能になります。
これにより、コードの重複を避け、メンテナンス性を向上させることができます。
具体例2: レイアウトの共有
// layouts/DashboardLayout.tsx
import React from 'react'
const DashboardLayout: React.FC = ({ children }) => {
return (
<div>
<nav>...</nav>
<main>{children}</main>
</div>
)
}
export default DashboardLayout
上記のコードはDashboardLayout
という共通のレイアウトコンポーネントを作成しています。
このレイアウトは/dashboard
プレフィックスを持つすべてのページで使用されます。
3. データフェッチの最適化
ルートグループを利用することで、データフェッチの最適化も行うことができます。
共通のデータを一度のフェッチで取得し、複数のページで利用することが可能になります。
ここまでがルートグループの基本的な利用方法となります。
4. ルートグループ内でのデータ共有
ルートグループを利用すると、グループ内の各ページでデータを簡単に共有できます。
これにより、データフェッチの効率を向上させることができます。
具体例3: データフェッチの最適化
// pages/dashboard/useDashboardData.ts
import { useState, useEffect } from 'react'
export const useDashboardData = () => {
const [data, setData] = useState(null)
useEffect(() => {
// ここでデータフェッチを行う
fetch('/api/dashboard')
.then(response => response.json())
.then(data => setData(data))
}, [])
return data
}
上記のコードは、useDashboardData
というカスタムフックを作成しています。
このフックを利用することで、ダッシュボードのデータを簡単に取得できます。
5. ルートグループのリダイレクト機能
ルートグループにはリダイレクト機能も備わっており、特定のルートへのアクセスを他のルートにリダイレクトすることができます。
これにより、URLの変更やメンテナンス時のリダイレクトが簡単に行えます。
具体例4: リダイレクトの設定
// pages/group.tsx
import { routeGroup } from 'next/route-group'
export default routeGroup({
prefix: '/dashboard',
layout: 'DashboardLayout',
redirects: [
{
source: '/old-route',
destination: '/new-route',
permanent: true,
},
],
})
このコードは、/dashboard/old-route
へのアクセスを/dashboard/new-route
へ永続的にリダイレクトする設定を行っています。
6. まとめ
Next.js 13のルートグループ機能は、アプリケーションのルートレイアウトを効率的に管理する強力なツールです。
共通のレイアウトやデータフェッチをグループ内の複数のページで簡単に共有できるため、コードの重複を減らし、メンテナンス性を向上させることができます。
今回の記事でご紹介した内容をぜひ試してみてください。