Server Actionsによるプログレッシブエンハンスメント
Server Actionsを使ってJavaScriptなしでも動作するフォームを構築し、JavaScriptの読み込み後はReactで機能を強化します。
「Server Actionsによるプログレッシブエンハンスメント」はCoddyKit上の無料React Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。
プログレッシブエンハンスメントとは
プログレッシブエンハンスメントとは、動作するHTMLを基本として、そこにJavaScriptの機能を段階的に追加していくWeb開発手法です。JavaScriptを無効にしているユーザーや低速な接続を利用しているユーザー、支援技術を利用しているユーザーを含め、すべてのユーザーが基本機能を利用できます。一方、JavaScriptを有効にしているユーザーには、さらに充実した操作体験が提供されます。
JavaScriptなしの基本動作
action={serverAction}を指定したフォームは、JavaScriptがなくてもページ全体を再読み込みするHTML POSTとして動作します。ブラウザーがフォームを送信し、サーバーがアクションを実行して、更新後のHTMLページを返します。これは1995年以来Webフォームを支えてきた仕組みであり、ReactのServer Actionsは設計上、この仕組みと互換性があります。
JavaScriptなしのサーバーサイドバリデーション
JavaScriptがない場合、バリデーションはサーバーで行う必要があります。Server Actionがフォームデータを検証し、検証に失敗するとエラー状態を返します。サーバーはエラーメッセージをHTMLに埋め込んだページを再レンダリングします。これにより、クライアント側でJavaScriptを実行しなくても、ユーザーはエラーを確認できます。
JavaScriptによる拡張レイヤー
Reactがページをハイドレーションすると、フォーム送信をインターセプトし、ページ全体を再読み込みするPOSTではなく、非同期のServer Action呼び出しとして処理します。基盤となるアクションやフォームの構造を変更することなく、ページを再読み込みせずにその場で更新でき、送信中の状態や楽観的UIも表示できます。
ハイドレーションに安全なパターン
サーバーは、初期状態をHTMLに埋め込んだフォームをレンダリングします。Reactがハイドレーションすると、その初期状態を引き継ぐため、ちらつきや不一致は発生しません。useActionStateフックは、サーバーでレンダリングされた初期状態とクライアントのハイドレーションを適切に調整できるよう設計されています。
すぐに反応する操作感を実現するReactトランジション
Reactのトランジションを使うと、Server Actionの呼び出し中もUIを操作できます。フォーム送信をトランジションで囲むことで、Reactはサーバーとの通信の優先度を下げ、その間もページの応答性を維持できます。これにより、JavaScriptで拡張された操作体験が、ページ全体を再読み込みする場合より大幅に速く感じられます。
UXの比較
JavaScriptなしの場合:ユーザーが送信ボタンをクリックすると、ブラウザーがページ全体のPOSTを送信し、サーバーが新しいHTMLページを返します(短時間の白いちらつきが発生し、スクロール位置もリセットされます)。JavaScriptありの場合:Reactが送信をインターセプトし、アクションを非同期で実行します。ページの変更部分だけがその場で更新されるため、ちらつきもスクロール位置のリセットもありません。
検索エンジンによるインデックス登録
プログレッシブエンハンスメントは、JavaScriptを実行しない可能性がある検索エンジンのクローラーにもメリットがあります。ページ全体をHTMLフォームとして送信できるフォームベースの検索ページやフィルターページは、インデックス登録とクロールが可能です。サーバーでレンダリングされた結果により、クローラーはJavaScriptを待つ空のdivではなく、実際のコンテンツを取得できます。
アクセシビリティ上のメリット
スクリーンリーダーや支援技術は、セマンティックHTMLと組み合わせたときに最も適切に動作します。プログレッシブエンハンスメントを取り入れたフォームでは、支援技術が標準で理解できる実際の<form>、<input>、<button>要素を使用します。JavaScriptはエラーを通知するARIAライブリージョンを追加し、アクセシブルな基本構造を置き換えるのではなく拡張します。
低接続環境とネットワーク耐性
ネットワークが不安定な環境では、JavaScriptバンドルの読み込みに失敗することがあります。プログレッシブエンハンスメントを取り入れたページなら、基本的な用途については引き続き機能します。この耐性は、通信状態の悪い地域でモバイル接続を利用しているユーザーや、ネットワーク状況が大きく変動する地域のユーザーにとって特に重要です。
プログレッシブエンハンスメントを適用する場面
プログレッシブエンハンスメントは、サインアップ、問い合わせ、検索、購入手続きなど、一般公開するフォームで特に効果を発揮します。複雑なインタラクションを必要とする社内ダッシュボードでは、必ずしも必要ありません。マーケティングページ、eコマース、ユーザーオンボーディングのフローなど、できるだけ多くのユーザーに確実に届けることが重要な場面で、意図的に適用してください。
プログレッシブエンハンスメントの定義
プログレッシブエンハンスメントの核心となる原則は何ですか?
レッスンのまとめ
プログレッシブエンハンスメントでは、JavaScriptがなくてもフォームが通常のHTML POSTとして動作します。Server Actionsはこれを標準でサポートしており、action={serverAction}によってページ全体へのPOST送信が可能になります。その後、Reactのハイドレーションによって、フォームは送信中の状態を備えた非同期のその場更新へと拡張されます。この方法により、アクセシビリティ、SEO、低接続環境のユーザーにメリットをもたらしながら、豊かなJavaScript体験も提供できます。
よくある質問
「Server Actionsによるプログレッシブエンハンスメント」レッスンは無料ですか?
はい。「Server Actionsによるプログレッシブエンハンスメント」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。
「Server Actionsによるプログレッシブエンハンスメント」で何を学びますか?
Server Actionsを使ってJavaScriptなしでも動作するフォームを構築し、JavaScriptの読み込み後はReactで機能を強化します。 ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
React Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「Server Actionsによるプログレッシブエンハンスメント」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このReact Academyレッスンでコードを書いて実行できますか?
はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- React 19とNext.jsのServer Actions
- Form Actions:ミューテーションのAPI Routesを置き換える
- useActionStateとuseFormStatus
- Server Actionsによるプログレッシブエンハンスメント