Next.js

Next.js Server Actions 完全ガイド – v13.4 から v14 の移行と活用方法

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

Server Actions の全体像とバージョン変遷

Next.js 13 系で初めてプレビューとして提供された Server Actions は、フロントエンドからサーバー側の非同期関数を直接呼び出すことで API Routes を不要にし、開発効率とコードベースのシンプルさを同時に実現します。2024 年に正式リリースされた Next.js 14 では、型安全性や Edge Runtime との互換性が大幅に改善され、プロダクション環境でも安心して利用できるようになりました。本節ではバージョンごとの差分と、公式ドキュメントの最新版 URL を紹介します。

バージョン別主な変更点

以下の表は、実験的機能から安定版へ移行した際に導入された代表的な機能をまとめたものです。表を見るだけで、どのバージョンで何が改善されたか一目で把握できます。

バージョン 主な変更点
v13.4 (experimental) use server ディレクティブが使用可能だが、ビルドサイズ削減は限定的。型推論や Edge 互換性に課題あり。
v14 (stable) 型推論の強化・Edge Function への自動デプロイ・revalidatePath 等キャッシュ制御 API の標準装備。コンパイラレベルで use server を検出し、サーバー専用関数を確実に分離。

参考: 最新の公式ドキュメントは https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations にあります。

正式リリースがもたらす価値

v14 のリリースにより、Server Actions は「実験的」から「本番で推奨できる成熟機能」へと位置付けが変わりました。これにより以下の効果が期待できます。

  • 開発速度の向上:API Routes を書く手間が不要になり、フロントエンド側だけで完結したデータ更新が可能になる。
  • セキュリティの向上:サーバー専用関数はクライアントに送られないため、機密情報が漏洩するリスクを根本的に排除できる。
  • パフォーマンス改善:Edge Runtime への自動デプロイとキャッシュ制御 API により、レイテンシが低減しスケーラビリティが向上する。

基本構文と use server ディレクティブ

Server Action を正しく定義するには、関数の最上部に "use server" と記述してコンパイラに「サーバー側でのみ実行すべき」ことを明示します。このディレクティブが欠けていると、コードはクライアントバンドルに混入し期待通りに動作しません。

ディレクティブの書き方と必須位置

"use server"関数宣言の直後 に置く必要があります。以下は TypeScript で典型的な実装例です。

  • ポイント
  • ファイル全体でサーバー専用関数だけをエクスポートする場合でも、各関数ごとにディレクティブを書きます。
  • export const deleteUser = async (id: string) => { "use server"; … } のようなアロー関数でも同様です。

注意点とベストプラクティス

  • インラインコメントは避ける:ディレクティブ行の前後に余計なコードやコメントが入らないようにします。
  • 型安全性を活かす:Server Action の引数・戻り値は普通の関数と同様に TypeScript で型付けでき、コンパイル時にエラーが検出されます。
  • 副作用はサーバー側だけで完結させる:DB 接続や外部 API 呼び出しは必ず use server が付いた関数内で行い、クライアントへ直接露出させないようにします。

フォームコンポーネントでの活用例とデータフロー

Server Actions は <form>action 属性 に直接関数を渡すだけで、POST/GET リクエストをサーバー側関数へマッピングできます。これにより API Routes を経由しないシンプルなデータ送受信が実現します。

POST フォームの実装例

以下は記事投稿用のフォームです。action={createPost} と書くだけで、送信されたデータはサーバー側 createPost 関数へ渡ります。

  • ポイント
  • method="POST"encType="multipart/form-data" を指定すれば、ファイル添付や大容量データもそのままサーバー関数に届く。
  • CSRF トークンは通常の hidden フィールドで埋め込むだけで、Server Action 側で検証可能です。

GET 検索フォームの実装例

検索系の UI は GET リクエストが自然です。以下はキーワード検索用のシンプルなフォームです。

  • ポイント
  • GET の場合はクエリ文字列が URL に残るため、ブックマークやシェアが容易になる。
  • サーバー側で searchPosts が受け取るのは FormData オブジェクトなので、form.get("q") で簡単に取得できる。

フォーム活用の総合的なメリット

  • コード量削減:fetch 呼び出しやハンドラ作成が不要になるため、フロントエンド側の実装が数行に収まります。
  • 安全性向上:サーバー関数は常に use server が付与された環境で走るため、機密情報がクライアントへ漏れません。
  • UX の最適化useTransition と組み合わせれば楽観的 UI 更新も可能です。

Server Components と Client Components の連携・制約

Next.js では Server Component がサーバー側でレンダリングされ、クライアントには HTML と最小限の JavaScript だけが送られます。一方 Client Component はブラウザ上で実行され、状態管理や副作用フック (useState, useEffect) を利用できます。Server Actions を使う際はこの境界を正しく理解しておくことが重要です。

役割と呼び出しパターン

