2011年7月20日、Node.jsの安定版シリーズであるv0.4系の最新アップデート「v0.4.10」が正式にリリースされました。

今回のアップデートは、主にシステムの安定性を揺るがすバグの修正や、特定のネットワーク条件下でのパフォーマンス向上に重点が置かれています。

Node.jsがサーバーサイドJavaScriptとしての地位を確立していく中で、今回の修正は実用的な信頼性をさらに高める内容となっています。

通信の信頼性を高めるHTTP・TLSの修正

今回のリリースにおける最も重要な変更点の一つは、HTTPおよびTLSプロトコルに関連する競合状態 (レースコンディション) の修正です。

具体的には、通信の切断 (abort) やディスパッチ処理が重なった際に発生していた問題が解消されました。

これにより、高負荷なネットワーク環境下での安定性が向上しています。

また、HTTP Agentにおいて、ソケットプールが接続を確立するのを待たずに処理を進める改善が行われ、リソースの効率的な利用が可能になりました。

URLのパースについても変更があり、ホスト名にアンダースコア _ を含めることが許可されるようになっています。

これは、特定の内部ネットワーク環境や特殊なドメイン運用を行っているユーザーにとって重要な変更です。

データ処理とシステム互換性の向上

データ処理の根幹となるBufferクラスにおいても、重要な修正が行われました。

UTF-8形式のデータを扱う際、末尾のNULL文字が欠落してしまうという問題 (Issue #394) が解決されています。

カテゴリ主な修正・変更内容
ネットワークHTTP/TLSの競合状態修正、HTTP Agentの効率化
データ処理UTF-8バッファにおけるNULL文字欠落の修正
OSサポートFreeBSDでのkqueue検出ロジックの適正化
エンジンV8エンジンへのパッチバックポート (r8577)

また、FreeBSD環境においてカーネルイベント通知メカニズムである kqueue を正しく検出できない問題が修正され、マルチプラットフォームにおける互換性がさらに強化されました。

デバッガと開発体験の改善

開発者向けのツール面では、デバッガの大幅な改善が行われています。

日本人開発者の菊池彰宏氏による貢献を含め、デバッガの使い勝手が向上しました。

以前のバージョンで発生していたコマンドパースの不具合も、特定のコミットをリバートすることで解消されています。

また、以前のバージョンで変更された execScript がグローバルに復帰しており、既存のスクリプト資産との互換性も維持されています。

JavaScript
// UTF-8形式でのバッファ処理の修正例
// v0.4.10からは末尾のNULL文字も正確に保持されます
var str = "Node.js\0";
var buf = new Buffer(str, 'utf8');

console.log("String length: " + str.length);
console.log("Buffer length: " + buf.length);
実行結果
String length: 8
Buffer length: 8

まとめ

Node.js 0.4.10は、派手な新機能の追加こそないものの、プロダクション環境での利用に耐えうる品質を追求した堅実なリリースです。

特にHTTP/TLS周りの修正やバッファ処理の適正化は、アプリケーションの予期せぬ動作を防ぐために極めて重要です。

v0.4系を利用しているユーザーは、システムの安定稼働のためにこの最新バージョンへのアップデートが推奨されます。