この記事でわかること
- macOSのlaunchdを使ってNext.jsアプリを常駐プロセスとして管理する方法
- 設定ファイルの作成手順とlaunchctlでの登録方法
- よくあるトラブルとメモリ管理の注意点
「Macを再起動するたびにサーバーが落ちる」問題を解決したい
自分でNext.jsのWebアプリを作ったとき、開発中は npm run start で動かしますが、Macを再起動したり、ターミナルを閉じたりするとアプリが落ちてしまいます。
家族用の簡単なツールや、社内向けの管理画面など「常に立ち上がっていてほしい」アプリには困ります。
この問題を解決するのがmacOSの launchd という仕組みです。launchdはMacが起動したときに自動的にプログラムを実行してくれる「常駐管理システム」です。私はこの設定を使って、家族向けの「いってきます」記録アプリをMac常駐で運用しています。

launchdとは何か
macOSにはOS起動時に自動で各種サービスを立ち上げる仕組みが内蔵されています。それがlaunchd(ランチディー)です。Windowsで言う「スタートアップ」や「タスクスケジューラー」に相当しますが、より細かな制御ができます。
launchdの設定ファイルを ~/Library/LaunchAgents/ に置くと、そのユーザーがログインしたときに自動実行されます。これを使ってNext.jsアプリを「常駐プロセス」として管理します。

実際の設定手順
以下の3ステップで設定します。Claude Codeに設計を伝えて、実際のプログラムと設定ファイルを一括で作ってもらいました。
- Next.jsアプリを本番ビルドしておく
まずNext.jsアプリをビルドして、起動コマンドを確認します。開発用のnpm run devではなく、本番用のnpm run build && npm run startを使います。ターミナルでアプリのディレクトリに移動し、ビルドが通るか確認してください。 - 設定ファイルを作成する
launchdの設定ファイル(.plist)を作成します。~/Library/LaunchAgents/ディレクトリに保存します。ファイル名はcom.{自分の名前}.{アプリ名}.plistという形式が慣例です。私が「ittekimasu」アプリに使った設定ファイルの構成例を参考にしてください。 - launchctlで登録・起動する
設定ファイルを作ったら、launchctlコマンドで登録します。これは一度だけ実行すればOKです(Mac再起動後も設定は保持されます)。

私が実際に使っている構成
私が作った「ittekimasu」アプリは、家族の外出・帰宅をスマホから記録できるWebアプリです。LAN内(192.168.11.43:8080)でアクセスできるように設定しています。
複数のアプリを常駐させる場合は、ポート番号をアプリごとに変えます。私は家族アプリ群は8100番台で統一しています(8108番に技術英語クイズアプリを配備済み)。

よくあるトラブルと対処法
launchdの設定でよくハマるポイントをまとめました。
tail -f ~/logs/アプリ名-err.log を実行しながら動作確認すると問題が素早く特定できます。- 起動しない:ProgramArgumentsのnodeのパスが間違っている →
which nodeで確認 - ポートが使えない:前のプロセスが残っている →
lsof -i :8080で確認してkill - 環境変数が読めない:設定ファイル内のEnvironmentVariablesでPATHを明示的に設定する
- ログが出ない:StandardOutPathのディレクトリが存在しない →
mkdir -p ~/logs - 修正したのに反映されない:unloadしてからload し直す

メモリ管理の注意点
Next.jsアプリを常駐させるとき、開発中に注意することがあります。常駐中のアプリが動いている状態で next dev(開発サーバー)を同時起動すると、メモリを大量に消費してMacが重くなります。
常駐アプリを修正するときの手順:
- コードを修正・確認する
開発サーバーは最小限の時間だけ起動します。 - 確認が終わったら即停止
開発サーバーを止めてから次のステップへ進みます。 - 本番ビルドしてreload
ビルドを実行してlaunchctlでreloadします。

まとめ
この記事のまとめ
- macOSのlaunchdを使えばNext.jsアプリをMac常駐サービスとして管理できる
- 設定ファイルを ~/Library/LaunchAgents/ に置いてlaunchctlで登録するだけ
- 複数アプリはポート番号を変えて同時常駐が可能
- トラブル時はログファイルを tail -f で監視するのが最速
- 開発サーバーを長時間起動しないことでメモリを節約する
外部に公開せずとも、自宅のMacをサーバーとして使うのは十分な選択肢です。家族向けアプリや社内ツールのプロトタイプなら、launchdで十分快適に動きます。まずは手元のMacで試してみてください。

コメント