2013年5月13日、Node.js の開発サイクルにおける重要なステップとして Node.js 0.11.2 (Unstable) がリリースされました。
このリリースは「Unstable」という位置づけであり、将来の安定版に向けた野心的な変更が数多く含まれています。
特に JavaScript エンジンの更新や、クラスタ機能における負荷分散の仕組みの改善が注目のポイントです。
開発者の皆様は、新しい API や内部構造の変化を把握するために、この開発版の内容を確認することをお勧めいたします。
主要コンポーネントのアップデート
本リリースでは、Node.js の基盤となる主要コンポーネントのバージョンが大幅に引き上げられました。
JavaScript 実行エンジンである V8 はバージョン 3.19.0 へ、イベントループを担う libuv は 0.11.2 へと更新されています。
また、パッケージマネージャである npm も 1.2.21 にアップグレードされ、開発環境全体の安定性と速度向上が図られています。
| コンポーネント | 更新後のバージョン |
|---|---|
| V8 エンジン | 3.19.0 |
| libuv | 0.11.2 |
| npm | 1.2.21 |
クラスタ機能とデバッガの強化
マルチプロセッサ環境での実行を支える cluster モジュールにおいて、ラウンドロビン (round-robin) 方式のロードバランシングが導入されました。
これまでの方式と比較して、各ワーカープロセスに対してより均等にリクエストを割り振ることが可能となります。
さらに、デバッグ機能についても大きな改善が行われました。
クラスタ環境において各ワーカーが個別のデバッグポートを持つようになり、並列処理のデバッグが容易になっています。
また、まだロードされていないスクリプトに対してもブレークポイントを設定できる機能が追加されました。
API の拡張と利便性の向上
開発者にとって利便性の高い API の追加や、既存クラスの機能拡張も行われています。
例えば、path.isAbsolute(path) メソッドが追加されたことで、パスが絶対パスかどうかを簡単に判定できるようになりました。
const path = require('path');
// 絶対パスかどうかの判定例
console.log(path.isAbsolute('/usr/bin/node'));
console.log(path.isAbsolute('local/file.txt'));
true
false
ストリーム (Streams) においては、.cork()、.uncork()、._writev といったメソッドが導入されました。
これらを利用することで、小さな書き込み処理をバッファリングし、ネットワークパフォーマンスを最適化することが可能です。
EventEmitter においても setMaxListeners() が this を返す仕様に変更され、メソッドチェーンによる記述が可能になりました。
OS モジュールでは、os.networkInterfaces() の実行結果にネットマスク情報が含まれるようになっています。
まとめ
Node.js 0.11.2 は、次世代の Node.js を形作るための重要な機能が凝縮されたリリースです。
不安定版のため本番環境での利用には適しませんが、新しいストリーム API やクラスタリングの挙動をいち早く検証する絶好の機会となります。
V8 エンジンの更新によるパフォーマンス向上や、開発効率を高めるデバッガの強化など、多くの進化を遂げています。
今後の安定版リリースに向けて、これらの新機能がどのように洗練されていくのか非常に楽しみな内容となっています。
