新しいNext.jsプロジェクトの設定方法
システム要件
- Node.js 18.18 以降。
- macOS、Windows(WSLを含む)、Linuxがサポートされています。
自動インストール
新しいNext.jsアプリを始めるには、create-next-app
を使用することをお勧めします。これにより、すべてが自動的に設定されます。プロジェクトを作成するには、次のコマンドを実行します:
npx create-next-app@latest
インストール時に、以下のプロンプトが表示されます:
What is your project named? my-app
Would you like to use TypeScript? No / Yes
Would you like to use ESLint? No / Yes
Would you like to use Tailwind CSS? No / Yes
Would you like your code inside a `src/` directory? No / Yes
Would you like to use App Router? (recommended) No / Yes
Would you like to use Turbopack for `next dev`? No / Yes
Would you like to customize the import alias (`@/*` by default)? No / Yes
What import alias would you like configured? @/*
プロンプトの後、create-next-app
はプロジェクト名のフォルダを作成し、必要な依存関係をインストールします。
手動インストール
新しいNext.jsアプリを手動で作成するには、必要なパッケージをインストールします:
npm install next@latest react@latest react-dom@latest
package.json
ファイルを開き、次のscripts
を追加します:
{
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
}
}
これらのスクリプトはアプリケーション開発の異なる段階を指します:
dev
:next dev
を実行し、開発モードでNext.jsを起動します。build
:next build
を実行し、本番用にアプリケーションをビルドします。start
:next start
を実行し、Next.js本番サーバーを起動します。lint
:next lint
を実行し、Next.jsの組み込みESLint設定をセットアップします。
app
ディレクトリを作成する
Next.jsはファイルシステムルーティングを使用しており、アプリケーションのルートはファイルの構造によって決定されます。
app
フォルダを作成し、その中にlayout.tsx
とpage.tsx
ファイルを追加してください。これらはユーザーがアプリケーションのルート(/
)にアクセスしたときにレンダリングされます。
必須の<html>
タグと<body>
タグを含むルートレイアウトをapp/layout.tsx
内に作成します:
export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<html lang="en">
<body>{children}</body>
</html>
)
}
最後に、初期コンテンツを含むホームページapp/page.tsx
を作成します:
export default function Page() {
return <h1>Hello, Next.js!</h1>
}
補足:
layout.tsx
を作成し忘れた場合、next dev
で開発サーバーを実行すると、Next.jsは自動的にこのファイルを作成します。- オプションでプロジェクトのルートに
src
ディレクトリを使用して、アプリケーションのコードを設定ファイルから分離することができます。
public
フォルダを作成する(オプション)
オプションで、プロジェクトのルートにpublic
フォルダを作成して、画像やフォントなどの静的アセットを保存できます。public
内のファイルは、ベースURL(/
)から始まるコードで参照できます。
開発サーバーを実行する
npm run dev
を実行して開発サーバーを起動します。http://localhost:3000
にアクセスして、アプリケーションを表示します。app/page.tsx
ファイルを編集して保存すると、ブラウザに更新された結果が表示されます。
TypeScriptの設定
最小限のTypeScriptバージョン:
v4.5.2
Next.jsには組み込みのTypeScriptサポートがあります。プロジェクトにTypeScriptを追加するには、ファイルの拡張子を.ts
/.tsx
に変更します。next dev
を実行すると、Next.jsは自動的に必要な依存関係をインストールし、推奨設定オプションを含むtsconfig.json
ファイルを追加します。
IDEプラグイン
Next.jsには、VSCodeやその他のコードエディタが高度な型チェックと自動補完に使用できるカスタムTypeScriptプラグインと型チェッカーが含まれています。
VS Codeでプラグインを有効にするには:
- コマンドパレットを開き(
Ctrl/⌘
+Shift
+P
) - 「TypeScript: Select TypeScript Version」を検索
- 「Use Workspace Version」を選択します
これで、ファイルを編集するときにカスタムプラグインが有効になります。next build
を実行すると、カスタム型チェッカーが使用されます。
プロジェクトでTypeScriptを使用する方法の詳細については、TypeScript設定ページをご覧ください。
ESLintの設定
Next.jsには組み込みのESLintが付属しており、create-next-app
で新しいプロジェクトを作成すると、必要なパッケージを自動的にインストールし、適切な設定を行います。
既存のプロジェクトにESLintを追加するには、package.json
にnext lint
をスクリプトとして追加します:
{
"scripts": {
"lint": "next lint"
}
}
次に、npm run lint
を実行すると、インストールと設定プロセスが案内されます。
npm run lint
次のようなプロンプトが表示されます:
? How would you like to configure ESLint?
❯ Strict (recommended)
Base
Cancel
- Strict: Next.jsの基本ESLint設定と、より厳格なCore Web Vitalsルールセットが含まれます。ESLintを初めて設定する開発者には、この構成が推奨されます。
- Base: Next.jsの基本ESLint設定が含まれます。
- Cancel: ESLint設定を含めません。独自のカスタムESLint設定をセットアップする予定がある場合のみ、このオプションを選択してください。
いずれかの構成オプションを選択すると、Next.jsは自動的にアプリケーションの依存関係としてeslint
とeslint-config-next
をインストールし、選択した構成を含む.eslintrc.json
ファイルをプロジェクトのルートに作成します。
エラーを検出するために、ESLintを実行したい時はいつでもnext lint
を実行できます。ESLintが設定されると、ビルド(next build
)のたびに自動的に実行されます。エラーはビルドを失敗させますが、警告は失敗させません。
プロジェクトでESLintを設定する方法の詳細については、ESLintプラグインページをご覧ください。
絶対インポートとモジュールパスエイリアスの設定
Next.jsには、tsconfig.json
およびjsconfig.json
ファイルの"paths"
および"baseUrl"
オプションの組み込みサポートがあります。これらのオプションを使用すると、プロジェクトディレクトリを絶対パスにエイリアス設定でき、モジュールのインポートが容易になります。例えば:
// 変更前
import { Button } from '../../../components/button'
// 変更後
import { Button } from '@/components/button'
絶対インポートを設定するには、tsconfig.json
またはjsconfig.json
ファイルにbaseUrl
設定オプションを追加します。例えば:
{
"compilerOptions": {
"baseUrl": "src/"
}
}
baseUrl
パスを設定することに加えて、"paths"
オプションを使用してモジュールパスに"alias"
を設定できます。
例えば、次の設定では@/components/*
をcomponents/*
にマップします:
{
"compilerOptions": {
"baseUrl": "src/",
"paths": {
"@/styles/*": ["styles/*"],
"@/components/*": ["components/*"]
}
}
}
それぞれの"paths"
はbaseUrl
の場所に相対的です。例えば:
import Button from '@/components/button'
import '@/styles/styles.css'
export default function HomePage() {
return (
<div>
<h1>Hello World</h1>
<Button />
</div>
)
}