Next.jsは、ReactをベースにしたWebアプリ開発のフルスタックフレームワーク。フロントエンドからバックエンドAPIまでを1つのプロジェクトで完結させられる。
ReactはUIを作るライブラリに過ぎず、アプリとして動かすには多くの追加設定が必要になる。Next.jsはその「足りない部分」をすべて統合したフレームワークである。
Reactだけではルーティング・SSR・API・最適化など、アプリ開発に必要な要素を別途ライブラリで補う必要があった。Next.jsはこれらをひとつにまとめ、「設定なしですぐ開発を始められる(Zero Config)」環境を提供する。
用語
| 用語 | 説明 |
|---|---|
| React | UIコンポーネントを構築するためのJavaScriptライブラリ |
| Next.js | Reactを拡張したフルスタックWebフレームワーク |
| フルスタック | フロントエンド(画面)とバックエンド(API・DB連携)の両方を扱えること |
| Zero Config | 最小限の設定でプロジェクトを開始できる設計思想 |
Next.jsは「Webアプリに必要なほぼすべて」を標準搭載しているが、それゆえに何ができて何ができないかを整理しておくことが重要。
ルーティング・レンダリング・API・認証まで、単一プロジェクトで完結する。
Route Handlers によりフロントと同じリポジトリでAPIを実装できるNext.jsはWebアプリ向けであり、用途を誤ると過剰設計になる。
Next.jsの最大の強みは「ページごとに最適なレンダリング方式を選べる」こと。SEO・速度・コストの要件に応じて使い分ける。
| 方式 | タイミング | 向いているページ例 |
|---|---|---|
| SSG(静的生成) | ビルド時に生成 | LP・ブログ・ドキュメント |
| ISR(増分再生成) | 一定時間ごとに再生成 | ニュース・商品一覧 |
| SSR(サーバー生成) | リクエストのたびに生成 | マイページ・検索結果 |
| CSR(クライアント生成) | ブラウザで生成 | 管理画面・ダッシュボード |
💡 ポイント: 1つのプロジェクト内でページごとに方式を混在させられるため、「SEOが必要なページはSSG、ログイン後はCSR」といった設計が可能。
Next.js 13以降に導入された新しい設計方式。「どこでコードを動かすか」をファイル単位で明示的に分離できるようになった。
App Router以前は、サーバーとブラウザの役割分担が曖昧になりやすかった。App RouterではServer Components(サーバーで動く)とClient Components(ブラウザで動く)を明示的に分離することで、パフォーマンスと保守性が向上する。
app/
├── layout.tsx # 全ページ共通のレイアウト(Server Component)
├── page.tsx # トップページ(Server Component)
├── dashboard/
│ ├── page.tsx # ダッシュボード(Server Component)
│ └── chart.tsx # インタラクティブなグラフ('use client'を宣言)
└── api/
└── route.ts # バックエンドAPI(Route Handler)
用語
| 用語 | 説明 |
|---|---|
| Server Component | サーバー上でのみ実行されるReactコンポーネント。DBアクセスや認証処理に使う |
| Client Component | ブラウザで実行されるコンポーネント。ボタン操作や状態管理に使う |
| App Router | Next.js 13以降の新しいルーティング・設計方式 |
| Pages Router | App Router以前の旧来の設計方式。現在も併用可能 |
💡 ポイント: App RouterはNext.jsの現在の主流設計。新規プロジェクトはApp Routerを前提に学ぶのが望ましい。
Next.jsはTypeScriptを標準でサポートしており、型定義を活用することでバグの早期発見・チーム間の仕様共有が容易になる。
TypeScriptとはJavaScriptに「型」の概念を加えた言語。Next.jsではプロジェクト作成時からTypeScriptが推奨されており、APIレスポンス・UIコンポーネント・サーバー/クライアント間のデータすべてに型を付与できる。
用語
| 用語 | 説明 |
|---|---|
| TypeScript | 型定義を持つJavaScriptの上位互換言語 |
| 型定義 | 変数や関数の「どんなデータを受け取り・返すか」を明示する仕組み |
| 型安全 | 型の不一致をビルド時に検出し、実行前にバグを防ぐ状態 |