呼び出し元 推奨手法 補足
Server Component → Server Action <form action={...}> のみ使用 コンポーネント自体は非同期でないため、直接 await できない。
Client Component → Server Action フォームの action 属性か useTransition + 関数呼び出し UI は即時に更新可能で、バックエンド処理は非同期に走る。
Server Component ← Server Action の結果 Props 経由または revalidatePath で再フェッチ キャッシュが自動的に無効化され、最新データが反映される。
  • 注意点:Server Component 内に useStateuseEffect といったクライアント専用フックを入れないこと。これらはコンパイルエラーの原因になります。

データ受け渡しの制限とベストプラクティス

  • FormData のみが安全:Server Action に渡すデータは FormData またはシリアライズ可能な JSON である必要があります。
  • props 経由の更新:Server Action が完了したら revalidatePath を呼び出し、対象ページを再レンダリングさせると UI が自動的に最新になる。
  • キャッシュ戦略:頻繁に変わらないデータは cache: "force-no-store" で無効化し、逆に静的データは revalidate オプションで期限切れを設定できます。

実務導入ガイド:ミューテーション・パフォーマンス・セキュリティ・デバッグ

実際のプロダクトへ Server Actions を組み込む際に留意すべきポイントは、DB ミューテーションの正しい書き方、Edge デプロイ時のビルドサイズ最適化、CSRF 対策、そして効果的なデバッグ手法です。ここではそれぞれの具体例と推奨設定を示します。

DB ミューテーションと外部 API 呼び出しの実装例

以下は Prisma を用いたユーザープロフィール更新に加えて、Slack Webhook へ通知するパターンです。トランザクションやバリデーションも併せて示しています。

  • ポイント
  • Zod によるスキーマバリデーションで型安全性と入力チェックを一元化。
  • prisma.$transaction を使うことで DB 更新と外部通知の原子性を確保。

Vercel デプロイ時の最適化設定とビルドサイズ削減テクニック

Edge Runtime にデプロイする場合は、runtime: "edge" の明示と不要な依存の除去が鍵です。

ビルドサイズ削減のヒント

  • next/bundle-analyzer を有効化し、どのモジュールがクライアントバンドルに含まれているか可視化。
  • 大きなサーバー専用パッケージ(例:sharp, pg)は serverOnly: true フラグで除外。
  • lodash 系は個別インポート (import debounce from "lodash/debounce") に切り替える。

CSRF 対策と SameSite 設定の実装

Server Action はブラウザから直接呼び出されるため、SameSite=Strict の HttpOnly クッキーで CSRF トークンを管理することが推奨されます。以下はトークン生成・埋め込み・検証までの一連フローです。

  • ポイントcookies().set のオプションで sameSite: "strict"httpOnly: true を必ず指定し、クロスサイトからの送信を防ぎます。

エラーハンドリングとバリデーションのベストプラクティス

  • 例外は React の Error Boundary へ:Server Action 内で throw new Error() すると、対応する Server Component のエラーバウンダリが捕捉できる。
  • useActionState(v14)で UI にフィードバック:サーバー側の例外メッセージをクライアントに返し、ユーザーへ適切なエラー表示を行う。

効率的なデバッグ手法

Server Actions のトラブルシューティングは「クライアント側のリクエスト」+「サーバー側の実行ログ」の二方向からアプローチします。

ツール 主な用途
React DevTools(Server Components タブ) Server Component のレンダリング階層と props を確認。use server 関数は表示されないが、呼び出し元の情報が取得可能。
Vercel Dashboard → Functions > Logs Edge/Node Function の実行ログをリアルタイムで閲覧。console.log がそのまま出力されるので、データ受け渡しやエラー詳細がすぐ分かる。
ローカル next dev コンソール 開発環境では標準出力にスタックトレースが表示され、Node デバッガ (node --inspect) に接続できる。
ブラウザ DevTools → Network タブ フォーム送信時の HTTP ヘッダー・ペイロードを確認し、CSRF トークンや multipart データが正しく構成されているか検証できる。

  • ポイントconsole.log は Vercel の「Functions > Logs」でも確認できるため、ローカルと本番環境で同一のデバッグ手順が使える。エラーは必ず throw して React の Error Boundary に委ねると、UI 上で統一的にハンドリングできる。

まとめ

Server Actions は フロントエンドからサーバー側ロジックへの最短ルート を提供し、API Routes の煩雑さを解消します。"use server" ディレクティブで安全性を担保しつつ、フォームの action 属性や useTransition と組み合わせることで UX も向上。実務導入時は 型バリデーション・トランザクション・CSRF 対策・ビルドサイズ最適化 を意識し、React DevTools + Vercel Logs による二重デバッグで問題を早期に切り分けましょう。これらのベストプラクティスを守れば、Next.js 14 の Server Actions を本番プロダクトでも自信を持って活用できます。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-Next.js