カテゴリ: Next.js 更新日: 2026/03/26

Next.js Client Componentsの使いどころとディレクトリ整理方法を初心者向けに解説

Next.js Client Componentsのディレクトリ整理方法
Next.js Client Componentsのディレクトリ整理方法

先生と生徒の会話形式で理解しよう

生徒

「先生、Next.jsのClient Componentsって何ですか?」

先生

「簡単に言うと、ブラウザ上で動くコンポーネントのことです。ユーザーの操作に応じて変化する部分に使います。」

生徒

「Server Componentsと何が違うんですか?」

先生

「Server Componentsはサーバーでレンダリングされるので、動的な操作には向きません。Client Componentsはユーザーのクリックや入力に応じて動く部分に最適です。」

生徒

「なるほど。ディレクトリはどう整理すればわかりやすいですか?」

先生

「では、具体的にNext.jsでClient Componentsを整理する方法を見ていきましょう!」

1. Client Componentsとは何か?

1. Client Componentsとは何か?
1. Client Componentsとは何か?

Next.jsでは、ReactコンポーネントをサーバーでレンダリングするServer Componentsと、クライアントでレンダリングするClient Componentsに分けて使うことができます。Client Componentsはユーザー操作に応じてリアルタイムに変化するUIを作るときに必要です。

例えば、ボタンを押すと内容が変わる部分や、フォームに入力した内容を即時に反映させたいときに使います。

2. Client Componentsの作り方

2. Client Componentsの作り方
2. Client Componentsの作り方

Client Componentsを作るには、ファイルの先頭に'use client'を書きます。これにより、そのコンポーネントはブラウザでレンダリングされるようになります。


'use client';
import React, { useState } from "react";

export default function Counter() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>カウント: {count}</p>
      <button onClick={() => setCount(count + 1)}>増やす</button>
    </div>
  );
}
(画面に「カウント: 0」と表示され、ボタンを押すとカウントが増えていきます)

3. ディレクトリの基本整理

3. ディレクトリの基本整理
3. ディレクトリの基本整理

Client Componentsは特定のディレクトリにまとめると管理が楽になります。例えば、components/clientフォルダに入れておくと、どれがClient Componentsか一目でわかります。


// プロジェクト構造例
project/
├─ app/
├─ components/
│  ├─ client/
│  │  ├─ Counter.jsx
│  │  └─ FormInput.jsx
│  └─ server/
│     └─ Header.jsx

Server Componentsはcomponents/serverに分けておくと整理しやすくなります。

4. 小さな単位で分けるのがポイント

4. 小さな単位で分けるのがポイント
4. 小さな単位で分けるのがポイント

Client Componentsは状態やイベントを持つ小さな単位で作るのがコツです。大きなコンポーネントにまとめると再利用が難しくなります。


'use client';
import React, { useState } from "react";

export default function FormInput() {
  const [text, setText] = useState("");

  return (
    <div>
      <input
        type="text"
        value={text}
        onChange={(e) => setText(e.target.value)}
      />
      <p>入力内容: {text}</p>
    </div>
  );
}
(入力すると、下にリアルタイムで文字が表示されます)

5. Client Componentsの再利用方法

5. Client Componentsの再利用方法
5. Client Componentsの再利用方法

Client Componentsを再利用するためには、必要な機能だけを持たせ、propsでデータを渡すようにします。


'use client';
import React from "react";

export default function Button({ label, onClick }) {
  return <button onClick={onClick}>{label}</button>;
}

こうすることで、ボタンの表示内容やクリック時の処理を変えたい場所で簡単に使い回せます。

6. Client ComponentsとServer Componentsを組み合わせる

6. Client ComponentsとServer Componentsを組み合わせる
6. Client ComponentsとServer Componentsを組み合わせる

Server Componentsでデータを取得し、Client Componentsでユーザー操作に応じて表示を更新するのが理想です。


import React from "react";
import Counter from "../components/client/Counter";

export default async function Page() {
  const data = await fetch('https://api.example.com/items')
    .then(res => res.json());

  return (
    <div>
      <h1>商品リスト</h1>
      <ul>
        {data.map(item => <li key={item.id}>{item.name}</li>)}
      </ul>
      <Counter />
    </div>
  );
}
(商品リストはサーバーで取得され、カウンターはクライアントで操作可能です)

7. ディレクトリ整理のベストプラクティス

7. ディレクトリ整理のベストプラクティス
7. ディレクトリ整理のベストプラクティス

長期的なプロジェクトでは、Client Componentsはcomponents/client、Server Componentsはcomponents/serverに分けて、さらに機能ごとにサブフォルダを作ると見通しがよくなります。


// 例: 機能別サブフォルダ
components/
├─ client/
│  ├─ forms/
│  │  └─ FormInput.jsx
│  ├─ buttons/
│  │  └─ Button.jsx
├─ server/
│  ├─ layouts/
│  │  └─ Header.jsx

こうすることで、どのコンポーネントがクライアント側で動くかすぐにわかり、メンテナンスが簡単になります。

8. まとめに向けた使い方のポイント

8. まとめに向けた使い方のポイント
8. まとめに向けた使い方のポイント

Client Componentsを使うと、ユーザー操作に応じた動的なUIを簡単に作れます。整理のポイントは次の通りです。

  • Client Componentsは'use client'で宣言する
  • 小さな単位で作り、再利用できるようにpropsを活用する
  • ディレクトリを分けて整理する(components/clientとcomponents/server)
  • Server Componentsと組み合わせて効率的にデータ表示を行う

