Windows環境でNext.jsアプリを、PC起動時(ログイン前)に自動実行するため、Windowsサービス化 することで、OS起動時(ログイン前)に自動的にアプリが立ち上がる環境を構築します。
PM2とは、Node.jsアプリケーションの実行を管理するツールです。なんかすごくいろいろできるみたいです。
通常、PM2には pm2 startup という自動起動コマンドがありますが、Windowsには対応していないそうです。
ハマった点としては、pm2へのコマンドがWindowsのパス解釈がうまくいかなかった点です。最終的には設定ファイルを作るという対応でうまくいきました。
1. 事前準備
Next.jsを本番用にビルドしておきます。
PowerShell
npm run build
2. PM2 設定ファイルの作成
プロジェクトのルートに ecosystem.config.js を作成します。Windows特有のパス問題を避けるため、直接バイナリを指定する必要がありました。
module.exports = {
apps: [
{
name: "next-app",
script: "./node_modules/next/dist/bin/next",
args: ["start"],
env: {
NODE_ENV: "production",
PORT: 3000
}
}
]
};
3. PM2 サービスツールのインストール
管理者権限のPowerShellで実行します。
# サービス化ツールのインストール
npm install -g pm2-windows-service
# サービスのインストール実行
# 質問には全て 'y' で答え、PM2_HOME はデフォルト(C:\Users\ユーザー名\.pm2)でOK
pm2-service-install
4. 環境変数の設定 (重要)
Windowsサービスが設定ファイルを読み込めるよう、システム環境変数を設定します。
# 管理者権限のPowerShellで実行
[Environment]::SetEnvironmentVariable("PM2_HOME", "C:\Users\あなたのユーザー名\.pm2", "Machine")
※実行後、PCを再起動するかサービスを再起動して反映させます。
# 2. Windows サービスを一度再起動して、設定を読み込ませる
net stop pm2
net start pm2
5. アプリの起動と保存
サービスとして動いているPM2にアプリを登録し、状態を保存します。
# アプリの起動
pm2 start ecosystem.config.js
# 現在の状態を保存(これが次回起動時に読み込まれる)
pm2 save
6. 確認方法
-
サービスの状態確認:
services.mscを開き、サービス名PM2が「実行中」かつ「自動」であることを確認。 -
PM2の状態確認:
pm2 listでアプリがonlineであることを確認。 - 再起動テスト: 可能であればPCを再起動し、ログイン画面の状態で 別の端末からブラウザでアクセスできるか確認してください。
7. アンインストール手順
必ず 管理者権限の PowerShell で以下の順に実行してください。
1. アプリの停止と削除
まず、PM2 が管理している Next.js アプリを停止・リストから削除します。
pm2 stop all
pm2 delete all
pm2 save
2. Windows サービスのアンインストール
次に、Windows のサービス一覧(services.msc)から PM2 を削除します。
pm2-service-uninstall
- これで Windows サービス一覧から「PM2」が消えます。
3. 環境変数の削除
システムに設定した PM2_HOME を削除します。
[Environment]::SetEnvironmentVariable("PM2_HOME", $null, "Machine")
4. ツールのアンインストール
PM2 本体やサービス化ツールを Windows から削除します。
npm uninstall -g pm2-windows-service
npm uninstall -g pm2
5. 設定ファイルの掃除
設定ファイルやログが残っているディレクトリ(.pm2)を削除して完全にリセットします。