2011年10月10日、Node.jsの開発版(unstable)シリーズの最新作として、バージョン 0.5.9 が公開されました。

このアップデートは、安定版である v0.6.0 のリリースに向けた重要なマイルストーンであり、特にファイルシステム監視の効率化とWindows環境における互換性の向上に大きな進展が見られました。

開発チームは、OSごとの差異を吸収する抽象化レイヤー libuv への移行をさらに進め、マルチプラットフォームでの動作をより堅牢なものにしています。

ファイルシステム監視の刷新:fs.watch の強化

Node.js 0.5.9 における最も注目すべき変更点は、fs.watch インターフェースの強化です。

これまでの fs.watchFile は、ファイルの変更を確認するために一定間隔でポーリングを行う仕組みであったため、リソースの消費や検知の遅延が課題となっていました。

今回のリリースにより、各オペレーティングシステムが提供するネイティブな通知 API が活用されるようになりました。

Linux では inotify、BSD および macOS では kqueue、そして Windows では ReadDirectoryChangesW をバックエンドとして利用します。

これにより、最小限の CPU 負荷で、リアルタイムなファイル変更検知が可能となりました。

JavaScript
const fs = require('fs');

// fs.watch を使用したファイル監視の例
fs.watch('config.json', (event, filename) => {
  console.log(`イベントタイプ: ${event}`);
  if (filename) {
    console.log(`変更されたファイル: ${filename}`);
  }
});

Windows サポートの飛躍的な向上

Node.js の Windows 対応はこの時期に目覚ましい進化を遂げています。

本バージョンでは、child_process.fork が Windows 上で動作するようになり、さらにプロセス間でのハンドルの受け渡しもサポートされました。

これにより、マルチプロセスを利用したスケーラブルなアプリケーションを Windows 環境でも構築しやすくなっています。

また、開発体験を損なっていた細かな不具合も修正されました。

特に Windows のコマンドプロンプトなどで Node.js を実行している際、Ctrl+C によるプロセスの強制終了が正しく動作しないという問題が解決されたことは、多くの Windows 開発者にとって大きな改善点となりました。

ネットワーク機能と標準入出力の変更

ネットワーク関連の API では、新たに dns.resolveTxt が追加され、DNS の TXT レコードを直接解決できるようになりました。

一方で、以前から予告されていた通り、レガシーな HTTP ライブラリが完全に削除されました。

これにより、最新の HTTP スタックへの移行が必須となります。

また、標準入出力の挙動にも変更が加えられました。

標準エラー出力(process.stderr)が libuv を経由するようになり、出力先が TTY(端末)である場合には、process.stdout と同様にブロッキング動作となります。

これは、ログ出力の順序を正しく保ち、プログラム終了時の出力の欠損を防ぐための措置です。

項目内容
バージョン0.5.9 (unstable)
リリース日2011年10月10日
主な変更fs.watch 強化、Windows 対応改善
ドキュメントNode.js v0.5.9 API

まとめ

Node.js 0.5.9 は、次期安定版に向けた「土台作り」を象徴するリリースです。

マルチプラットフォームにおけるファイル監視の最適化や、Windows 環境での実行安定性の向上は、Node.js がエンタープライズ領域や多様な開発環境へ浸透していくための不可欠なステップでした。

この時期の活発な改善、特に libuv を活用した OS 固有機能の抽象化が、現在の Node.js の高いパフォーマンスと汎用性を支える基礎となっていると言えます。

開発者は、今回の fs.watch の変更などを通じて、より効率的でレスポンスの良いツールやサーバーアプリケーションを構築できるようになったのです。