0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Next.jsまとめ

Last updated at Posted at 2025-12-04

【Next.js入門】フルスタックWebアプリ開発のための基礎知識と最新機能まとめ

この記事では、Next.js(バージョン15)の基本的な概念から、Reactの最新機能を取り入れたApp Router、そして効率的なデータ取得・操作のための仕組みについて、体系的に解説します。

1. Next.jsとは

Next.jsは、Vercelというアメリカの企業によって開発された、フルスタックのWebアプリケーションを構築するためのReactフレームワークです。

React(UIライブラリ)が持つ機能に加え、Next.jsは以下の機能を追加し、大規模なアプリケーション開発を強力にサポートします。

  • 自動ルーティング設定
  • 高速化 (コード分割や画像最適化)
  • SEO対策
  • サーバーサイド機能の提供

1.1. ReactとNext.jsの違い

Reactでは、アプリケーションの読み込みが主にクライアント側で行われるため、最初に真っ白なページが表示された後にJavaScriptが実行され、**UI(ユーザーインターフェース)**が構築・表示される。

一方、Next.jsは、ビルド時やリクエスト時にHTMLがプリレンダリングされるため、リクエストに対してコンテンツをすでに含まれたHTMLがすぐに提供される。これにより、ユーザーはすぐにUIを見ることができるという強みを持つ。(このプリレンダリングされたHTMLの後に、アプリケーションをインタラクティブにするためのJavaScriptが読み込まれる。)

2. レンダリングの種類と戦略

Next.jsが提供する多様なレンダリング戦略は、WebサイトのパフォーマンスとSEOを最適化するために重要です。

種類 実行場所 特徴 メリット デメリット
CSR (Client-Side Rendering) クライアント(ブラウザ) ユーザーのマシンのスペックに依存。 ページ遷移が高速、動的な操作が可能。 初期表示に時間が掛かる、SEO対策に非推奨
SSR (Server-Side Rendering) サーバー リクエスト時にサーバーでJSを実行しHTMLを生成。 初回表示が早い、リアルタイム性が高い。 ページ遷移の際にサーバーで処理されるため、遅くなる場合がある。
SSG (Static Site Generation) ビルド時 ビルド時に予めすべてのHTMLを生成し、リクエストに対して返却。 表示が最速 リアルタイム性に欠ける、更新には手動ビルドが必要。
ISR (Incremental Static Regeneration) サーバー(実行はビルド時と更新時) 指定した時間が経過すると、自動でサーバーがビルドを再実行。 表示が早く、定期的にコンテンツを更新できる。 完全なリアルタイム性はない。

3. 環境構築とルーティング

3.1. 環境構築

Next.jsのプロジェクトを作成するには、Node.jsが必要です。

# プロジェクトの作成
npx create-next-app@latest my-next-app

3.2. ルーティング方法

Pages Router

App Routerより古いルーティング方法(2023年以前)です。

App Router (標準)

現在標準とされているルーティング方法です。

  • ファイルシステムベースのルーティング:appディレクトリの中に作成したディレクトリとファイルに基づいてURLが決定されます
  • 例: app/about/page.tsx → /about

3.3. 動的ルーティング(Dynamic Routing)

ニュース記事のようにIDでページを切り替える際に使用します。

  • ファイル名に[]を使って動的なパスを指定します
    • 例: app/news/[id]/page.tsx
  • ページでIDを使う場合は、引数のparamsから取得できます。コンポーネント関数はasyncにする必要があります
type Props = {
    // paramsで渡されるID
    params: {
        id: string; // IDの型はstringにすることが一般的です
    };
};

export default async function Page({ params }: Props) {
    return (
        <div>
            <h1>これはID{ params.id }の画面です</h1>
        </div>
    );
}

Not Found ページ

存在しないページへのアクセスは、動的ディレクトリより上の階層(例: /news直下など)にnot-found.tsxを配置することで対応できます。

4. サーバー・クライアントコンポーネント

Next.js(App Router)では、コンポーネントの実行場所によって役割が明確に分けられます。

4.1. サーバーコンポーネント (Server Component)

  • デフォルト設定:特に指定がない限り、すべてサーバーコンポーネントです
  • 実行場所:サーバー側で処理されます
  • 特徴:初期表示時のAPI呼び出しやデータ取得(Data Fetching)に適しています

4.2. クライアントコンポーネント (Client Component)

  • 設定方法:ファイルの先頭にuse clientと記述します
  • 実行場所:クライアント側(ブラウザ)で処理されます
  • 特徴:useStateやuseEffectなどのHooksが必要な、ユーザーとのインタラクションを持つコンポーネントに使用します

使い分けの基本:インタラクティブな機能やHooksが必要な部分のみクライアントコンポーネントを使用し、それ以外はパフォーマンスに優れたサーバーコンポーネントを使用するのが基本です。

5. データ取得とAPIルート

5.1. React Server Components (RSC) によるデータフェッチ
Next.jsでは、React Server Componentsの機能を利用し、サーバーコンポーネントの中でasync/awaitを使って直接データ取得が可能です。

これにより、useEffectやuseStateを使わずに、シンプルかつ高速にバックエンドのデータにアクセスできます。

5.2. クライアントコンポーネントでのデータフェッチ

クライアントコンポーネントでAPIを呼び出すのは、クライアントの操作(ボタンクリックなど)によってデータを取得する必要がある場合に限られます。

  • use clientコンポーネント内でボタン押下などをトリガーにfetchを実装します
  • ページ初期読み込み時にAPIを呼ぶ場合はuseEffectを使えますが、基本的にはサーバーコンポーネントで処理することが推奨されます

5.3. APIルートの作成

Next.jsでは、/app/api/~にroute.tsファイルを配置することで、APIエンドポイントを作成できます。

  • URLマッピング:/app/api/news/route.ts → ホスト名/api/news
  • NextRequestでリクエストを、NextResponseでレスポンスを扱います
// /app/api/news/[id]/route.ts
import { NextRequest, NextResponse } from 'next/server';

const articles: { [key: string]: { title: string; content: string } } = {
    "1": { title: 'news1', content: 'news1の内容'},
    "2": { title: 'news2', content: 'news2の内容'},
};

export async function GET(
    req: NextRequest, { params }: { params: { id: string } }
) {
    const id = params.id
    const article = articles[id];

    if (!article) {
        return NextResponse.json({ message: '記事が見つかりません' }, { status: 404});
    }
    return NextResponse.json(article);
}

6. Server Actions によるデータ操作

Server Actionsは、フォームを使ったデータの追加・更新・削除処理を簡単に実装するための機能です。

  • formタグのaction属性に非同期関数を渡します
  • この非同期関数は、関数内にuse serverを追加することで、フォーム送信時にサーバーサイドで実行されます(React 19の機能)

これにより、クライアントとサーバー間の明示的なAPI呼び出しなしに、データのミューテーション(変更)を行うことが可能になります。

まとめ

Next.jsを学ぶ上で重要なキーコンセプトは以下の3つです。

  1. File-system based routing:フォルダとファイルの構造がパスに反映される
  2. React Server Components (RSC):コンポーネントから直接データフェッチ(async/await)が可能
  3. Server Actions:フォームからサーバーの非同期関数(use server)を呼び出し、データ操作を行う

参考資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?