1. 導入:なぜNext.jsとTypeScriptを組み合わせるのか
現代のWeb開発において、Next.jsとTypeScriptの組み合わせはデファクトスタンダードとなっています。この2つを組み合わせることで、開発者は以下の強力なメリットを享受できます。
| ツール | メリット |
| Next.js | 高速な開発体験、サーバーコンポーネントによるパフォーマンス向上、ルーティングの容易さ、App Routerによるモダンなファイルベースルーティング。 |
| TypeScript | 型の安全性による大規模開発でのバグ防止、コード補完の強化、開発初期段階でのエラー検出。 |
この記事では、Next.jsの最新機能であるApp Routerを使いつつ、TypeScriptの型安全性をすぐに導入するための最も簡単かつ公式推奨の環境構築手順を解説します。
2. 前提条件と環境構築の全体像
2.1 事前準備
Next.jsプロジェクトをセットアップするには、以下の環境が整っている必要があります。
- Node.js: v18.17 以降 (LTS版推奨)
- npm または Yarn / pnpm: パッケージマネージャー
2.2 環境構築の全体像
Next.jsのセットアップコマンド(create-next-app)は非常に優秀です。以下のすべての設定を、質問に答えるだけで自動的に組み込んでくれます。
- Next.jsプロジェクトの雛形作成
- TypeScriptの導入と関連パッケージのインストール
tsconfig.jsonの最適化された自動生成- App Router 構成でのファイル作成
3. Step 1: プロジェクトの作成(最速コマンド)
ターミナル(コマンドプロンプトやVS Codeのターミナルなど)を開き、以下のコマンドを実行します。
Bash
npx create-next-app@latest
コマンドを実行すると、セットアップに関する質問が順番に表示されます。質問には以下のように答えてください。
| 質問 | 推奨設定 | 理由 |
| Project name? | 任意のプロジェクト名(例: my-next-ts-app) | |
| Would you like to use TypeScript? | Yes | TypeScriptを導入するために必須です。 |
| Would you like to use ESLint? | Yes | コーディング規約を統一し、バグを防ぐために推奨されます。 |
| Would you like to use Tailwind CSS? | No (お好みで) | UIフレームワークを使わない場合は No を選択します。 |
Would you like to use src/ directory? | Yes | 開発でよく使われるファイル構成です。 |
| Use App Router? | Yes | Next.jsの最新のルーティング形式です。 |
| Would you like to customize the default import alias? | No | 初心者はデフォルト設定のままで問題ありません。 |
💡 実行結果の確認
セットアップが完了すると、自動で依存関係のインストールが行われ、以下のファイル構造を持つプロジェクトが生成されます。
my-next-ts-app/
├── node_modules/
├── public/
├── src/
│ ├── app/ <-- App Routerのコアディレクトリ
│ │ ├── globals.css
│ │ ├── layout.tsx <-- ルートレイアウト(自動でTSX)
│ │ └── page.tsx <-- トップページ(自動でTSX)
├── .eslintrc.json
├── package.json
└── tsconfig.json <-- 自動で生成されました!
4. Step 2: 動作確認と設定ファイル(tsconfig.json)の確認
4.1 開発サーバーの起動
生成されたディレクトリに移動し、開発サーバーを起動します。
Bash
cd my-next-ts-app
npm run dev
ブラウザで http://localhost:3000 にアクセスし、Next.jsのウェルカムページが表示されることを確認してください。
4.2 tsconfig.json の役割
Next.jsのセットアップコマンドは、プロジェクトに最適な tsconfig.json を自動で生成します。これにより、手動での複雑な設定は不要です。
📄 tsconfig.json の主要設定 (抜粋)
| 設定項目 | 内容 | Next.jsでの役割 |
target | どのJavaScriptバージョンに変換するか | 最新のNode.js環境で動作するため、モダンな設定がされています。 |
moduleResolution | モジュール解決のルール | Next.jsが提供する独自の最適化された設定が適用されています。 |
strict | 型チェックの厳密さ | デフォルトで true になっており、厳密な型チェックが有効化されています。 |
重要: デフォルトの設定は最適化されているため、基本的には変更する必要はありません。
5. Step 3: App RouterとTypeScriptの実践的な使い方
環境構築は完了しましたが、実際に .tsx ファイルで型を使ってみましょう。
5.1 ページコンポーネントでの型定義
App Routerでは、すべてのコンポーネントがデフォルトでサーバーコンポーネントとして扱われます。
src/app/page.tsx のようなページファイルで、型を意識した簡単なコンポーネントを定義してみます。
TypeScript
// src/app/page.tsx
import Image from 'next/image';
import styles from './page.module.css';
// Propsの型を明示的に定義する
interface UserProps {
name: string;
age: number;
}
// サーバーコンポーネント
const UserProfile = ({ name, age }: UserProps) => {
return (
<div>
<h1>ユーザー名: {name}</h1>
<p>年齢: {age}歳</p>
</div>
);
};
export default function Home() {
// 型に合わないデータを渡すと、コンパイル時にエラーが表示される
// 例: age="25" (文字列) ではなく age={25} (数値) が必須
return (
<main className={styles.main}>
<UserProfile name="Taro Yamada" age={30} />
</main>
);
}
5.2 型エラーの確認
上記のコードで、age={30} の部分を age="三十" のように文字列に変更してみてください。
すぐにエディタやターミナルに型エラーが表示されるはずです。これがTypeScriptの最大のメリットであり、環境構築が成功した証拠です。
6. まとめと次のステップ
Next.jsとTypeScriptの環境構築は、create-next-app コマンドを使うことで、非常に簡単になりました。複雑な設定ファイルに悩まされることなく、すぐに開発を始めることができます。
🚀 次のステップ
- クライアントコンポーネントでの型定義:
use clientを使ったファイルでのuseStateやuseEffectの型定義を学ぶ。 - API連携: サーバーサイドコンポーネントでデータを取得し、それをクライアントコンポーネントに渡す際のデータの型を厳密に定義する。
この強力な環境で、TypeScriptの恩恵を最大限に活かした開発を始めていきましょう!
コメント