2012年8月28日、Node.jsの次世代安定版に向けた開発ラインであるv0.9.1(Unstable)が公開されました。
このアップデートは、内部構造の抜本的な見直しやビルドツールの刷新を含む、非常に野心的な内容となっています。
開発者にとって影響の大きい変更が多数含まれており、将来の安定版に向けた重要なマイルストーンといえるでしょう。
本記事では、今回のリリースで導入された主要な機能強化や変更点について詳しくお伝えします。
ビルドツールの移行とアドオン開発の変化
今回のリリースにおける最大のトピックの一つは、アドオン構築ツールがnode-wafからnode-gypへ完全に置き換わったことです。
これまで利用されてきたnode-wafは廃止され、今後はGoogleが開発したGYPをベースとするnode-gypが推奨されます。
この変更により、Windows環境を含むクロスプラットフォームでのネイティブアドオン開発がこれまで以上にスムーズになります。
アドオン開発者は、自身のプロジェクトをnode-gyp向けに再構成する必要があるため注意してください。
timersとbufferモジュールの機能拡張
コアモジュールの利便性を高める新しいAPIがいくつか追加されています。
特に注目すべきは、setImmediate関数の実装です。
これにより、イベントループの次のターンで実行したい処理を、より明確に記述できるようになりました。
コード例:setImmediateの利用方法
// setImmediateを利用した非同期処理の例
setImmediate(() => {
console.log("この処理はI/Oイベントの後に実行されます");
});
console.log("この処理は即座に実行されます");
この処理は即座に実行されます
この処理はI/Oイベントの後に実行されます
また、bufferモジュールにはBuffer.isEncoding(enc)が追加されました。
このメソッドを利用することで、指定したエンコーディング名が有効かどうかを事前にテストすることが可能です。
内部構造とネットワーク周りの改善
内部ライブラリであるlibuvにおいても、ハンドルやタイマーに対するref()およびunref()のサポートが追加されました。
これにより、特定のハンドルがアクティブな間だけプロセスを維持するといった、柔軟なリソース管理が可能になります。
また、ネットワーク関連でも重要な修正が行われています。
dgram.bind()が常に非同期で動作するように変更され、挙動の一貫性が向上しました。
主要な変更点一覧
| カテゴリ | 内容 |
|---|---|
| アドオン | node-wafを削除し、node-gypへ移行 |
| タイマー | setImmediateの実装 |
| 暗号化 | crypto.pbkdf2()に同期インターフェースを追加 |
| 非推奨化 | util.pump()を正式に非推奨へ変更 |
まとめ
Node.js v0.9.1は、ビルドツールの刷新や新しい非同期制御の導入など、基盤部分の大幅な強化が図られたリリースです。
開発版であるため本番環境での利用には注意が必要ですが、次期安定版の方向性を示す重要な変更が多く含まれています。
特にnode-gypへの移行やsetImmediateの導入は、今後のエコシステムに大きな影響を与えるでしょう。
開発者の皆様は、これらの新機能を試しながら、来るべき安定版の登場に備えてください。
