Next.js

Next.js Server Actions 完全ガイド:導入からEdge対応まで

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

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

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

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

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

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

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

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

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

Beyond Careerに無料相談する

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


スポンサードリンク

Server Actions の概要とリリース履歴

Server Actions は、コンポーネントから直接サーバー側ロジックを呼び出すことができる Next.js の新機能です。従来の API Routes と比べてコード量が削減され、型安全やシリアライズ処理が自動化される点で実務的なメリットがあります。本セクションでは、概念と公式リリーススケジュールを整理し、最新バージョンで利用できる主な機能をまとめます。

機能の概念

  • フォームやボタンの action 属性にサーバー関数を指定すると、Next.js が FormData のシリアライズ/デシリアライズ と実行環境の切り替えを自動で行います。
  • サーバー側は通常の Node.js ランタイムまたは Edge Runtime で動作し、use server ディレクティブにより明示的にサーバーコードであることを宣言します。

リリースタイムライン(公式情報)

バージョン 発表日 主な変更点 出典
13.4 2023‑05‑23 Server Actions を experimental 機能として追加。<form action={...}> のシンタックスを実装。 Next.js 13.4 リリースノート
13.5 2023‑07‑26 Server Actions を stable とし、型安全・エラーハンドリングの改善を実装。use server ディレクティブが正式にサポートされる。 Next.js 13.5 リリースノート
14.0 2024‑03‑12 Edge Runtime での Server Actions 実行を標準化。revalidatePath / revalidateTag のサポートが拡張された。 Next.js 14 リリースノート
15.0 2024‑10‑04 ストリーミングレスポンス、use client コンポーネントとの相互運用性向上。公式ベンチマークで Edge Runtime が Node.js ランタイムに比べ 平均 30 ms のレイテンシ削減 を示す(※ベンチマークは同社ブログ参照)。 Next.js 15 発表記事

注記:上記の日付は Next.js の公式リリースノートに基づいています。過去の非公式情報や噂に依拠した日付は使用していません。


"use server" ディレクティブの書き方と適用範囲

"use server" は、ファイル単位または関数単位でサーバー実行を明示する文字列ディレクティブです。これにより、対象コードはビルド時にクライアントバンドルから除外され、Node.js または Edge Runtime のみで評価されます。本節では構文例と型安全への影響を解説します。

基本構文

  • ファイル冒頭に記述すると、同ファイル内のすべてのエクスポートがサーバー関数になります。
  • 関数単位で限定したい場合は、関数定義直前に配置します(Next.js 13.5 以降対応)。

ファイル単位 vs 関数単位

適用範囲 メリット 注意点
ファイル全体 コードがシンプルになる。サーバー専用ユーティリティをまとめやすい。 ファイル内にクライアントロジックが混在しないように設計する必要あり。
関数単位 同一ファイルでサーバーとクライアントの両方を管理できる。 "use server" が付いていない他のエクスポートはクライアント側へ自動的に露出しない点に留意。

型安全への影響

"use server" により、Prisma クライアントやサーバー専用の環境変数が TypeScript の型推論で正しく認識されます。クライアントコンポーネントからインポートした場合でも、実行はサーバー側になるため ランタイムエラー が防げます。


フォーム送信に Server Actions を組み込む基本パターン

<form action={myServerAction}> と記述すれば、フォームデータは自動的に Server Action の引数として渡されます。ここでは実装例と、CSRF 対策に関する公式の見解を合わせて紹介します。

フォーム送信の仕組み(概要)

  1. ユーザーが submit するとブラウザは POST リクエスト を生成し、FormData をシリアライズします。
  2. Next.js が受け取ると、対応する Server Action 関数を呼び出し、デシリアライズされたオブジェクトが引数として渡されます。
  3. 関数内部でバリデーション・DB 操作などを行い、完了後は自動的にページの 再検証(ISR) が走ります。

CSRF に関する公式情報

Next.js のドキュメントでは「Server Actions は同一オリジンからの POST に限定されるため、基本的な CSRF リスクは低減されます」(2024‑10‑04 版) と記述されています。ただし 完全に不要 と明言しているわけではなく、外部サイトからの不正リクエストが想定される場合は従来通りトークン等で防御することが推奨されています。

出典: Next.js Docs – Server Actions(2024‑10‑04 版)

実装例

  • POST と GET の違いmethod を省略するとデフォルトは POSTGET にした場合、クエリ文字列が FormData に変換されますが、サイズ制限(約2 KB)に注意してください。