これらの方法を意識すれば、Next.jsでの開発がスムーズになります。

まとめ

まとめ
まとめ

本記事では、Next.jsにおけるClient Componentsの基本概念と、ディレクトリ整理の方法、再利用のポイントについて詳しく解説しました。Client Componentsはブラウザ上で動作するReactコンポーネントであり、ユーザーの操作に応じてリアルタイムにUIを変化させるのに最適です。Server Componentsと組み合わせることで、サーバー側でデータを取得しつつ、クライアント側でインタラクティブな操作を可能にする効率的な開発が可能になります。特に長期的なプロジェクトでは、Client ComponentsとServer Componentsを機能ごとにディレクトリで整理しておくことで、コードの見通しが良くなりメンテナンス性も向上します。また、Client Componentsを小さな単位で作り、propsを活用して再利用性を高めることで、複雑なUIも簡単に管理できるようになります。

具体的なディレクトリ整理の例としては、components/clientフォルダにフォームやボタンなどの小さな単位のClient Componentsをまとめ、components/serverフォルダにヘッダーやレイアウトのようなServer Componentsをまとめる方法があります。さらに機能別にサブフォルダを作ることで、どのコンポーネントがどこで使われているのかが一目でわかり、開発チーム内での共有もしやすくなります。

また、Client Componentsを再利用する場合は、必要なデータをpropsで渡すことで、同じコンポーネントを異なる状況で使い回すことができます。これにより、UIの統一感を保ちつつ、コードの重複を減らすことが可能です。さらに、状態管理やイベントハンドリングをClient Componentsに集約することで、ページ全体のレンダリング効率も向上します。Server Componentsでデータを取得しつつ、Client Componentsでユーザー操作に応じた動的表示を行う組み合わせは、Next.jsのモダンな開発スタイルとして非常に効果的です。

本記事のサンプルコードでは、カウントアップボタンや入力フォームを例に、Client Componentsの作り方、propsの使い方、ディレクトリ整理の具体例を示しました。小さな単位でコンポーネントを作ることで、他のページや機能でも簡単に再利用でき、開発効率が格段に向上します。また、ReactのuseStateフックを使った動的なUI更新や、Server ComponentsとClient Componentsを組み合わせたデータ表示の例も紹介しました。


'use client';
import React, { useState } from "react";

export default function SampleButton() {
  const [clicked, setClicked] = useState(false);

  return (
    <div>
      <button onClick={() => setClicked(!clicked)}>
        {clicked ? "クリック済み" : "クリックしてね"}
      </button>
    </div>
  );
}
(画面に「クリックしてね」と表示され、ボタンを押すと「クリック済み」に変わります)
先生と生徒の振り返り会話

生徒

「先生、Client Componentsの整理って結局どうすればいいんでしょうか?」

先生

「まず、Client Componentsはcomponents/clientにまとめるのが基本です。そしてServer Componentsはcomponents/serverにまとめます。」

生徒

「小さな単位で作ると何が良いんですか?」

先生

「小さな単位で作ることで、再利用がしやすくなり、propsで表示内容や動作を簡単に変えられます。これにより、同じコンポーネントを複数のページで活用できます。」

生徒

「Server Componentsと組み合わせるメリットは?」p>

先生

「Server Componentsでデータを取得し、Client Componentsでユーザー操作に応じて表示を変えることで、効率的でインタラクティブなページを作ることができます。」

生徒

「なるほど、整理と再利用のポイントを押さえればNext.jsの開発がスムーズになるんですね。」

先生

「その通りです。ディレクトリ整理、小さな単位での作成、propsの活用、Server Componentsとの組み合わせ、この四つを意識すれば、保守性が高く効率的な開発ができます。」

カテゴリの一覧へ
新着記事
New1
React
ReactのProps Drillingとは?コンテキストAPIで解決する方法を初心者向けに徹底解説
New2
React
Reactのイベントオブジェクト(event)の使い方とよく使うプロパティを初心者向けに解説
New3
React
ReactのContext APIでダークモードを実装!テーマ切り替えの方法を初心者向けに完全解説
New4
React
Reactにおけるイベント処理の基本を初心者向けに解説
人気記事
No.1
Java&Spring記事人気No1
React
Reactとは?初心者でもわかるReact.jsの基本概念と特徴をやさしく解説
No.2
Java&Spring記事人気No2
React
React開発におすすめのVSCode拡張機能まとめ!初心者でもすぐ使える便利ツール紹介
No.3
Java&Spring記事人気No3
React
ReactとTypeScriptの環境構築をやさしく解説!Viteとtsconfigの設定も丁寧に紹介
No.4
Java&Spring記事人気No4
React
React(TypeScript)で学ぶStateの型推論と型指定の違い!型安全なState管理を初心者向けにやさしく解説
No.5
Java&Spring記事人気No5
React
Reactでキーボードイベントを活用する方法!onKeyDown, onKeyUp, onKeyPressを初心者向けに解説
No.6
Java&Spring記事人気No6
Next.js
Next.jsのRoute Groupの使い方を完全ガイド!App Routerでフォルダ構成を整理する方法
No.7
Java&Spring記事人気No7
React
ReactのPresentational Componentを完全ガイド!初心者でもわかるStateを持たないコンポーネントの特徴
No.8
Java&Spring記事人気No8
React
Reactでネストしたコンポーネントにデータを渡す方法を完全解説!Context APIで深い階層も簡単に