レンダリング
レンダリングは、書いたコードをユーザーインターフェイスに変換します。React と Next.js を使用すると、コードの一部をサーバーまたはクライアントでレンダリングできるハイブリッド Web アプリケーションを作成できます。このセクションでは、これらのレンダリング環境、ストラテジー、ランタイムの違いを理解するのに役立ちます。
基礎
手始めに、ウェブの基礎となる 3 つの概念について知っておくと役に立ちます:
- アプリケーションコードが実行される環境:サーバーとクライアント
- ユーザーがアプリケーションにアクセスしたり、対話したりするときに開始されるリクエストとレスポンスのライフサイクル
- サーバーとクライアントのコードを分離するネットワーク境界
レンダリング環境
アプリケーションがレンダリングされる環境には、クライアントとサーバーの 2 つがあります。
- クライアントとは、アプリケーションコードに対するリクエストをサーバーに送信する、ユーザーのデバイス上のブラウザのことです。そしてサーバーからのレスポンスを、ユーザーが操作できるインターフェースに変換します。
- サーバーとは、あなたのアプリケーションコードを保存し、クライアントからのリクエストを受け取って計算処理を行い、適切なレスポンスを返すデータセンターにあるコンピュータのことを指します。
歴史的に、開発者はサーバーとクライアント用にコードを書くときに、異なる言語(JavaScript、PHP など)とフレームワークを使わなければなりませんでした。React では、開発者は同じ言語(JavaScript)と同じフレームワーク(Next.js やお好みのフレームワークなど)を使うことができます。この柔軟性により、コンテキストを切り替えることなく、両方の環境に対してシームレスにコードを書くことができます。
しかし、それぞれの環境には独自の機能と制約があります。そのため、サーバー用とクライアント用に書くコードは必ずしも同じではありません。ある種の操作(データの取得やユーザーの状態の管理など)には、どちらか一方の環境が適しているものがあります。
これらの違いを理解することが、React と Next.js を効果的に使うための鍵です。Server ComponentsとClient Componentsのページで、その違いと使用例について詳しく説明します。本章では、まず土台を固めていきましょう。
リクエストとレスポンスのライフサイクル
大まかに言うと、すべてのウェブサイトは以下のリクエストとレスポンスのライフサイクルに従います:
- ユーザーアクション:ユーザーがウェブアプリケーションと対話します。リンクをクリックしたり、フォームを送信したり、ブラウザのアドレスバーに直接 URL を入力したりします
- HTTP リクエスト:クライアントはHTTPリクエストをサーバーに送信します。リクエストにはどのリソースが要求されているか、どのメソッドが使われているか(例:
GET
、POST
)、必要であれば追加データなど、必要に応じた情報が含まれています - サーバー:サーバーはリクエストを処理し、適切なリソースで応答します。このプロセスには、ルーティングやデータのフェッチなど、いくつかのステップがあります
- HTTP レスポンス:リクエストを処理した後、サーバーは HTTP レスポンスをクライアントに送り返します。このレスポンスには、ステータスコード(リクエストが成功したかどうかをクライアントに伝える)とリクエストされたリソース(HTML、CSS、JavaScript、静的アセットなど)が含まれます
- クライアント:クライアントはリソースを解析し、ユーザーインターフェースをレンダリングします
- ユーザーアクション:ユーザーインターフェイスがレンダリングされると、ユーザーはそれを操作することができ、その後、ここまでのライフサイクルのプロセスが再び始まります
ハイブリッド Web アプリケーションを構築する上で重要なのは、ライフサイクルの中でどのように作業を分担するか、そしてネットワーク境界をどこに配置するかを決めることです。