サイトロゴ
PM2 Created: 2026/05/07 Updated: 2026/05/23

Bun × PM2 の導入と基本操作まとめ
起動・停止・再起動・ログ確認

BunアプリをPM2で管理する方法を実践形式で解説。PM2のインストール、Bunアプリの起動方法、restart・stop・logsなど基本コマンドの使い方をまとめます。

シリーズ:Bun × PM2 サーバー運用入門 ( 2 / 3 )

1

基礎:プロセス管理の必要性

2

導入:PM2の基本操作

3

運用:ログ・自動起動・デプロイ

前回はBun単体で本番運用しようとしたときの問題点(クラッシュ時の無自動再起動・ターミナル依存・ログ消失)と、それを解決するPM2を選ぶ理由を整理しました。

今回はいよいよ手を動かします。PM2をインストールしてBunアプリをバックグラウンドで動かし、 「クラッシュしても自動で復活する」 様子を実際に確認します。つまずきやすいポイントもまとめてあるので、詰まったときはトラブルシュートのセクションを確認してください。

🔍 前提条件

第1回で作成した bun-server-demo/server.ts を使います。まだの方は第1回を先に読んでください。Node.js(npm)がインストールされていることも必要です。

PM2をインストールする

PM2はnpmでグローバルインストールします。-g フラグでどのディレクトリからでも使えるようになります。

STEP 1

bash
npm install -g pm2

インストールが完了したら確認します。

bash
pm2 --version
# 5.x.x   ← バージョン番号が出ればOK

🔍 npmが入っていない場合

Node.jsをインストールするとnpmも同時に入ります。 nodejs.org からLTS版をインストールしてください。BunだけでなくNode.jsも入れておくことを推奨します(PM2自体はNode.jsで動くため)。

PM2でBunアプリを起動する

PM2でBunを使う場合、 「インタープリター(実行エンジン)としてbunを指定する」 ことがポイントです。指定しないとNode.jsで実行されてしまいます。

方法A:コマンドラインで直接起動(まず試すとき)

STEP 2-A

bash
pm2 start server.ts --interpreter bun --name my-server
[PM2] Starting /path/to/bun-server-demo/server.ts in fork_mode (1 instance)
[PM2] Done.
┌────┬──────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┐
│ id │ name         │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │
├────┼──────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┤
│ 0  │ my-server    │ default     │ N/A     │ fork    │ 12345    │ 0s     │ 0    │
└────┴──────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┘

この表が出れば起動成功です。ブラウザで http://localhost:3000 にアクセスして Hello, Bun! 🎉 が表示されることを確認してください。

💡 オプションの意味

--interpreter bun でBunを実行エンジンとして指定します。 --name はpm2内でのアプリ名です。後述のコマンドでこの名前を使って操作します。

方法B:ecosystem.config.js で管理(本番推奨)

STEP 2-B

コマンドラインで毎回オプションを書くのは大変です。設定をファイルに書き出しておくのが本番では定番です。 ecosystem.config.js というファイルを作ります。

bash
pm2 ecosystem
[PM2] Generating sample ecosystem.config.js ✓

生成されたファイルをBun向けに書き換えます。

javascript
module.exports = {
  apps: [
    {
      name: "my-server",        // PM2内でのアプリ名
      script: "./server.ts",    // 実行するファイル
      
interpreter: "bun",       // ← Bunを使う! 最重要設定

      watch: false,             // 本番ではfalse(trueにすると変更検知で再起動)
      instances: 1,            // 起動するプロセス数(第3回でクラスター化)
      env: {
        NODE_ENV: "production",
        PORT: 3000,
      },
    },
  ],
};

設定ファイルを使って起動します。

bash
pm2 start ecosystem.config.js
[PM2] Applying action restartProcessId on app [my-server](ids: [ 0 ])
[PM2] [my-server](0) ✓
┌────┬──────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┐
│ id │ name         │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │
├────┼──────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┤
│ 0  │ my-server    │ default     │ N/A     │ fork    │ 23456    │ 0s     │ 0    │
└────┴──────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┘
Bun × PM2で本番運用する\n自動起動・ログ管理・ecosystem.config.js
PM2

Bun × PM2で本番運用する 自動起動・ログ管理・ecosystem.config.js

BunアプリをPM2で本番運用する方法を解説。ecosystem.config.jsによる設定管理、自動起動、ログ管理、再起動設定など、実運用で役立つ構成を紹介します。

基本コマンド一覧

PM2の日常操作はこの6コマンドで9割カバーできます。 my-server の部分は自分がつけたアプリ名に置き換えてください。

