PHPエンジニアのための Next.js 入門以前
Next.js への理解
Next.js は、Node.js 上に構築されたオープンソースの Web アプリケーションフレームワークであり、サーバーサイドスクリプトや静的 Web サイトの生成などの、React ベースの Web アプリケーション機能を有効にする。
以下では、上記内容をより細分化して解説していきます。
「Node.js」とは
JavaScript の実行環境には大きく分けて以下の 2 種類があります。
-
クライアントサイド
- 実行環境: Web ブラウザ
- Web ブラウザに組み込まれた JavaScript エンジン(例: Chrome の V8 エンジン)で実行される
- 例: 動的な HTML 要素の変更、Ajax 通信など
-
サーバーサイド
- 実行環境: サーバー(またはローカル PC)
- Node.js などの JavaScript ランタイムによって実行される
- 例: API の処理、静的ファイルの生成など
Node.js は、この「サーバーサイド JavaScript の実行環境」を提供するツールです。Web ブラウザの外で JavaScript を動かすことが可能になり、PHP や Python のように、サーバーサイドでのスクリプト実行やファイル操作、データベース接続が行えます。
「Web アプリケーションフレームワーク」とは
Web アプリケーションを効率的に開発するために、あらかじめ一般的な機能(ルーティング、データベース操作、テンプレートエンジンなど)を備えた開発ツールを指します。
Next.js は、React を基盤としつつ、サーバーサイドレンダリング(SSR)や静的サイト生成(SSG)といった、React 単体では提供されない高度な機能を追加したフレームワークです。
「React ベースの Web アプリケーション機能」とは
React は SPA(Single Page Application)を効率的に開発するための JavaScript ライブラリです。
以下のポイントが重要です:
-
SPA の特性
React は、ページ遷移なしでページコンテンツの動的な書き換えが可能です。しかし、React 単体では URL ごとのページレンダリング(ルーティング)機能がないため、React Router などの補助ライブラリが必要です。 -
React の構文
React は JavaScript の拡張構文(JSX)を用いるため、そのままではブラウザで実行できません。Webpack や Babel を用いて、ブラウザが解釈可能な JavaScript コードに「コンパイル」されます。 -
効率化の目的
React は「JavaScript で可能なこと」を効率化するためのツールであり、特別な新しい機能を提供するものではありません。
「サーバーサイドスクリプトや静的 Web サイトの生成」とは
Next.js は、React に以下の追加機能を提供します。
-
サーバーサイドスクリプト(SSR: Server-Side Rendering)
ページの HTML をリクエストごとにサーバーで生成します。PHP のように、サーバー上で処理を実行し、結果をクライアントに送信する仕組みです。 -
静的 Web サイトの生成(SSG: Static Site Generation)
ビルド時に HTML ファイルを事前に生成し、リクエスト時にはそれを直接返します。これにより、読み込み速度が向上し、サーバー負荷も軽減されます。
Next.js 上のコードはどのように利用されるのか
Next.js プロジェクトのディレクトリ構成は以下の通りです:
- app: App Router を使用する場合のコンポーネントとルート
- pages: Pages Router を使用する場合のルート
- public: 静的アセット(画像や CSS)を配置
- src: (任意)ソースコードを配置
Next.js では、開発者が記述した React コードはそのまま実行されるのではなく、ビルドプロセスを経て、以下のように変換されます。
-
クライアントサイド
- コンパイル後のコードは
.next/static
配下に配置され、ブラウザで実行されます。これには CSS や JavaScript ファイルが含まれます。
- コンパイル後のコードは
-
サーバーサイド
- サーバー側の処理は
.next/server
配下に配置され、Node.js で実行されます。例えば、SSR の場合、リクエストを受けて HTML を生成する処理が行われます。
- サーバー側の処理は
Next.jsのコンパイル後のフォルダ構造には、Laravelのpublicディレクトリやサーバーサイド処理が格納されたappディレクトリといった要素に類似する部分があります。ただし、Laravelがインタプリタ型のPHPで動作するのに対し、Next.jsは事前ビルド型であり、開発時の構造と運用時の構造が異なるという特徴があります。この点で、Next.jsはPHPフレームワークをそのままNode.jsに置き換えたものではなく、クライアントサイドとサーバーサイドを統合する特有の設計を持ったフレームワークです。
Next.js の特徴
Next.js は、クライアントサイド(React)とサーバーサイド(Node.js)を統合的に扱えるフレームワークです。この統合性により、React 構文を用いて効率的に Web アプリケーションを構築できる点が最大の特徴です。
特に、以下の点で他のフレームワークやライブラリと一線を画します:
-
クライアントサイドとサーバーサイドの統合
- Laravel などの PHP フレームワークとは異なり、同じコードベースでクライアントサイドとサーバーサイドを管理可能です。
-
柔軟なレンダリング方式
- 静的生成(SSG)、サーバーサイドレンダリング(SSR)、クライアントサイドレンダリング(CSR)を用途に応じて選択できます。
-
React を拡張した効率的な開発環境
- ルーティング、データフェッチング、ビルドプロセスなど、React 単体では不足している機能を補完しています。
以上の点から、Next.js は「React を基盤にサーバーサイドの処理を統合した高機能フレームワーク」として位置づけられます。