IT-Q

'use server' と 'use client' は、対になる機能ですか。

役割が違います。use client はここから先がクライアント側だという境界の宣言で、use server はこの関数をクライアントから呼べるようにするという宣言です。

面接官が見ているのはよくある混同。名前が似ているだけで役割が違う。

これは「Route Handler(route.ts)と Server Function は、どう使い分けますか。」への追撃質問です。

よくある答えと、面談でどう見られるか

  • 対ではない。片方は境界の宣言、もう片方はサーバー関数の公開
    名前が似ているだけで役割が違います。ここは混同が多いところです。
  • 対になっていて、サーバーとクライアントを切り替えるためのもの
    対ではありません。Server Component は既定の状態なので、宣言そのものが不要です。
  • 対ではない。Server Component は既定なので宣言が要らない
    本質を押さえています。宣言が要るのは「既定から外れるとき」だけです。
  • 対ではないが、どちらもファイルの先頭に書く点は共通している
    書く位置の話だけだと弱いです。役割の違いを説明できるかが問われます。

面接官は何を見ているか

  • 対ではないと答えた
  • 'use client' は境界、'use server' はサーバー関数の公開だと区別できた
  • 名前が紛らわしいと認識している

模範解答

対ではありません。名前が似ているので混同されますが、役割が違います。

'use client' は、ここから先はクライアント側のモジュールだ、という境界の宣言です。コンポーネントに対して使います。

'use server' は、この関数はサーバーで実行される、という宣言です。クライアントから呼び出せるサーバー側の関数を作るための印で、公式の呼び名は Server Function です。非同期関数にしか付けられません。呼び出しが必ずネットワーク越しになるためです。

「'use server' を付けたら Server Component になる」は誤りです。Server Component は既定の状態であって、宣言は要りません。