Next.jsとは何か?超簡単にWEBサイトを公開する方法を実例で解説|create-next-appツールの使い方

nextjs-prograshi(プロぐらし)-kv next-js
記事内に広告が含まれていることがあります。

「爆速な表示」「SEOに強い」「React開発を劇的に楽にする」――Next.jsがWeb開発のスタンダードになったのには理由があります。

Next.jsというフレームワークは、Webサイトのパフォーマンスと開発効率を両立させるための最強のツールだからです。

本記事では、Next.jsの基本的な仕組みをわかりやすく解説しつつ、実際に手を動かして簡単なページを公開するまでの具体的なステップを解説しています。


Next.jsとは何か?

Next.jsは、ReactをベースにしたWebアプリケーション開発のためのフレームワークです。

一言でいうと、「React開発をものすごく便利にしてくれるオールインワンツール」のようなものです。

Reactとは?

React.js(リアクト・ジェイエス)は、ユーザーが目にする画面の一部(UI)を構築するためのJavaScriptライブラリです。

Facebook(現Meta)によって開発されました。


ReactとNext.jsの関係

種類名前役割
ライブラリReactボタン、テキストなどのUI部品を作る便利ツール
フレームワークNext.jsReactを活かして、ルーティング、表示速度改善、ビルドなどアプリ全体の機能を整える
Reactとは?



Next.jsでできること(メリット)

React単体の場合、自分で設定しなければいけないことが、Next.jsなら必要な多くの機能が最初から準備されているというメリットがあります。


ルーティングが簡単

通常、Reactで複数のページを持つWebサイトを作るには、別途「React Router」などのライブラリを設定する必要があります。

Next.jsなら、pages(またはapp)フォルダの中にファイルを作るだけで、自動的にそのファイル名がURLとして使えるページになります

ルーティングの例

例えば、pages/about.jsというファイルを作ると、/aboutというURLでアクセスできるようになります。


SSR/SSGによる表示速度の改善

Next.jsが提供する最大のメリットの一つが、Webページの表示を速くする仕組み(レンダリング)が簡単に使えることです。

React単体の場合、ユーザーのブラウザ側でJavaScriptが動いてページを表示するため、(CSR: クライアントサイドレンダリング)初回表示に時間がかかることがあります。

Next.jsの場合は、サーバー側でHTMLを生成してからブラウザに送る、サーバーサイドレンダリング (SSR)が使えるため、表示が速くなり、SEO(検索エンジン最適化)にも強くなります。

ビルド時(公開準備のとき)に全ページをHTMLファイルとして生成する、静的サイト生成 (SSG)により、一度生成すればサーバーへの負荷も少なく、超高速に表示されます。


ビルドツールが含まれている

React単体で開発を始めるには、WebpackやBabelといった複雑なビルドツールの設定が必要になることが多いです。

一方、Next.jsは、そういった面倒な設定はすべてフレームワークが裏側でやってくれるため、開発者はすぐにアプリの機能開発に集中できます。


(実例)Next.jsで超簡単にWEBサイトを作成してみよう!

Next.jsを使うと超簡単にローカル環境にWEBサイトを作ることができます。


Node.jsとnpmのインストール

Next.jsを使うにはNode.jsとnpmが必須です。まずはこれらをインストールする必要があります。


Next.jsプロジェクトの新規作成(create-next-appツール)

create-next-appというツールを使うことで、Next.jsプロジェクトを超簡単に新規作成することができます。

npx create-next-app <プロジェクト名>
注意点

上記コマンドを実行すると、現在いるディレクトリに指定したプロジェクト名のディレクトリを新規生成します

  • npx:ローカルにインストールされていないNode.jsのパッケージ(ツール)を一時的に実行するためのコマンドです。
  • create-next-app:Next.jsのプロジェクトを新規作成するための公式ツールです。
npxとは何か?

npxとは、パッケージをローカル環境にインストールすることなく、一時的にダウンロードして即座に実行し、パッケージを自動的に削除するツールです。

npmとの違いなどより詳しい解説は下記をご参考ください。

> 【Node.js】npxとは何か?メリットやいつ使うか、npmとの違いを実例で解説!


実行すると、「create-next-app」をインストールしていいかと聞かれるので「y」を入力します。


推奨設定を使う

次に、Next.jsの推奨設定を使いたいか?という設問になります。

ここは基本的に「Yes, use recommended defaults(はい)」を選択します。


はいにすると、Next.jsを開発しているVercel社が推奨する以下の技術スタックと設定が、すべて自動でプロジェクトに導入されます。

設定項目技術役割とメリット
TypeScript言語JavaScriptにの概念を追加し、開発中のエラーを減らし、コードの品質を向上させます。規模が大きくなっても管理しやすくなります。
ESLintツールコードの品質をチェックし、書き方を統一するためのツール。バグの早期発見やチーム開発の効率化に役立ちます。
Tailwind CSSCSSフレームワーク独自のクラス名を使って、素早くデザイン(スタイリング)を行うための仕組み。現代のフロントエンド開発で非常に人気です。
App RouterルーティングNext.jsの最新のページ・データ取得方法。Reactの最新機能(Server Componentsなど)を使い、パフォーマンスの高いサイトを構築できます。
Turbopackビルドツール超高速な開発サーバーとビルドを実現するツール。開発中のコード変更が即座に反映されるため、開発体験が大幅に向上します。
Noを選ぶ場合

「No, customize settings」を選んだ場合、上記の各項目について、個別に「使うか」「使わないか」を選択していく必要があります。

