【Next.js】yarn dev実行時に自動でブラウザを開く設定方法（concurrently + open-cli）

# Next.jsの開発環境で自動的にブラウザを開く設定方法

私は`Next.Js`と`tailwindcss`を使用し、フロントエンド開発を行っている初心者です。
普段のNext.js開発で、`yarn dev`実行後にターミナルのURLをコントロールクリックするのが面倒だと感じていました。この問題を解決するため、いくつかの方法を調べてみました。
今回は、その中から開発サーバー起動と同時にブラウザを自動で開く設定方法についてまとめます。

## 目次
1. [はじめに](#はじめに)
1. [必要なパッケージ](#必要なパッケージ)
1. [設定方法](#設定方法)
1. [動作の仕組み](#動作の仕組み)
1. [使用方法](#使用方法)
1. [トラブルシューティング](#トラブルシューティング)
1. [発展的な使用方法](#発展的な使用方法)
1. [補足](#補足)
1. [まとめ](#まとめ)

## はじめに

通常のNext.js開発では、以下の手順を毎回行っています。

1. ターミナルで`yarn dev`を実行
2. 表示されたURLをコントロールクリック、もしくは
3. 手動でブラウザを開いて`localhost:3000`にアクセス

この手順を1つのコマンドで自動化する方法です。

## 必要なパッケージ

以下の2つのパッケージを開発環境にインストールします。

### npm
```bash
npm install -D concurrently open-cli
```
### yarn
```bash
yarn add -D concurrently open-cli
```

#### 各パッケージの役割

- **concurrently**: 複数のコマンドを並行して実行できるツール
- **open-cli**: コマンドラインからブラウザを開くためのツール

## 設定方法

`package.json`の`scripts`セクションを以下のように編集します。

```json
{
  "scripts": {
    "dev": "concurrently \"next dev\" \"open-cli http://localhost:3000\"",
    "dev:delay": "concurrently \"next dev\" \"sleep 3 && open-cli http://localhost:3000\"",
    "dev:port": "concurrently \"next dev -p 3001\" \"open-cli http://localhost:3001\""
  }
}
```

### クイックコピー用スクリプト
以下のスクリプトをそのままコピーしてpackage.jsonのscriptsセクションに貼り付けることができます。

```json
"dev": "concurrently \"next dev\" \"open-cli http://localhost:3000\"",
"dev:delay": "concurrently \"next dev\" \"sleep 3 && open-cli http://localhost:3000\"",
"dev:port": "concurrently \"next dev -p 3001\" \"open-cli http://localhost:3001\"",
```
#### 各スクリプトの説明
- `dev`: 標準的な開発環境の起動
- `dev:delay`: 3秒の遅延後にブラウザを開く
- `dev:port`: ポート3001で起動する場合

必要なスクリプトだけを選んでご利用ください。

## 動作の仕組み

このスクリプトは以下の2つのコマンドを同時に実行します。

1. `next dev`: Next.jsの開発サーバーを起動
2. `open-cli http://localhost:3000`: デフォルトブラウザで開発サーバーのURLを開く

## 使用方法

いつも通り以下のコマンドを実行するだけです。

```bash
yarn dev
```

すると、
- 開発サーバーが起動
- 自動的にデフォルトブラウザが開く
- `localhost:3000`が表示される

という一連の動作が自動的に実行されます。

## トラブルシューティング

### ブラウザが早すぎて開く場合

開発サーバーの起動前にブラウザが開いてしまう場合は、遅延を追加した`dev:delay`スクリプトを使用します。

```bash
yarn dev:delay
```

### ポート3000が使用中の場合

別のアプリケーションがポート3000を使用している場合は、`dev:port`スクリプトを使用して別のポートで起動できます。

```bash
yarn dev:port
```

### Windows環境での注意点

Windowsユーザーの場合、`open-cli`の代わりに`start`コマンドを使用することもできます。

```json
{
  "scripts": {
    "dev:win": "concurrently \"next dev\" \"start http://localhost:3000\""
  }
}
```

## 発展的な使用方法

### 環境変数に応じたポート変更

```json
{
  "scripts": {
    "dev:env": "concurrently \"next dev -p $PORT\" \"open-cli http://localhost:${PORT:-3000}\""
  }
}
```

### 特定のブラウザで開く
#### Mac OS
```json
{
  "scripts": {
    "dev:chrome": "concurrently \"next dev\" \"open -a 'Google Chrome' http://localhost:3000\"",
    "dev:firefox": "concurrently \"next dev\" \"open -a 'Firefox' http://localhost:3000\""
    "dev:edge": "concurrently \"next dev\" \"open -a 'Microsoft Edge' http://localhost:3000\""    
  }
}
```
#### Windows
```json
{
  "scripts": {
    "dev:chrome": "concurrently \"next dev\" \"start chrome http://localhost:3000\"",
    "dev:firefox": "concurrently \"next dev\" \"start firefox http://localhost:3000\"",
    "dev:edge": "concurrently \"next dev\" \"start msedge http://localhost:3000\""
  }
}
```
### リロードの自動化

`nodemon`を追加することで、ファイル変更時に自動でサーバーを再起動できます。

```json
{
  "scripts": {
    "dev:watch": "concurrently \"nodemon --exec 'next dev'\" \"open-cli http://localhost:3000\""
  }
}
```

## 補足

### メリット
- 開発開始時の手間が減る
- チーム内で同じ手順を共有できる
- 新規参画メンバーの環境構築手順が簡略化
- 異なる環境や要件に対応できる柔軟性

### 注意点
- デフォルトブラウザが自動で開くため、別のブラウザを使用したい場合は手動で開く必要があります
- 開発サーバーの起動前にブラウザが開いてしまう可能性があるため、その場合は手動でリロードしてください
- チームで使用する場合は、使用するスクリプトを統一することを推奨します

## まとめ

小さな設定ですが、日々の開発での手間を1ステップ省くことができます。特にチーム開発において、統一された開発環境のセットアップに役立つと思います。

また、今回紹介した発展的な使用方法を活用することで、より柔軟な開発環境を構築することができます。チームの要件や個人の好みに合わせてカスタマイズしていくことをお勧めします。

もし記事の内容に間違いがあれば、コメントでご指摘いただけますと幸いです。また、より良い方法や代替手段をご存知の方がいらっしゃいましたら、ぜひ共有していただければと存じます。例えば、VS Codeの拡張機能や他のツールを使用した方法など、様々なアプローチがあるかもしれません。