基礎から学ぶNode.js

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

この記事を読むのに必要な時間:およそ 1.5 分

はじめに

前回は,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との連携も視野に入れて,組んでいきます。

著者プロフィール

高橋俊光(たかはしとしみつ)

ティルフィン合同会社 代表。

メーカー企業でパッケージソフト開発などに携わった後,ティルフィン合同会社を設立しフリーエンジニアとして,RIAやスマートモバイルアプリとサーバーサイドと広い分野で開発に従事。iOSアプリ トレンドトピック,Newstrushをリリースしている。

コメント

コメントの記入