既存のプロジェクトに合わせたい場合や、特定の技術(例えばTailwind CSSを使いたくない)に慣れている場合など、細かく設定を制御したい場合に使います。


実行が完了すると、指定したプロジェクト名のディレクトリが生成され、必要なファイル一式が自動生成されます。


開発サーバーの起動

プロジェクトフォルダ内で、以下のコマンドを実行すると、Next.jsの開発サーバーが起動します。

npm run dev

以下のように表示されたら「http://localhost:3000」にアクセスします。

 ▲ Next.js 16.0.0 (Turbopack)
   - Local:        http://localhost:3000

Next.jsのデフォルトのスタートページが表示されれば成功です。


WEBサイトの内容を編集する

WEBサイトのトップページはappディレクトリの中の「page.tsx」ファイルの内容が表示されています。

.tsxとは何か?

拡張子 .tsx は、主にReact アプリケーションで使われるTypeScript ファイルの拡張子です。

これは、TypeScriptのコードに加え、JSX記法を含むことができるファイルです。



デフォルトでは以下のようになっています。

import Image from "next/image";

export default function Home() {
  return (
    <div className="flex min-h-screen items-center justify-center bg-zinc-50 font-sans dark:bg-black">
      <main className="flex min-h-screen w-full max-w-3xl flex-col items-center justify-between py-32 px-16 bg-white dark:bg-black sm:items-start">
        <Image
          className="dark:invert"
          src="/next.svg"
          alt="Next.js logo"
          width={100}
          height={20}
          priority
        />
        <div className="flex flex-col items-center gap-6 text-center sm:items-start sm:text-left">
          <h1 className="max-w-xs text-3xl font-semibold leading-10 tracking-tight text-black dark:text-zinc-50">
            To get started, edit the page.tsx file.
          </h1>
          <p className="max-w-md text-lg leading-8 text-zinc-600 dark:text-zinc-400">
            Looking for a starting point or more instructions? Head over to{" "}
            <a
              href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
              className="font-medium text-zinc-950 dark:text-zinc-50"
            >
              Templates
            </a>{" "}
            or the{" "}
            <a
              href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
              className="font-medium text-zinc-950 dark:text-zinc-50"
            >
              Learning
            </a>{" "}
            center.
          </p>
        </div>
        <div className="flex flex-col gap-4 text-base font-medium sm:flex-row">
          <a
            className="flex h-12 w-full items-center justify-center gap-2 rounded-full bg-foreground px-5 text-background transition-colors hover:bg-[#383838] dark:hover:bg-[#ccc] md:w-[158px]"
            href="https://vercel.com/new?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
            target="_blank"
            rel="noopener noreferrer"
          >
            <Image
              className="dark:invert"
              src="/vercel.svg"
              alt="Vercel logomark"
              width={16}
              height={16}
            />
            Deploy Now
          </a>
          <a
            className="flex h-12 w-full items-center justify-center rounded-full border border-solid border-black/[.08] px-5 transition-colors hover:border-transparent hover:bg-black/[.04] dark:border-white/[.145] dark:hover:bg-[#1a1a1a] md:w-[158px]"
            href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
            target="_blank"
            rel="noopener noreferrer"
          >
            Documentation
          </a>
        </div>
      </main>
    </div>
  );
}


これを以下の内容に書き換えます。

// 'use client' をファイルの先頭に記述することで、
// ブラウザ側の動き(インタラクティブな動作)を扱えるようになります。
'use client'; 

// Reactから useState をインポートします。
import { useState } from 'react';

// トップページ(Reactコンポーネント)の定義
// Next.jsのApp Routerでは、デフォルトでexportするコンポーネントがページになります。
export default function HomePage() {
  // useStateを使って、'count'(カウント数)という状態とその更新関数 'setCount' を定義します。
  // 初期値は 0 です。
  const [count, setCount] = useState(0);

  // ボタンがクリックされたときに実行される関数
  const handleClick = () => {
    // setCountを使って count の値を 1 増やします
    setCount(count + 1);
  };

  // 画面に表示する内容
  return (
    <div style={{ 
      textAlign: 'center', 
      padding: '50px', 
      fontFamily: 'sans-serif' 
    }}>
      
      <h1>Next.js テストサイトへようこそ!</h1>
      <p style={{ fontSize: '1.2em', color: '#555' }}>
        これは、TypeScriptとNext.jsを使って作成したシンプルなテストページです。
      </p>

      {/* カウンター部分 */}
      <div style={{ 
        marginTop: '40px', 
        border: '1px solid #ccc', 
        padding: '20px', 
        borderRadius: '8px', 
        display: 'inline-block' 
      }}>
        <h2>ボタンを押した回数: {count}</h2>
        <button 
          onClick={handleClick}
          style={{ 
            padding: '10px 20px', 
            fontSize: '1em', 
            cursor: 'pointer', 
            backgroundColor: '#0070f3', 
            color: 'white', 
            border: 'none', 
            borderRadius: '5px' 
          }}
        >
          カウントを増やす
        </button>
      </div>

      <p style={{ marginTop: '30px', color: '#888' }}>
        この内容がブラウザに表示されていれば、ローカルサーバーは正常に動作しています。
      </p>

    </div>
  );
}

保存すると、WEBサイトの内容が以下に替わります。


以上で、Next.jsを使った超簡単なWEBサイトの作成と公開は完了です。


サーバーの停止方法

npm run devで起動した開発サーバーは、「ctrl + c」で停止することができます。

もしくは、ターミナルを閉じる事でも停止することができます。

タイトルとURLをコピーしました