安心!PM2でNode.jsがサーバー落ちしないようにするさてさて、前回記事「入門!Expressのインストールと基本のまとめ」では初めて本格的にNode.jsを使った記事をお届けしました。この記事の中でも書いたのですがNode.jsの最大の欠点は開発者にとっては致命的といってもいい内容でした。その内容とは・・・そう、エラーが発生すると、もれなくサーバーが落ちることです。これは、例えば「宣言していない変数を呼び出した」だけでもサーバーが落ち、インターネットからアクセスできなくなる、というものです😅さすがにこれでは怖くてとても本番環境にはNode.jsを使えないよね・・・と考えていました。ところが、少し調査してみると、このNode.jsの最大の欠点を解決する方法が存在していることがわかったので、今回はその方法をご紹介したいと思います。「PM2」というプロセス・マネージャーを使うと、たとえNode.jsでエラーが発生してサーバー落ちしても、すぐ自動で再起動させることができるようになります。これはNode.jsに限った話ではなくPythonなんかでも使えるので覚えておくと便利ですよ!では、実際にインストールしてみましょう。npmコマンド一発でOKです。-gインストールが完了したら、以下のコマンドで起動することができます。start」で設定したファイル「app.js」を対象にしたもの(つまり、app.listen()が書かれているファイル)です。実行すると以下のような表示になります。これでNode.js内でエラーが発生しても自動で再起動してくれるようになります😊✨では、実際にわざと宣言されていない変数unknownを呼び出してエラーを発生させてみましょう。res.send('「users」の一覧ページ');});すると、以下のようなエラーが表示されますが、ページを再読み込みしても問題ありません。(エラー表示はされますが、サーバーが落ちずにすぐ復活しています)もちろんエラーのない別ページもきちんと表示されますよ!PM2の使い方まとめPM2には色々と便利な機能がついているので、特にいいなと思ったものをまとめてみました。参考にしてみてください。–watchを使って自動で再読み込みこれも前回記事で書きましたが、Node.jsがすでに起動しているときにソースコードを変更しても、その変更内容は反映されることはありません。そのため、変更があった場合は必ず再起動をしないといけない訳ですが、特に開発をしている場合はいちいち面倒だったりします。そこで登場するのが--watchオプションです。以下のようにするだけで、もしソースコードに変更があった場合は自動で再読み込みをしてくれます。--watchこれで開発がスムーズになるはずです😊ストップするすでに起動しているプログラムを終了するには、stopを使ってください。****」を実行しても以下のようなエラーが発生します。re-executionもちろんstopしてからもう一度startとしてもいいのですが、以下のようにrestartを使うと、一気にこの2つの作業を実行することができます。app.js起動中のリストを表示する現在すでに起動しているプログラムの一覧を表示するにはlistを使います。list起動中のリアルタイムな情報を表示するリアルタイムで起動中のプログラムの情報を表示するにはmonitを使います。monit実際の表示はこちらです。ログを表示するログを表示するにはlogsを使います。flush」を使ってください。ちなみに:Expressでエラーページを表示するにはちなみに、もし本番環境でエラー内容がブラウザに表示されるとハッカーにとって攻撃をするための重要な足がかりを与えてしまうことになります。そのため、以下のようにしてエラーが発生したら専用のページを表示させるようにするといいでしょう。エラー処理はルートの後に記述してください。console.log(`${PORT}番のポートで待機中です...`);});では、実際にエラーを発生させてブラウザから確認してみましょう。ステータスコードもきちんと500になっています。おわりにということで、今回はNode.jsの最大の問題点「エラー発生時にサーバー落ちする」部分をPM2で解決してみました。PM2の存在を知るまでは、Node.jsは本番環境としてはどうだろうか・・・と考えていましたが、この問題はクリアできそうです。(しかもExpressによると、他にも同じようなパッケージがいくつかあるようですね)これまでPHP、JavaScript(ブラウザ)、Pythonがメインで開発をしてきましたが、やはりまだまだ知らないことがたくさんあるもんだと実感しました。(ドラゴンボールで言うところの「オラ、ワクワクすっぞ!」状態です😉✨)ぜひ皆さんもExpress(Node.js)での開発も検討してみてくださいね。開発スキルプログラム開発は15年以上。Laravel、Vue.jsをメインとしてPython(機械学習)やElectronの開発もお引き受けしております。過去2度カナダのバンクーバーに滞在していました。開発状況によりましては開発をお待ちいただく可能性がございますが、いつでもご相談は受けさせていただいております。お気軽にご連絡ください!お問い合わせフォーム開発してほしい機能を募集中!MITライセンスで公開します。詳しくはこちらの記事をご覧ください。ぷれりり・プレスリリース掲載無料のプレスリリース・スタンド!播磨孤道(はりまこどう)兵庫周辺のゆったり自転車一人旅の記事を書いていきます。