ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
この記事の要点
- 前提は Node.js 20.9 以上。18 系はバージョン 16 でサポート対象外になったため、まずここを確認する。
- プロジェクト生成は
npx create-next-app@latest。対話に答えるか、--yesで推奨設定のまま作る。 - 最小構成は
app/layout.tsxとapp/page.tsxの 2 ファイル。ルートレイアウトは必須で、htmlとbodyを自分で書く。 - 開発サーバーは
npm run devでlocalhost:3000に起動する。バンドラは Turbopack が既定で、フラグ指定は不要。 - バージョン 16 では
next lintが廃止された。Lint は ESLint や Biome を npm スクリプトから直接呼ぶ。
Next.js の開発は、Node.js の上でビルドと開発サーバーが動くことを前提にしています。この記事では、必要な前提の確認から、プロジェクトの生成、生成されたファイルが何をしているのかまでを順に見ていきます。手を動かす前に「どのファイルが何のために存在するのか」を掴んでおくと、後の回で扱うルーティングやデータ取得が理解しやすくなります。
1前提環境を確認する
まず Node.js のバージョンを確認します。Next.js 16 系の最低要件は Node.js 20.9 で、Node.js 18 はサポート対象外です。TypeScript を使う場合は 5.1 以上が必要になります。
node -v # v20.9.0 以上であること
npm -v
古いバージョンが入っている場合は、Node.js のバージョン管理ツール(nvm など)で切り替えるか、公式サイトから LTS 版を入れ直します。ここを飛ばして進めると、プロジェクト生成そのものは通るのに開発サーバーの起動で不可解なエラーになることがあります。
| 要件 | 必要なバージョン |
|---|---|
| Node.js | 20.9 以上(LTS 推奨) |
| TypeScript | 5.1 以上 |
| ブラウザ | Chrome / Edge 111 以上、Firefox 111 以上、Safari 16.4 以上 |
| OS | macOS / Windows(WSL を含む)/ Linux |
2プロジェクトを生成する
公式の生成ツール create-next-app を使うのが最短です。グローバルインストールは不要で、npx を通して毎回最新版を呼び出します。
npx create-next-app@latest
実行するとプロジェクト名を尋ねられ、続いて設定方法を選ぶ質問が出ます。推奨設定を選べば TypeScript・ESLint・Tailwind CSS・App Router が有効な状態で生成されます。設定を自分で選ぶ場合は、リンターの種類(ESLint か Biome)、React Compiler の有無、src/ ディレクトリを使うか、インポートエイリアス(既定は @/*)などを個別に指定できます。
質問をすべて省略して推奨設定のまま作りたいときは --yes を付けます。
npx create-next-app@latest my-app --yes
cd my-app
npm run dev
ブラウザで http://localhost:3000 を開くと初期ページが表示されます。ソースを保存すると、ページを再読み込みしなくても画面に反映されます。
3手作業で最小構成を作る
生成ツールが何をしているのかを理解するために、最小構成を手で作ってみるのは有効です。必要なパッケージは 3 つだけです。
npm i next@latest react@latest react-dom@latest
次に package.json にスクリプトを追加します。
{
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "eslint"
}
}
そして app フォルダを作り、その中に ルートレイアウトを置きます。これは必須のファイルで、html タグと body タグを自分で書く必要があります。
// app/layout.tsx
export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<html lang="ja">
<body>{children}</body>
</html>
)
}
最後にトップページを作れば動きます。
// app/page.tsx
export default function Page() {
return <h1>Hello, Next.js!</h1>
}
この 2 ファイルがそろった状態で / にアクセスすると、レイアウトがページを包んだ形で描画されます。なお、ルートレイアウトを作り忘れたまま next dev を実行した場合は、Next.js が自動的に生成します。
4npm スクリプトの役割
| コマンド | 役割 | 使う場面 |
|---|---|---|
next dev | 開発サーバーを起動する。ファイル保存が即座に画面へ反映される | 開発中つねに |
next build | 本番用に最適化してビルドする | デプロイ前・CI |
next start | ビルド済みの成果物を本番モードで配信する | 自前サーバーでの運用 |
eslint | コードの静的検査 | コミット前・CI |
ここで一つ注意点があります。バージョン 16 で next lint コマンドは廃止され、next build も自動でリントを走らせなくなりました。古い記事のとおりに next lint を書くと「そんなコマンドはない」と言われます。ESLint か Biome を npm スクリプトから直接呼ぶ形に置き換えてください。
5バンドラは Turbopack が既定
バージョン 16 から、開発・ビルドとも Turbopack が既定のバンドラになりました。以前必要だった --turbopack フラグは不要です。
"dev": "next dev""build": "next build"フラグなしで Turbopack が使われる。
"dev": "next dev --turbopack"動作はするが冗長。逆に Webpack を使いたい場合だけ
--webpack を明示する。独自の Webpack 設定を持つプロジェクトで next build を実行すると、設定の食い違いを防ぐためにビルドが失敗します。この場合は Turbopack 向けに設定を書き換えるか、--webpack で明示的に従来のバンドラを使います。
6パスエイリアスを整える
コンポーネントが深い階層に増えてくると、../../../components/button のような相対パスが読みにくくなります。tsconfig.json の baseUrl と paths を設定すると、絶対パス風に書けます。
{
"compilerOptions": {
"baseUrl": "src/",
"paths": {
"@/components/*": ["components/*"],
"@/styles/*": ["styles/*"]
}
}
}
これで import { Button } from '@/components/button' と書けるようになります。生成ツールで作った場合は既定で @/* が設定済みです。
7つまずきやすいところ
- ポートが埋まっている:3000 番が使用中だと起動に失敗します。別プロセスを止めるか、起動オプションでポートを変更します。
node_modulesを Git に入れてしまう:巨大になるため.gitignoreで除外するのが基本です。git 管理の対象は原則ソースと設定ファイルだけにします。- 同じプロジェクトで
next devを二重起動する:バージョン 16 ではロックの仕組みが入り、二重起動が防がれます。なおnext devとnext buildは出力先が分かれたため、同時に実行できます。 - 環境変数が読まれない:
.env.localに書いた値のうち、ブラウザ側で参照できるのはNEXT_PUBLIC_で始まるものだけです。詳しくは 環境変数の設定方法 の考え方と合わせて、本番ビルドとセルフホスト で扱います。
ここまでで、動く土台と各ファイルの意味が揃いました。次は app ディレクトリの中身、つまりフォルダ構成がどう URL に対応するのかを見ていきます。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 Spring Frameworkのアノテーション一覧
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- PHPでのファイルアップロード方法|multipart/form-dataと$_FILES 2026-08-07 17:15:57
- PHP $_SERVERとは|DOCUMENT_ROOT・PHP_SELFなど主な要素 2026-08-07 17:15:57
- Scratchのアカウントの作り方|メールアドレスとユーザー名の登録手順 2026-08-07 17:15:57
- djangoにおけるMVCアプリケーション実装例 2026-08-07 17:15:57
- Bluetoothとは|仕組み・BLEとClassicの違い・用途 2026-08-07 17:15:57
- Spring Bootのテスト入門|@SpringBootTestとJUnitでの単体・結合テスト 2026-08-07 17:15:57
- Java とは?言語仕様・JVM・主要フレームワーク一覧 2026-08-07 17:15:56
- インストール方法(Windows版) 2026-08-07 17:15:56
- APIキー取得方法 2026-08-07 17:15:56
- 【PHPフレームワーク】Laravelの使い方 2026-08-07 17:15:56
- Scratch 作品の公開方法 2026-08-07 17:15:56
- Google OAuth 2.0 認証の実装方法 2026-08-07 17:15:56
- データベースとは?RDB / NoSQL / SQL の基礎 2026-08-07 17:15:56
- インストール(eclipseプラグイン) 2026-08-07 17:15:56
- Spring Frameworkの使い方 2026-08-07 17:15:56
コメントを削除してもよろしいでしょうか?