デザインについての学習メモブログ

Next.js 入門 #1 : Next.jsって何?Reactとの違いから始めよう

記事内に広告が含まれています。

Next.js 入門 #1 : Next.jsって何?Reactとの違いから始めよう

「Next.jsを勉強しようと思ったけど、Reactと何が違うの?」

この疑問を持ったあなたは、正しい入口に立っています。

Next.jsを理解するには、まずReactとの関係を整理することが近道です。

この記事では、概念の整理から実際に画面が表示されるまでを一緒に進めます。

ReactとNext.jsの関係

まず結論から言うと、Next.jsはReactをベースに作られたフレームワークです。

Reactは「UIを作るためのライブラリ」です。

ボタンやフォームなどの画面部品(コンポーネント)を作る仕組みは提供してくれますが、

  • 「ページ間の移動をどうするか」
  • 「データをどこで取得するか」
  • 「本番用にどうビルドするか」

といった部分は自分で設計する必要があります。

Next.jsはその「自分でやらないといけない部分」をあらかじめ用意してくれたものです。

ルーティング、データ取得、最適化——これらがセットで付いてきます。

Bash
React
  └── UIを作る仕組み(コンポーネント)

Next.js
  ├── React(UIの部分)
  ├── ルーティング(ページ遷移)
  ├── データ取得の仕組み
  ├── ビルド・最適化
  └── サーバーサイド機能

料理に例えると、Reactは「包丁と鍋」で、Next.jsは「包丁と鍋が揃ったキッチン+レシピ集」のようなイメージです。

SPAとSSR——どうやって画面を表示するか

Next.jsを選ぶ理由を理解するために、Webページの表示方法の違いを押さえておきましょう。

SPA(シングルページアプリケーション)

従来のReact(Create React App など)は SPA という方式を取ります。

  1. ブラウザがサーバーに「ページください」とリクエストする
  2. サーバーはほぼ空のHTML大量のJavaScriptを返す
  3. ブラウザがJavaScriptを実行して、画面を組み立てる

つまり、画面を作る作業がすべてブラウザの中で行われます

Bash
ブラウザ  サーバー:「HTMLください」
サーバー  ブラウザ:「空のHTML + JavaScript」
ブラウザ:JavaScriptを実行  画面を組み立てる 

SSR(サーバーサイドレンダリング)

Next.jsが得意とする SSR は逆の発想です。

  1. ブラウザがサーバーに「ページください」とリクエストする
  2. サーバー側で画面を組み立てて、完成したHTMLを返す
  3. ブラウザはそのHTMLをそのまま表示する
Bash
ブラウザ  サーバー:「HTMLください」
サーバー:画面を組み立てる
サーバー  ブラウザ:「完成したHTML」
ブラウザ:そのまま表示 

どちらがいいの?

SPASSR(Next.js)
初回表示速度遅い(JSの実行待ち)速い
SEO弱い(クローラーが読めない場合がある)強い
インタラクション得意組み合わせで対応
サーバー負荷低い状況による

Next.jsはSSRだけでなく、ページごとに「静的生成(SSG)」や「クライアント側のレンダリング(CSR)」も選べます。

柔軟性が高いのも選ばれる理由のひとつです。

開発環境を整える

では実際に動かしてみましょう。必要なものは Node.js だけです。

Node.jsの確認

ターミナル(Macはターミナル、Windowsはコマンドプロンプト or PowerShell)を開いて、以下を実行してください。

Bash
node -v

v18.0.0 以上のバージョンが表示されればOKです。

表示されない場合は nodejs.org からインストールしてください。

プロジェクトを作成する

デスクトップに練習として、開発用フォルダを作成し、そこをカレントディレクトリとして以下のコマンドを実行してください。

Bash
npx create-next-app@latest my-first-nextjs

my-first-nextjsの部分はプロジェクト名なので、自分のアプリ名に置き換えて自由に指定できます。

実行すると、いくつか質問されます。

初心者のうちは以下の設定がおすすめです。

Bash
 Would you like to use TypeScript?  Yes
 Would you like to use ESLint?  Yes
 Would you like to use Tailwind CSS?  Yes(後の記事で使います)
 Would you like to use `src/` directory?  No
 Would you like to use App Router?  Yes
 Would you like to customize the default import alias?  No

今回はsrcディレクトリを使用せず、プロジェクトのフォルダ直下での説明を進めます。(デフォルト設定)

開発サーバーを起動する

Bash
cd my-first-nextjs
npm run dev

ブラウザで http://localhost:3000 を開くと、Next.jsのウェルカムページが表示されます。🎉

プロジェクトの構造を眺めてみる

作成されたフォルダの中身を見てみましょう。

最初は全部理解しなくて大丈夫です。

Bash
my-first-nextjs/
├── app/                ページやレイアウトを置く場所(メイン)
   ├── layout.tsx      全ページ共通のレイアウト
   ├── page.tsx        トップページ(localhost:3000)
   └── globals.css     グローバルなCSS
├── public/             画像などの静的ファイル
├── next.config.ts      Next.jsの設定ファイル
└── package.json        使っているパッケージの一覧

注目してほしいのは app/ フォルダです。

Next.jsでは このフォルダの中にファイルを置くだけでページが作られます

これを App Router と呼びます。詳しくは次の記事で扱います。

はじめてのページを触ってみる

app/page.tsx をエディタで開いて、中身をまるごと以下に書き換えてみてください。

TSX
export default function Home() {
  return (
    <main>
      <h1>こんにちは、Next.js!</h1>
      <p>はじめてのページです。</p>
    </main>
  );
}

保存するとブラウザが自動で更新されて、書いた内容が表示されます。

これが Next.js の ホットリロード機能です。

ファイルを保存するたびに即座に反映されるので、開発がとても快適になります。

まとめ

この記事で学んだこと:

  • Next.jsはReactをベースにしたフレームワーク。ルーティングやデータ取得などがセットで付いてくる
  • SPAとSSRの違い。Next.jsはサーバーで画面を組み立てて返すSSRが得意
  • create-next-app で数分で開発環境が整う
  • app/ フォルダがページを管理する中心地

次の記事では、ページとルーティングを掘り下げます。

「ファイルを置くだけでURLができる」App Routerの仕組みを手を動かしながら体験しましょう。