2011年6月23日、Node.jsの開発を主導するJoyent社は、Microsoft社と提携し、Node.jsをWindows環境へネイティブに移植することを発表しました。

これまでUNIX系システムを中心に発展してきたNode.jsにとって、Windowsへの正式なネイティブ対応はプラットフォームを拡大する上で極めて重要な一歩となります。

今回の提携により、世界中の多くの開発者がWindows上でNode.jsのパフォーマンスを最大限に引き出せるようになります。

IOCP APIを活用したネイティブポーティング

今回の移植プロジェクトにおける最大の焦点は、Windows独自の高パフォーマンスI/O APIである「IOCP (Input/Output Completion Port)」への対応です。

コア構造の大幅な変更

Node.jsをWindows上で効率的に動作させるためには、コア構造に対する比較的大きな修正が必要となります。

Microsoftから公式なエンジニアリングリソースと技術的なガイダンスを受けることで、この複雑な課題に取り組んでいます。

また、Rackspace社もこのプロジェクトに協力しており、エンジニアのBert Belder氏が開発に参加しています。

node.exeのリリースとサポート環境

このプロジェクトの成果として、公式サイトであるnodejs.orgにおいて、公式なバイナリファイルであるnode.exeの提供が開始される予定です。

対象環境サポート内容
Windows Azureクラウド環境におけるネイティブ動作の最適化
Windows Server 2003以降サーバーOSにおける公式バイナリの動作保証

これにより、開発者は特別なコンパイル作業をすることなく、Windows上でNode.jsを実行できるようになります。

以下は、Windows環境での動作を想定したシンプルなサーバープログラムの例です。

JavaScript
// Windows環境での動作を想定したHTTPサーバー
const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello from Node.js on Windows!\n');
});

// ローカルホストのポート3000で待機
server.listen(3000, '127.0.0.1', () => {
  console.log('Server running at http://127.0.0.1:3000/');
});

実行時の出力結果:

text
Server running at http://127.0.0.1:3000/

まとめ

2011年6月に発表されたMicrosoftとJoyentの提携は、Node.jsが真のマルチプラットフォーム環境として進化するための大きな転換点となりました。

IOCPへのネイティブ対応により、WindowsユーザーもNode.jsが持つ高いスケーラビリティを享受できるようになります。

サーバーサイドJavaScriptの可能性を広げるこの取り組みは、今後のエンタープライズ領域での採用拡大に大きく貢献することでしょう。