サーバサイドJavaScript実行環境の最新版「Node.js 18」が公開JavaScriptエンジン「V8」が更新、実験的APIのfetchとWeb Streamsも利用可能に

サーバサイドJavaScript実行環境の最新バージョン「Node.js 18」が公開された。JavaScriptエンジン「V8」が10.1にアップデートされ、グローバルフェッチが既定で有効になり、コアテストランナーモジュールが追加されている。

» 2022年04月28日 17時00分 公開
[@IT]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

 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.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。