Next.js 13の新機能解説: ルートグループを利用したアプリのルートレイアウト最適化

JavaScript
スポンサーリンク

こんにちは。

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のルートグループ機能は、アプリケーションのルートレイアウトを効率的に管理する強力なツールです。

共通のレイアウトやデータフェッチをグループ内の複数のページで簡単に共有できるため、コードの重複を減らし、メンテナンス性を向上させることができます。

今回の記事でご紹介した内容をぜひ試してみてください。