サーバサイドJavaScript実行環境の最新版「Node.js 18」が公開:JavaScriptエンジン「V8」が更新、実験的APIのfetchとWeb Streamsも利用可能に
サーバサイドJavaScript実行環境の最新バージョン「Node.js 18」が公開された。JavaScriptエンジン「V8」が10.1にアップデートされ、グローバルフェッチが既定で有効になり、コアテストランナーモジュールが追加されている。
Node.jsプロジェクトは2022年4月19日(米国時間)、サーバサイドJavaScript実行環境の最新バージョン「Node.js 18」を公開した。JavaScriptエンジン「V8」が10.1にアップデートされ、グローバルフェッチが既定で有効になり、コアテストランナーモジュールが追加されている。
Node.js 18はまず、Node.js 17に代わって「Current」リリースとして提供され、2022年10月25日に「LTS」(長期サポート)リリースに昇格する。LTSリリースとしてのコードネームは「Hydrogen」となる。Node.js 18は2025年4月30日までサポートされる予定だ。
Node.js 18の新機能や改良点は次の通り。
グローバルに利用可能なブラウザ互換の新API
fetch(実験的機能)
実験的なfetch APIがグローバルスコープで、既定で利用可能になった。この実装は、Node.js用HTTP/1.1クライアント「undici」に基づいている。
fetch APIの使用例を次に示す。
Web Streams API(実験的機能)
Web Streams APIの実験的実装が公開され、次のAPIがグローバルに利用可能になった。
ReadableStream、ReadableStreamDefaultReader、ReadableStreamBYOBReader、ReadableStreamBYOBRequest、ReadableByteStreamController、ReadableStreamDefaultController、TransformStream、TransformStreamDefaultController、WritableStream、WritableStreamDefaultWriter、WritableStreamDefaultController、ByteLengthQueuingStrategy、CountQueuingStrategy、TextEncoderStream、TextDecoderStream、CompressionStream、DecompressionStream.WriteableStream、TextStreamDefaultController
他のグローバルAPI
次のAPIがグローバルスコープで公開された。これらは実験的機能ではなくなった。
テストランナーモジュール(実験的機能)
実験的機能として追加された「node:test」モジュールは、TAP(Test Anything Protocol)形式で結果を報告するJavaScriptテストの作成を容易にする。アクセスするには、次のようにする。
2つのサブテストを持つ親テストの実装例を次に示す。
HTTPタイムアウト
2つのオプションの既定値が新たに設定された。
- server.headersTimeout:パーサが完全なHTTPヘッダを受信するまでの待ち時間を制限する(単位はミリ秒)。既定で6万(60秒)に設定されるようになった
- server.requestTimeout:クライアントからリクエスト全体を受信するまでのタイムアウト値を設定する(単位はミリ秒)。既定で30万(5分)に設定されるようになった
これらのタイムアウトが経過すると、サーバは、リクエストをリクエストリスナに転送せずにステータス「408」で応答し、接続を閉じる。
サーバがリバースプロキシなしで展開された場合に発生し得るDoS攻撃から保護するために、どちらのタイムアウトも「0」以外の値に設定する必要がある。
ツールチェーンとコンパイラのアップグレード
Node.jsは、幾つかの異なるプラットフォーム向けにビルド済みのバイナリを提供している。メジャーリリースごとに最小限のツールチェーンが評価され、必要に応じてアップグレードされる。Node.js 18では、次のように変更された。
- Linux用のビルド済みバイナリは現在、Red Hat Enterprise Linux(RHEL)8でビルドされており、glibc 2.28以降をベースにしたLinuxディストリビューション(Debian 10、RHEL 8、Ubuntu 20.04など)と互換性がある
- macOS用のビルド済みバイナリは、macOS 10.15以降を必要とするようになった
- AIXでは、サポートされる最小アーキテクチャがPower 7からPower 8に引き上げられた
32bit版Windows用のビルド済みバイナリは、V8に関連する依存関係の問題から、当初は提供されない。Node.jsプロジェクトは、「V8の将来のアップデートに伴い、32bit版Windows用ビルド済みバイナリを復活させたい」としている。
V8 10.1
V8エンジンがバージョン10.1にアップデートされた。V8 10.1はChromium 101の一部となっている。次のような新機能を提供する。
- 配列メソッドのfindLast()とfindLastIndex()
- Intl.Locale APIの改良
- Intl.supportedValuesOf関数
- クラスフィールドとプライベートクラスメソッドのパフォーマンス向上(これらの初期化が通常のプロパティストア並みに高速化された)
他のプロジェクトニュース
Node.js 18の新機能ではないが、Node.jsプロジェクトは過去数カ月間、ECMAScriptモジュールの実装を開発してきた。注目すべきマイルストーンとして、JSON Import Assertionsの実験的サポートの追加、JSONモジュールのアンフラグ(実験的機能)、HTTPSおよびHTTPインポートの実験的サポートがある。Node.jsにおけるECMAScriptモジュールローダ実装の開発も続けている。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 「State of JavaScript 2021」でJavaScriptの利用動向が明らかに
JavaScriptの利用動向に関する年次調査「State of JavaScript 2021」の結果が発表された。回答数は1万6085件で、各種ライブラリ、機能(言語、ブラウザAPI、プログレッシブWebアプリ、WebAssembly)、他のツール、リソース、意見といったカテゴリー別に報告されている。 - プログラミング言語の人気ランキング、順位変動は縮小傾向にある――RedMonkが調査
RedMonkが発表した2022年第1四半期のプログラミング言語ランキングによると、JavaScript、Python、Javaがトップ3を占めた。KotlinやRustの勢いにDartが追随していることも分かった。 - 「正規表現」とは――すぐに使う方法と「ECMAScript」のバージョン
正規表現の基本と、ECMAScript(JavaScript)における利用方法を紹介する連載。初回は、ECMAScriptのバージョンと正規表現の機能対応、ブラウザでのサポート状況、正規表現を扱う方法(オブジェクト、メソッド)について。