🚀 新規事業

next-app-router-dashboard

最終更新 2026年05月09日 / 40_新規事業/SCALE_Build/カタログ/機能集/next-app-router-dashboard.md

Next.js App Router ダッシュボード雛形

用途

Next.js App Router でダッシュボードレイアウトを組む標準雛形。route group 活用。

特徴

  • (dashboard) route group
  • 共通レイアウト
  • 認証ミドルウェア

コード(コピペ用)

// ファイル構成:
//   app/
//     (dashboard)/         ← route group(URLには現れない)
//       layout.tsx         ← 全ダッシュボード共通レイアウト
//       home/page.tsx
//       tasks/page.tsx
//     login/page.tsx       ← (dashboard) 外なのでヘッダー不要
//   middleware.ts          ← 認証チェック

// === app/(dashboard)/layout.tsx ===
import { ReactNode } from 'react';
import { Header } from '@/components/layout/Header';
import { Sidebar } from '@/components/layout/Sidebar';

export default function DashboardLayout({ children }: { children: ReactNode }) {
  return (
    <div className="min-h-screen bg-zinc-950 text-zinc-100">
      <Header />
      <div className="flex">
        <Sidebar />
        <main className="flex-1 p-6 overflow-x-auto">{children}</main>
      </div>
    </div>
  );
}

// === middleware.ts ===
import { NextRequest, NextResponse } from 'next/server';

export function middleware(req: NextRequest) {
  const isAuthed = req.cookies.get('session')?.value;
  const isLoginPage = req.nextUrl.pathname === '/login';

  if (!isAuthed && !isLoginPage) {
    return NextResponse.redirect(new URL('/login', req.url));
  }
  if (isAuthed && isLoginPage) {
    return NextResponse.redirect(new URL('/home', req.url));
  }
  return NextResponse.next();
}

export const config = {
  matcher: ['/((?!_next/static|_next/image|favicon.ico|api).*)'],
};

使い方

対象プロジェクトに該当ファイルをコピーして、props を流し込むだけ。

注意事項

  • 依存パッケージを忘れず追加