新しいNext.jsプロジェクトのセットアップ方法

システム要件

開始する前に、システムが以下の要件を満たしていることを確認してください:

  • Node.js 18.18 以降
  • macOS、Windows(WSLを含む)、またはLinux

自動インストール

新しいNext.jsアプリを作成する最も簡単な方法は、create-next-appを使用することです。これにより、すべてが自動的にセットアップされます。プロジェクトを作成するには、以下を実行します:

ターミナル
npx create-next-app@latest

インストール中に以下のプロンプトが表示されます:

ターミナル
プロジェクト名を入力してください? my-app
TypeScriptを使用しますか? No / Yes
ESLintを使用しますか? No / Yes
Tailwind CSSを使用しますか? No / Yes
コードを`src/`ディレクトリ内に配置しますか? No / Yes
App Routerを使用しますか? (推奨) No / Yes
`next dev`にTurbopackを使用しますか? No / Yes
インポートエイリアスをカスタマイズしますか? (`@/*`がデフォルト) No / Yes
どのインポートエイリアスを設定しますか? @/*

プロンプトの後、create-next-appはプロジェクト名のフォルダを作成し、必要な依存関係をインストールします。

手動インストール

新しいNext.jsアプリを手動で作成するには、必要なパッケージをインストールします:

ターミナル
npm install next@latest react@latest react-dom@latest

次に、以下のスクリプトをpackage.jsonファイルに追加します:

package.json
{
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint"
  }
}

これらのスクリプトは、アプリケーション開発のさまざまな段階を参照しています:

  • next dev: 開発サーバーを起動します
  • next build: 本番用にアプリケーションをビルドします
  • next start: 本番サーバーを起動します
  • next lint: ESLintを実行します

appディレクトリの作成

Next.jsはファイルシステムベースのルーティングを使用しており、アプリケーション内のルートはファイルの構造によって決定されます。

appフォルダを作成します。次に、app内にlayout.tsxファイルを作成します。このファイルはルートレイアウトです。必須であり、<html>タグと<body>タグを含める必要があります。

export default function RootLayout({
  children,
}: {
  children: React.ReactNode
}) {
  return (
    <html lang="en">
      <body>{children}</body>
    </html>
  )
}
export default function RootLayout({ children }) {
  return (
    <html lang="en">
      <body>{children}</body>
    </html>
  )
}

初期コンテンツを含むホームページapp/page.tsxを作成します:

export default function Page() {
  return <h1>Hello, Next.js!</h1>
}
export default function Page() {
  return <h1>Hello, Next.js!</h1>
}

layout.tsxpage.tsxは、ユーザーがアプリケーションのルート(/)にアクセスしたときにレンダリングされます。

Appフォルダ構造

知っておくと便利:

  • ルートレイアウトの作成を忘れた場合、next devで開発サーバーを実行するとNext.jsが自動的にこのファイルを作成します
  • オプションで、プロジェクトのルートにsrcフォルダを使用して、アプリケーションコードを設定ファイルから分離できます

publicフォルダの作成(オプション)

プロジェクトのルートにpublicフォルダを作成して、画像、フォントなどの静的アセットを保存します。public内のファイルは、ベースURL(/)から始まるパスでコードから参照できます。

これらのアセットはルートパス(/)を使用して参照できます。例えば、public/profile.png/profile.pngとして参照できます:

import Image from 'next/image'

export default function Page() {
  return <Image src="/profile.png" alt="Profile" width={100} height={100} />
}
import Image from 'next/image'

export default function Page() {
  return <Image src="/profile.png" alt="Profile" width={100} height={100} />
}

開発サーバーの実行

  1. npm run devを実行して開発サーバーを起動します
  2. http://localhost:3000にアクセスしてアプリケーションを表示します
  3. app/page.tsxファイルを編集して保存し、ブラウザで更新された結果を確認します

TypeScriptのセットアップ

TypeScriptの最小バージョン: v4.5.2

Next.jsにはTypeScriptサポートが組み込まれています。プロジェクトにTypeScriptを追加するには、ファイルを.ts / .tsxにリネームしてnext devを実行します。Next.jsは必要な依存関係を自動的にインストールし、推奨設定オプションを含むtsconfig.jsonファイルを追加します。

IDEプラグイン

Next.jsにはカスタムTypeScriptプラグインとタイプチェッカーが含まれており、VSCodeや他のコードエディターで高度なタイプチェックとオートコンプリートに使用できます。

VS Codeでプラグインを有効にするには:

  1. コマンドパレットを開きます(Ctrl/⌘ + Shift + P
  2. "TypeScript: Select TypeScript Version"を検索
  3. "Use Workspace Version"を選択
TypeScriptコマンドパレット

詳細についてはTypeScriptリファレンスページを参照してください。

ESLintのセットアップ

Next.jsにはESLintが組み込まれています。create-next-appで新しいプロジェクトを作成すると、必要なパッケージが自動的にインストールされ、適切な設定が行われます。

既存のプロジェクトに手動でESLintを追加するには、next lintをスクリプトとしてpackage.jsonに追加します:

package.json
{
  "scripts": {
    "lint": "next lint"
  }
}

次に、npm run lintを実行すると、インストールと設定プロセスがガイドされます。

ターミナル
npm run lint

以下のようなプロンプトが表示されます:

? ESLintをどのように設定しますか?

❯ Strict (推奨)
Base
Cancel

  • Strict: Next.jsの基本ESLint設定に加えて、より厳格なCore Web Vitalsルールセットを含みます。ESLintを初めて設定する開発者に推奨される設定です
  • Base: Next.jsの基本ESLint設定を含みます
  • Cancel: 設定をスキップします。独自のカスタムESLint設定を計画している場合はこのオプションを選択してください

StrictまたはBaseが選択された場合、Next.jsは自動的にeslinteslint-config-nextを依存関係としてインストールし、選択した設定を含む.eslintrc.jsonファイルをプロジェクトのルートに作成します。

ESLintを実行してエラーを検出するには、next lintを実行します。ESLintが設定されると、ビルド時(next build)にも自動的に実行されます。エラーはビルドを失敗させますが、警告は失敗させません。

詳細についてはESLintプラグインページを参照してください。

絶対インポートとモジュールパスエイリアスの設定

Next.jsはtsconfig.jsonjsconfig.jsonファイルの"paths"および"baseUrl"オプションをサポートしています。

これらのオプションを使用すると、プロジェクトディレクトリを絶対パスにエイリアスできるため、モジュールのインポートがより簡単でクリーンになります。例えば:

// 変更前
import { Button } from '../../../components/button'

// 変更後
import { Button } from '@/components/button'

絶対インポートを設定するには、baseUrl設定オプションをtsconfig.jsonまたはjsconfig.jsonファイルに追加します。例えば:

tsconfig.json または jsconfig.json
{
  "compilerOptions": {
    "baseUrl": "src/"
  }
}

baseUrlパスを設定するのに加えて、"paths"オプションを使用してモジュールパスを"alias"できます。

例えば、以下の設定は@/components/*components/*にマッピングします:

tsconfig.json または jsconfig.json
{
  "compilerOptions": {
    "baseUrl": "src/",
    "paths": {
      "@/styles/*": ["styles/*"],
      "@/components/*": ["components/*"]
    }
  }
}

"paths"baseUrlの場所からの相対パスです。