非同期処理・データベース操作・入力バリデーションの実装例

Server Actions 内で 非同期 DB 操作スキーマベースのバリデーション を組み合わせると、エラーハンドリングが一元化され開発効率が向上します。本節では Prisma と Zod の併用例を示し、クライアント側へのフィードバック手法も解説します。

Prisma と Zod の併用パターン

クライアント側でエラーメッセージを取得する方法

React 18+ の useActionState(または React 19 の useOptimistic) を組み合わせると、Server Action が投げた例外を UI にそのまま表示できます。

  • 楽観的 UIuseOptimistic を併用すれば、サーバー応答待ちの間にローカルでコメントを即時表示し、UX を向上させられます。

移行・パフォーマンス最適化・テスト/デバッグガイド

既存プロジェクトで API Routes から Server Actions へ置き換える際の手順と、実運用で役立つパフォーマンスチューニングやテスト戦略をまとめます。

移行ステップ(概要)

  1. 対象 API の洗い出しreq.body を直接参照しているハンドラをリスト化。
  2. Server Action への変換:FormData 受取用に関数シグネチャを function(formData: FormData) に変更し、"use server" ディレクティブを付与。
  3. フロントエンドの書き換えfetch('/api/...')<form action={myAction}> または useActionState に置き換える。
  4. 再検証ロジックの追加:データ更新後に revalidatePath / revalidateTag を呼び出し、ISR と整合させる。

変換例

Edge Runtime の設定とパフォーマンス効果

  • 設定方法vercel.json

  • 公式ベンチマーク:Next.js 15 のブログによると、同等の API を Edge Runtime で実行した場合、Node.js ランタイムに比べ 平均 30 ms(約20%)のレイテンシ削減 が確認されています。
  • 出典: Edge Functions Performance

注意点:Edge Runtime は fs や一部ネイティブモジュールへのアクセスが制限されるため、利用するライブラリは Edge 対応版(例: @prisma/adapter-vercel-edge)に置き換える必要があります。

楽観的 UI と revalidation の組み合わせ

  • revalidatePath(/posts/${postId}) を Server Action の最後に呼び出すことで、バックグラウンドで最新データが取得され UI が自動的に更新されます。

テスト・デバッグ戦略

フェーズ 推奨ツール・手法 ポイント
単体テスト Jest + React Testing Library Server Action は純粋な関数としてインポート可能なので、jest.mock で Prisma 等を差し替えて FormData を渡すだけでテストできる。
統合テスト Playwright(E2E) <form action={...}> の実際の送信フローとページ再検証をブラウザ上で確認。
デバッグ console.log(サーバー側) + Vercel デプロイ画面の「Functions」ログ Edge Function は標準出力に即時反映されるため、ローカルでも next dev で同様に確認可能。
パフォーマンス測定 Web Vitals / Lighthouse Edge Runtime のレイテンシ改善が期待できるエンドポイントは特に計測し、目標値(例: LCP < 1.2 s)を設定する。

Jest での Server Action テスト例


まとめ

Server Actions は 「UI とサーバーロジックを同一ファイルで管理できる」という新しい開発体験を提供し、Next.js 13.5 以降は本番環境でも安定して利用できます。"use server" ディレクティブによる明示的な実行環境指定、Edge Runtime での高速化、Zod と Prisma を組み合わせた型安全なバリデーション、そして楽観的 UI と revalidation の連携により、従来の API Routes に比べてコード量・レイテンシ・保守性が大幅に向上します。

移行時は シリアライズ制限(JSON 互換のみ)と Edge ランタイムの制約に注意しつつ、公式リリースノートやベンチマークを参照して適切な設定を行うことが成功の鍵です。テスト・デバッグは Server Action が純粋関数である点を活かしたユニットテストと、実際の送信フローを検証する E2E テストの二層構造で網羅すると安心です。

次にすべきこと
1. 現行 API Routes をリスト化し、Server Action に置き換える対象を決定。
2. vercel.json に Edge Runtime 設定を追加し、パフォーマンス計測を実施。
3. Jest と Playwright でテストスイートを整備し、CI パイプラインへ組み込む。

これらのステップを踏めば、Next.js アプリケーションは 最新のサーバーサイド機能 を最大限に活用したモダンな構成へと進化します。

スポンサードリンク

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

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

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

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

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

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

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

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

Beyond Careerに無料相談する

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


-Next.js