Web開発を勉強していると、「Next.js」という名前を目にする機会が増えてきます。
しかし、初めてNext.jsを学ぶ場合、
- Next.jsとは何なのか
- Reactとは何が違うのか
- Next.jsを使って何が作れるのか
- Reactを勉強してからNext.jsを学ぶべきなのか
と疑問に思う方も多いのではないでしょうか。
結論からいうと、Next.jsはReactをベースに、WebサイトやWebアプリケーションを構築するためのフレームワークです。
ReactによるUI構築に加えて、ルーティング、サーバー側での処理、データ取得、画像・フォントの最適化など、Web開発で役立つさまざまな機能が用意されています。
この記事では、Next.js初心者に向けて、Reactとの違いやNext.jsの特徴、できること、学習する順番まで解説します。
※この記事はNext.js 16系・App Routerを基準に解説しています。
Next.jsとは?
Next.jsは、Reactを使ってフルスタックWebアプリケーションを構築するためのフレームワークです。
React Componentsを使ってユーザーインターフェースを作りながら、Next.jsがWebアプリケーション開発に必要となる追加機能や最適化を提供します。
たとえば、Next.jsには次のような機能があります。
- ファイル・フォルダ構成を利用したルーティング
- Server Components
- サーバー側でのデータ取得
- Route Handlers
- 画像の最適化
- フォントの最適化
- レイアウトの共通化
また、バンドラーやコンパイラーなどの低レベルなツールもNext.js側で設定されるため、開発者はアプリケーションの実装に集中しやすくなっています。
Next.jsとReactの関係
Next.jsとReactは、どちらか一方を選択するような関係ではありません。
基本的な関係は、
ReactでUIを作り、Next.jsの機能を利用してWebアプリケーション全体を構築する
と考えると分かりやすいです。
たとえば、Reactでは次のようなコンポーネントを作成できます。
type GreetingProps = {
name: string;
};
export function Greeting({ name }: GreetingProps) {
return <p>こんにちは、{name}さん</p>;
}
GreetingはnameをPropsとして受け取り、画面に文字を表示するReactコンポーネントです。
Next.jsでも、このようなReactコンポーネントを組み合わせてUIを作っていきます。
つまり、Next.jsを学習してもReactが不要になるわけではありません。
Next.jsが使われる理由
ReactはUIを構築するためのライブラリです。
一方、実際にWebアプリケーションを作る場合は、UI以外にもさまざまな仕組みが必要になります。
たとえば、
- URLごとにページを切り替える
- APIやデータベースから情報を取得する
- サーバー側で処理する
- 画像を最適化する
- ページ間を遷移する
といった処理です。
Next.jsには、こうしたWebアプリケーションを構築するための機能があらかじめ用意されています。
Next.jsとReactの違い
ReactとNext.jsの大きな違いは、担当する範囲です。
ReactはUIを構築するためのライブラリ
Reactでは、Webページをコンポーネント単位で作成できます。
たとえば、
export function Button() {
return <button>送信する</button>;
}
というボタンを作成し、
import { Button } from './Button';
export function ContactForm() {
return (
<form>
<input type="email" />
<Button />
</form>
);
}
のように別のコンポーネントから利用できます。
Button、Header、Card、FormなどのUIを小さな単位に分割して組み合わせられるのがReactの特徴です。
Next.jsはReactを使ったWebアプリ開発のフレームワーク
Next.jsではReactによるUI構築に加えて、Webアプリケーション全体を作るための仕組みが提供されています。
たとえばApp Routerでは、
app/
├── layout.tsx
├── page.tsx
└── about/
└── page.tsx
という構成にすると、
app/page.tsx
→ /
app/about/page.tsx
→ /about
のようにURLとページを対応させられます。
Reactコンポーネントを作るだけではなく、「どのURLでどのページを表示するか」といった部分までNext.jsの仕組みを利用して開発できます。
ReactとNext.jsの違いを比較
大まかな違いをまとめると次のようになります。
|
項目 |
React |
Next.js |
|---|---|---|
|
種類 |
UIライブラリ |
Reactフレームワーク |
|
UI構築 |
○ |
○(Reactを使用) |
|
ルーティング |
React単体では提供しない |
App Routerなどを提供 |
|
Server Components |
Reactの機能 |
App Routerに統合 |
|
サーバー側の処理 |
React単体ではアプリ全体の仕組みを提供しない |
Route Handlersなどを提供 |
|
画像最適化 |
React単体では提供しない |
|
|
フォント最適化 |
React単体では提供しない |
|
そのため、
React = UIを構築する技術
Next.js = Reactを使ってWebアプリケーションを構築するためのフレームワーク
と理解しておくとよいでしょう。
Next.jsの主な特徴
ここからは、Next.jsの代表的な特徴を見ていきます。
App Routerによるルーティング
現在のNext.jsには、App RouterとPages Routerという2種類のRouterがあります。
新しくNext.jsを学ぶ場合は、より新しいApp Routerを中心に学習するとよいでしょう。
App Routerではappディレクトリ内のフォルダとpage.tsxを使ってページを作成します。
たとえば、
// app/about/page.tsx
export default function AboutPage() {
return <h1>About</h1>;
}
とすると、/aboutに対応するページを作成できます。
従来からあるPages Routerも引き続きサポートされているため、古いNext.jsプロジェクトや技術記事ではpagesディレクトリを見かけることがあります。
Server Componentsを利用できる
App Routerでは、LayoutsとPagesはデフォルトでServer Componentsとして扱われます。
Server Componentsでは、サーバー側でデータを取得したり、取得したデータを使ってUIを構築したりできます。
一方、useStateやクリックイベント、ブラウザAPIなどを利用する場合にはClient Componentsを使用します。
たとえば、Stateを利用するコンポーネントでは次のように'use client'を指定できます。
'use client';
import { useState } from 'react';
export function Counter() {
const [count, setCount] = useState(0);
return (
<button onClick={() => setCount(count + 1)}>
{count}
</button>
);
}
useStateで状態を管理し、onClickでユーザー操作を処理しているため、このコンポーネントはClient Componentとして実装しています。
Server ComponentsとClient Componentsの違いはNext.jsを理解するうえで重要ですが、最初からすべてを覚える必要はありません。
まずは「サーバーで処理するコンポーネントと、ブラウザ側の操作が必要なコンポーネントを使い分けられる」と理解しておきましょう。
サーバー側でデータを取得できる
Server Componentsでは、サーバー側でデータを取得できます。
たとえば次のように非同期のコンポーネントを作成できます。
type Post = {
id: number;
title: string;
};
export default async function Page() {
const response = await fetch('https://example.com/api/posts');
const posts: Post[] = await response.json();
return (
<ul>
{posts.map((post) => (
<li key={post.id}>{post.title}</li>
))}
</ul>
);
}
この例では、
fetch()でAPIへリクエストするresponse.json()でJSONを取得するmap()で投稿一覧を表示する
という処理をしています。
実際の開発ではエラー処理なども必要ですが、Next.jsではこのようにサーバー側でデータを取得してUIを構築できます。
なお、Next.jsはバージョンによってキャッシュやレンダリングの挙動が変更されています。古い記事のキャッシュ設定をそのまま使うのではなく、利用しているバージョンの公式ドキュメントを確認することが重要です。
画像やフォントを最適化できる
Next.jsにはnext/imageのImageコンポーネントがあります。
import Image from 'next/image';
import profileImage from '@/public/profile.jpg';
export default function Profile() {
return (
<Image
src={profileImage}
alt="プロフィール画像"
width={400}
height={300}
/>
);
}
Imageコンポーネントには、画像サイズの最適化や遅延読み込み、レイアウトシフトを抑えるための仕組みなどがあります。
また、next/fontを利用したフォントの最適化にも対応しています。
Webサイトのパフォーマンスを考えるうえで役立つ機能がフレームワーク側に用意されている点もNext.jsの特徴です。
Web APIも実装できる
App RouterではRoute Handlersを利用してHTTPリクエストを処理できます。
たとえば、
// app/api/hello/route.ts
export async function GET() {
return Response.json({
message: 'Hello Next.js',
});
}
とすると、GET /api/helloへのリクエストを処理できます。
このようにNext.jsは画面を作るだけではなく、サーバー側の処理も同じプロジェクト内で実装できます。
古い記事ではpages/apiを使ったAPI Routesを見かけることがありますが、App RouterではRoute Handlersを利用できます。
Next.jsで何が作れる?
Next.jsでは、さまざまなWebサイト・Webアプリケーションを構築できます。
Webサイト・コーポレートサイト
会社紹介、サービス、実績、お問い合わせなどを掲載するコーポレートサイトを構築できます。
ただし、単純な静的サイトであれば必ずNext.jsが必要というわけではありません。
サイトの要件によって技術を選択することが重要です。
ブログ・メディアサイト
Next.jsでは、
- 記事一覧
- 記事詳細
- カテゴリー
- 動的なURL
- CMSとの連携
などを実装できるため、ブログやメディアサイトも構築できます。
ヘッドレスCMSから記事データを取得して表示する構成にも利用できます。
Webアプリケーション
Next.jsは、より機能的なWebアプリケーションにも利用できます。
たとえば、
- ログイン機能
- 管理画面
- Todoアプリ
- 予約システム
- ダッシュボード
- データベースを利用するサービス
などです。
Next.jsだけですべての機能が完成するわけではありませんが、認証サービスやデータベースなどと組み合わせることで本格的なWebアプリケーションを構築できます。
Next.jsを使うメリット
Web開発に必要な機能がまとまっている
Next.jsでは、ルーティング、サーバー側での処理、画像最適化など、Web開発で必要になりやすい機能がフレームワークとして提供されています。
Reactだけでプロジェクト全体の構成を一から考える場合と比べて、Next.jsという共通の仕組みに沿って開発を進められる点がメリットです。
フロントエンドとサーバー側の処理をまとめて開発できる
Next.jsではReactによるUIだけでなく、Server ComponentsやRoute Handlersなどを利用してサーバー側の処理も実装できます。
そのため、
画面
↓
サーバー側の処理
↓
API・データベース
といった構成を1つのNext.jsプロジェクトを中心に構築できます。
パフォーマンスを考慮した機能が用意されている
Next.jsには画像・フォントの最適化やルーティング・ナビゲーションなど、パフォーマンスを考慮した仕組みがあります。
また、Next.js 16ではTurbopackがデフォルトのバンドラーになっています。
ただし、「Next.jsを使えば必ず高速になる」という意味ではありません。
画像サイズ、JavaScript量、データ取得方法など、実装方法によってWebサイトのパフォーマンスは変わります。
Next.jsのデメリット・注意点
Reactの知識が必要になる
Next.jsはReactをベースにしています。
そのため、
- コンポーネント
- Props
- State
- イベント
- Hooks
など、Reactの基本を理解している方がNext.jsを学習しやすくなります。
Reactを完全にマスターしてから始める必要はありませんが、最低限のReactの基礎を学んでおくことをおすすめします。
覚えることが多い
Next.jsには独自に学ぶ必要がある概念もあります。
たとえば、
- App Router
- Server Components
- Client Components
- Layouts
- Route Handlers
- レンダリング
- キャッシュ
などです。
初心者の場合、これらを一度に覚えようとすると混乱しやすいため、まずはページ作成やルーティングなどの基本から順番に学習しましょう。
バージョンによる違いに注意する
Next.jsを学習するときに特に注意したいのが、古い情報との違いです。
現在もPages Routerはサポートされていますが、新しいApp Routerとはプロジェクト構成やAPIが異なる部分があります。
また、Next.js 16ではTurbopackのデフォルト化やキャッシュモデルの変更なども行われています。
検索して見つけたコードをそのままコピーするのではなく、
- いつ公開された記事なのか
- Next.jsのバージョンはいくつか
- App RouterとPages Routerのどちらか
を確認しましょう。
Next.jsはどんな人・開発に向いている?
Reactを使ってWebサイト・Webアプリを作りたい人
Reactを勉強して、
「次は実際にWebアプリを作ってみたい」
という人にNext.jsは適しています。
Reactで学んだコンポーネントの知識を活かしながら、ルーティングやサーバー側の処理など、より実践的なWeb開発を学べます。
サーバー側の処理も含めて開発したい人
フロントエンドだけでなく、
- API
- データ取得
- 認証
- データベース
なども扱うWebアプリケーションを作りたい人にもNext.jsは選択肢になります。
フロントエンドから少しずつフルスタック開発へ学習範囲を広げたい場合にも相性がよいでしょう。
Next.jsを使わなくてもよいケース
Webサイトを作るからといって、必ずNext.jsを使う必要はありません。
たとえば、シンプルな静的サイトであればAstroなども選択肢になります。
また、クライアントが管理画面から記事や固定ページを更新することを重視する場合には、WordPressが要件に合うこともあります。
重要なのは「人気だからNext.jsを使う」のではなく、作るWebサイトやWebアプリケーションの要件に合わせて技術を選択することです。
初心者がNext.jsを学ぶおすすめの順番
HTML・CSS・JavaScriptの基礎を学ぶ
まずはWeb開発の基本となる、
HTML
↓
CSS
↓
JavaScript
を学びましょう。
特にJavaScriptでは、変数、関数、配列、オブジェクト、map()、分割代入、async / awaitなどを理解しておくとNext.jsのコードを読みやすくなります。
Reactの基本を学ぶ
次にReactの基本を学びます。
最低限、
- コンポーネント
- JSX
- Props
- State
- イベント
- Hooks
あたりを理解しておくとよいでしょう。
Next.jsのApp Routerを学ぶ
Reactの基礎を理解したらNext.jsに進みます。
最初は、
├── layout.tsx
├── page.tsx
└── about/
└── page.tsx
のようなシンプルな構成から始め、
page.tsxlayout.tsx- App Router
- Server Components
- Client Components
などを順番に理解していくのがおすすめです。
小さなWebアプリを作ってみる
基本を学んだら、実際に何か作ってみましょう。
たとえば、
- Todoアプリ
- ブログ
- メモアプリ
- 簡単な商品一覧
- APIからデータを取得するアプリ
などから始めると、Next.jsの仕組みを実践しながら学習できます。
すべての機能を覚えてから開発を始める必要はありません。
分からない部分を調べながら小さなアプリを完成させることで、Next.jsへの理解を深められます。
まとめ
Next.jsは、ReactをベースにフルスタックWebアプリケーションを構築するためのフレームワークです。
ReactによるUI構築に加えて、ルーティング、Server Components、サーバー側でのデータ取得、Route Handlers、画像・フォント最適化など、Web開発に役立つ機能が提供されています。
ReactとNext.jsの関係は、
ReactでUIを作る → Next.jsの機能を使ってWebアプリケーション全体を構築する
と考えると分かりやすいでしょう。
これからNext.jsを学習する場合は、HTML・CSS・JavaScriptとReactの基礎を身につけたうえで、App Routerから学習するのがおすすめです。
また、Next.jsはアップデートによる変更も多いため、古い記事だけを参考にせず、使用しているバージョンと公式ドキュメントを確認しながら開発を進めましょう。