コマンド 用途
pm2 list 起動中のアプリ一覧を表示。status・CPU・メモリ・再起動回数が確認できる。
pm2 stop my-server アプリを停止する。プロセスは削除されず、pm2 listには残り続ける。
pm2 restart my-server アプリを再起動する。コードを更新したあとに使う。
pm2 delete my-server アプリをPM2から完全に削除する。pm2 listから消える。
pm2 logs my-server アプリのログをリアルタイムで表示。デバッグのときに使う。
pm2 monit 全アプリのCPU・メモリ・ログをリアルタイムで監視するダッシュボード。Ctrl+Cで終了。

pm2 list の読み方

bash
pm2 list
┌────┬──────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name         │ mode     │ ↺    │ status    │ cpu      │ memory   │
├────┼──────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0  │ my-server    │ fork     │ 0    │ online    │ 0%       │ 42mb     │
└────┴──────────────┴──────────┴──────┴───────────┴──────────┴──────────┘
列名 意味 確認ポイント
id PM2内の連番ID 名前の代わりにIDで操作も可能(例: pm2 stop 0
再起動回数 この数が増えていたらクラッシュが起きている
status プロセスの状態 online が正常、 errored は異常終了
cpu CPU使用率 常に高い場合は処理の見直しが必要
memory メモリ使用量 じわじわ増え続ける場合はメモリリークの疑い

クラッシュしても自動で復活することを確認する

PM2の最大の魅力を体感しましょう。前回と同様にクラッシュエンドポイントを叩きます。

bash
# クラッシュを起こす
curl http://localhost:3000/crash

# すぐにpm2 listを確認する
pm2 list
#│ 0  │ my-server    │ fork     │ 1    │ online    │ 0%       │ 38mb     │

# ↺ が 1 に増えているが status は online → 自動で再起動された!

# アクセスも復活している
curl http://localhost:3000
#Hello, Bun! 🎉

✨ 確認できたこと

クラッシュしても が増えるだけでサービスは自動復活します。Bun単体では「誰かが手動で再起動するまでダウンしたまま」だったのとの差は歴然です。

ログをリアルタイムで確認する

bash
# リアルタイムで流れるログを見る(Ctrl+C で抜ける)
pm2 logs my-server
#[TAILING] Tailing last 15 lines for [my-server] process (change the value with --lines option)
#/root/.pm2/logs/my-server-out.log last 15 lines:
#0|my-server | 起動しました → http://localhost:3000

#/root/.pm2/logs/my-server-error.log last 15 lines:
#0|my-server | error: 意図的なクラッシュ

# 直近100行だけ見たい場合
pm2 logs my-server --lines 100

🔍 ログファイルの保存場所

PM2のログは自動的に ~/.pm2/logs/ に保存されます。 アプリ名-out.log (標準出力)と アプリ名-error.log (エラー出力)の2ファイルに分かれます。ターミナルを閉じても記録が残り続けます。

トラブルシュート

Bun × PM2でよくあるつまずきポイントをまとめます。

❓ pm2 start server.ts したら SyntaxError が出る

--interpreter bun を忘れているか、ecosystem.config.jsの interpreter: "bun" が抜けています。指定しないとNode.jsがTypeScriptを解釈しようとして失敗します。

❓ bun: command not found と言われる

PM2はシステムの PATH からbunを探します。bunのインストール後にターミナルを再起動していない場合は再起動してください。それでも解決しない場合は which bun で場所を確認し、フルパス(例: /home/user/.bun/bin/bun )をinterpreterに指定します。

bash
which bun
# /home/user/.bun/bin/bun

# ecosystem.config.js で直接パスを指定
interpreter: "/home/user/.bun/bin/bun",

❓ status: errored になって起動しない

pm2 logs my-server でエラーログを確認してください。port が既に使われている( EADDRINUSE )、ファイルパスが間違っている、などが主な原因です。

❓ PM2を再起動するたびに pm2 start し直すのが面倒

それは次回(第3回)で解決します。 pm2 startup pm2 save を使うと、OS再起動後に自動でアプリが立ち上がるようになります。


📌 第2回のまとめ

PM2の基本操作をマスターしました。クラッシュ時の自動再起動・バックグラウンド実行・ログの永続保存、これら3つはすでに実現できています。次回はさらに一歩進んで、 OS再起動後の自動起動・ログローテーション・デプロイ設定 を学び、本番で安心して使えるレベルに仕上げます。

📝 ▶ 次のステップ

次は「 」を解説します

Bun × PM2で本番運用する\n自動起動・ログ管理・ecosystem.config.js
PM2

Bun × PM2で本番運用する 自動起動・ログ管理・ecosystem.config.js

BunアプリをPM2で本番運用する方法を解説。ecosystem.config.jsによる設定管理、自動起動、ログ管理、再起動設定など、実運用で役立つ構成を紹介します。