2012年9月25日、Node.jsの安定版(Stable)であるバージョン0.8.10が正式にリリースされました。
今回のアップデートは、0.8系を利用しているユーザーにとって安定性を向上させるための重要なマイルストーンとなります。
主な変更点には、同梱されているパッケージマネージャーであるnpmの更新や、ファイルシステムに関連する深刻な不具合の修正が含まれています。
また、各プラットフォーム固有の挙動改善やメモリ管理の最適化も行われており、全体的なパフォーマンスの底上げが図られました。
npm 1.1.62へのアップグレードと実行環境の改善
本バージョンでは、パッケージマネージャーであるnpmがバージョン1.1.62へとアップグレードされました。
これにより、モジュールのインストール時や依存関係の管理における安定性が向上しています。
開発ツールとしての利便性も高まっており、REPL環境において無効な正規表現(RegExp)を入力した際に、適切にエラーをスローするよう修正されました。
内部エンジンであるV8についても、人工的なmmapの制約を緩和することで、より柔軟なメモリ割り当てが可能になっています。
ファイルシステム(fs)およびHTTPモジュールの信頼性向上
ファイルシステムを扱うfsモジュールでは、運用上のリスクを低減するための重要なバグ修正が複数実施されました。
特に、fs.watchFile()においてファイルの削除イベントが正常に検知されない不具合が解消されています。
さらに、fs.watch()におけるアサーションエラーや、非常に深い階層で再帰的なstat()を呼び出した際にセグメンテーションフォールトが発生する問題も修正されました。
ネットワーク通信を担うHTTPモジュールでは、データ到着時にタイムアウトハンドラーを適切に削除するよう変更されています。
この修正により、HTTPクライアントのレスポンスオブジェクトがリクエストと同じドメインを保持するようになり、エラーハンドリングの整合性が高まりました。
OS固有の最適化とパフォーマンスの強化
プラットフォームごとの差異を吸収するための修正も、本リリースの大きな特徴です。
Windows環境においては、無効なファイル記述子(FD)が使用された際にプロセスが異常終了しないよう堅牢性が高められています。
Unix系OSでは、EMFILEエラーによるビジーループの発生を防ぐ修正や、子プロセスの標準入出力をブロッキングモードに設定するなどの調整が行われました。
また、TLS通信のメモリ管理においてslabアロケータが導入され、メモリ使用効率が大幅に改善されています。
OpenSSLにおいては、x86およびx64アーキテクチャ向けに最適化されたアセンブリコードが採用され、暗号化処理の高速化が実現されました。
サンプルコードとリソース
Node.js 0.8.10環境で動作する、最も基本的なHTTPサーバーの構築例を以下に示します。
// Node.js 0.8.10を用いた単純なHTTPサーバーの記述
var http = require('http');
// サーバーオブジェクトを作成し、ポート1337で待機させます
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello Node.js 0.8.10 Stable\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
Server running at http://127.0.0.1:1337/
ソースコードや各OS向けのインストーラーは、公式サイトのダウンロードインデックスから入手可能です。
詳細な仕様については、公式APIドキュメントを併せてご確認ください。
まとめ
Node.js 0.8.10 (Stable)は、ファイルシステムの監視機能やメモリ管理といった、サーバーサイドJavaScriptの根幹を支える部分が大幅に強化されたリリースです。
特にメモリ効率の改善やクラッシュを引き起こすバグの修正は、商用環境における安定稼働に直結する重要なアップデートと言えます。
旧バージョンを使用している開発者は、本バージョンへの移行を検討することで、より安全で高速なアプリケーション開発が可能になるでしょう。
