'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 は既定の状態であって、宣言は要りません。