2013年6月26日、Node.jsプロジェクトは開発版の最新アップデートとなる Node.js v0.11.3 (Unstable) を公開しました。
このリリースは「Unstable」の名の通り、将来の安定版リリースに向けた実験的な機能追加や、大規模な内部コンポーネントの更新を目的としています。
Node.jsのパフォーマンスを左右するエンジン類が刷新されたほか、モバイル環境への対応など、非常に多岐にわたる改善が行われました。
開発者にとっては、次世代のNode.jsがどのような方向へ進化しようとしているのかを知るための重要なマイルストーンとなります。
主要コンポーネントの大幅なアップデート
本バージョンでは、Node.jsの心臓部とも言える各ライブラリのバージョンが大幅に引き上げられました。
JavaScriptの実行エンジンであるV8は v3.19.13 へとアップグレードされ、実行速度の向上やメモリ管理の効率化が期待されます。
また、非同期I/Oを司るlibuvも v0.11.5 へと更新され、内部的なイベントループの精度が向上しています。
主要な依存ライブラリの更新状況を以下の表にまとめました。
| ライブラリ名 | 更新後のバージョン |
|---|---|
| V8 | v3.19.13 |
| libuv | v0.11.5 |
| c-ares | 1.10.0 |
| punycode | v1.2.3 |
Androidサポートの追加
今回のリリースにおける大きなトピックの一つに、Android環境のサポートが追加されたことが挙げられます。
ビルドプロセスが改善され、Android上での動作を想定したコンパイルが可能になりました。
これにより、組み込みデバイスやモバイルアプリケーションのバックエンドとしてのNode.jsの活用範囲がさらに広がることになります。
Buffer APIとメモリ管理の刷新
Node.jsにおいてバイナリデータを扱うための Buffer クラスに、新しいAPIが導入されました。
バッキングデータストア(データの保持領域)のための新しいAPIが追加され、より低レイヤーでのメモリ操作が可能になっています。
また、利便性の向上として fill() メソッドが自身のオブジェクトを返すようになり、メソッドチェーンが可能になりました。
プロセス管理とタイマーの変更
プロセス管理の面では、process.maxTickDepth が削除されたことが注目されます。
これは process.nextTick の再帰呼び出しを制限していたパラメータですが、今回の削除によりイベントループの挙動が整理されました。
さらに、内部タイマーが Date.now ではなく uv_now を使用するように変更され、より正確な時間管理が実現されています。
ネットワークおよびデバッグ機能の強化
ネットワーク機能においては、TLSの実装が tls_wrap バインディングに基づく TLSSocket へと移行されました。
これにより、TLS通信の効率化とコードの簡素化が図られています。
また、DNSモジュールには getServers() と setServers() メソッドが追加され、プログラム内から動的にDNSサーバを設定できるようになりました。
util.debuglogの導入
開発者向けのユーティリティとして、新しく util.debuglog が追加されました。
これまではデバッグ情報の出力にさまざまな手法が混在していましたが、今後はこの標準的な方法に統一されることが推奨されます。
以下は、util.debuglog を使用した基本的なコード例です。
// NODE_DEBUG=foo の環境変数が設定されている場合のみ出力されます
const util = require('util');
const debuglog = util.debuglog('foo');
debuglog('hello from foo [%d]', 123);
FOO 123: hello from foo [123]
まとめ
Node.js v0.11.3 (Unstable) は、単なるバグ修正に留まらず、基盤となるエンジンの更新から新しいプラットフォームへの対応まで、野心的な変更が数多く盛り込まれたリリースです。
特にAndroid対応やBuffer APIの刷新は、将来のNode.jsがより多様な環境で、より効率的に動作することを示唆しています。
開発版であるため本番環境での利用には適しませんが、次期安定版である v0.12 に向けた重要な準備が整いつつあります。
新しいAPIや挙動の変更にいち早く対応したい開発者は、このバージョンを通じて事前のテストを行うことをおすすめします。
