基礎から学ぶNode.js

第2回パッケージ管理npmとアプリケーションの永続化

はじめに

前回は、Node.jsについての説明から、モジュール参照の仕組みや最もシンプルなHTTPサーバの実装についてまで紹介しました。今回はパッケージ管理ツールのnpmとNode.jsアプリケーションの永続化について紹介します。前回記事に引き続く内容になっていますので、未読の際はそちらからなるべくご覧ください。

予期せぬ例外に備える

前回の記事で、どんなリクエストにも「Hello World」を出力するだけの、単純なHTTPサーバの実装を紹介しました。そして、アプリケーションとそれを動作させるHTTPサーバがJavaやPHPなどと異なり、オールインワンの1つのプロセスで動くことも述べました。

このため、単にnode app.jsのように動作させた場合、例外が発生すると、サーバ機能ごとプロセスが終了してしまいます。そのため、サーバ機能まで道連れにしないように、アプリケーション側で例外処理をきちんと実装しておく必要があります。

前回のサンプルコードにちょっと細工をしてみましょう。

var n = 0;
var http = require('http');
http.createServer(function (req, res) {
  if (++n > 4) { a }
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end("result:" + n);
}).listen(1337, "127.0.0.1");
console.log('Server running at http://127.0.0.1:1337/');

変数nをアクセスごとにカウントアップして出力します。5回目で宣言していない変数aを参照しようとして例外が発生します。

node app.jsで起動して実際にブラウザで何度かリロードするとプロセスが止まることがわかると思います(もしも予想より早く止まったとしたら、それはブラウザが/favicon.icoを自動で取得していたからでしょう⁠⁠。

これでは実際に運用するサービスには使えないと思ってしまうかもしれませんが、そのためにデーモン化するツールは、すでにいくつか存在します。今回はプロセスを維持するためのツールforever (を試してみます。

Node向けパッケージ管理ツールnpm

foreverのインストールの前にパッケージ管理ツールの説明をしたいと思います。nodeではすでに多くのライブラリパッケージが(主にGitHubで)公開されています。そして多くのパッケージはnpmという専用のパッケージ管理ツールを使って、簡単に導入することができます。http://search.npmjs.org/を見るとたくさんのライブラリがnpmに登録されていることがわかります。

このnpm、もともとはnode本体とは別のツールでしたが、最近のバージョンから標準でnodeとともにインストールされます。

先ほどのforeverもこのnpmで提供されています。コマンドラインで次を実行します。

npm install -g forever

オプションの「-g」はグローバルインストールの意で、npmのインストール場所にパッケージをインストールします。付けない場合は、カレントディレクトリのnode_modules内にインストールされます。

個別のアプリケーションでしか利用しないライブラリモジュールなどはオプションなしでインストールしましょう。

またnpmは、インストール対象のパッケージが依存しているライブラリも必要に応じて、まとめてインストールしてくれます。

現在インストールしているパッケージの一覧を見たいときは、listコマンドで行います。

npm list [-g]

アンインストールしたいときは、uninstallコマンドで行います。

npm uninstall [-g] <パッケージ名>

いずれも「-g」オプションでグローバルかカレントディレクトリかの切り替えができます。他にも様々な機能がnpmを通して使えます。

foreverを用いて継続して動作させる

foreverは、モジュールとともにコマンドも同時に提供してくれます。今回はこちらで試してみましょう。

forever start app.js

を実行すると、foreverがnodeプロセスを起動して例外が起きても再起動してくれます。

もう一度先ほどと同様に、ブラウザからアクセスして試してください。resultの値が何度やると、1に戻ると思います。これはnodeが再実行されているためです。

停止するには次にようにします。

forever stop app.js

なお、Windows上ではforeverは動作しないようなのでMac, Linuxでお試しください。

Node.jsとパッケージのアップデート

先日、Node.js 0.6.16までのバージョンにHTTPヘッダの解析処理に脆弱性があることが発表されました。

Node.js自体のアップデートは上書きインストールで構いません。パッケージのアップデートは、こちらもnpmコマンドから簡単に行うことができます。

npm update [-g]

Node.jsはまだ新しいプロジェクトなので、利用する側も迅速にアップデートに対応していく必要があります。

最後に

前回と今回で、Node.jsの基礎と、基本的な仕組みや使い方について紹介してきました。次回からは、実際にWebアプリケーションをNode.jsで作っていきたいと思います。フレームワークExpressを使って、その先のMongoDBとの連携も視野に入れて、組んでいきます。

おすすめ記事

記事・ニュース一覧