Next.jsの「use client」とは?サーバーコンポーネントとクライアントコンポーネントの違い

Next.jsの「use client」とは?サーバーコンポーネントとクライアントコンポーネントの違い Next.js
Next.jsの「use client」とは?サーバーコンポーネントとクライアントコンポーネントの違い
この記事は約4分で読めます。

でじぼうです。

Next.js を使っていると、ファイルの先頭に "use client" と書かれているのを見かけることがあります。

このキーワードには、とても重要な意味があります。この記事では、初心者エンジニア向けに「サーバーコンポーネント」と「クライアントコンポーネント」の違いと、どんなときに "use client" を書くのか解説します!

でじぼう
でじぼう

この記事は下記の方がおすすめ!

  • use clientってなに?
  • サーバーコンポーネントってなに?
  • クライアントコンポーネントってなに?

Instagramフォロワー数9,500人を越える人気のもち・大福店 えにかいたもち

サーバーコンポーネントとは?

Next.js では、特に何も書かないコンポーネントは「サーバーコンポーネント」として扱われます。

  • サーバー上で実行される(ユーザーのブラウザでは動かない)
  • セキュアにデータを扱える
  • F12(開発者ツール)でコードを見ることができない
export default function MyComponent() {
  // サーバー側で実行される
  return <div>サーバーから描画されました</div>;
}

クライアントコンポーネントとは?

"use client" をファイルの先頭に書くと、そのコンポーネントは「クライアントコンポーネント」として動きます。

  • ブラウザ側で実行される
  • ボタンクリックやフォーム送信などの動作ができる
  • 開発者ツールで中身が見える(HTMLやJS)
"use client";

export default function ClientComponent() {
  const handleClick = () => alert("クリックされました");

  return <button onClick={handleClick}>クリック</button>;
}

一度クライアントになると、すべてクライアント扱いに!

親が “use client” を持つとどうなる?

ある親コンポーネントが "use client" を持っていると、 その中に書かれたすべての子コンポーネントも「クライアントコンポーネントとして使われる前提」で動くことになります。

つまり、サーバーで処理したいコードも、クライアント側に送られてしまう可能性があるということです。

途中でサーバーに戻せるのか?

"use client" を途中で解除することはできません

一度そのファイルに "use client" を書くと、そのファイル全体がクライアントコンポーネントとして確定し、途中で "use server" のように戻すことはできません。

サーバー処理をしたいときはどうする?

サーバー側で処理させたいロジックがある場合は、別ファイルのサーバーコンポーネントとして切り出すことが必要です。

"use client" を持っていると、 その中に書かれたすべての子コンポーネントも「クライアントコンポーネント」として扱われます。
つまり、サーバーで処理したいコードも、クライアント側に送られてしまう可能性があるということです。

よりセキュアにしたいときは?

フォーム送信などで await fetch("/api/contact", {...}) のような処理をすることがあります。 この処理を「クライアントコンポーネント内で実行」すると、リクエスト内容がF12で見えてしまうことがあります。

よりセキュアにしたい場合は、

  • ユーザー入力(例:名前やメール)をクライアント側で受け取る
  • それを API Route(サーバー側)に送って処理する という構成にしましょう

まとめ

項目サーバーコンポーネントクライアントコンポーネント
"use client" 必要か❌ 不要✅ 必要
実行される場所サーバー上ブラウザ上
F12で見えるか❌ 見えない✅ 見える
できることデータ取得や表示のみボタン操作・イベント・状態管理などが可能

コメント

タイトルとURLをコピーしました