Node.js 20 のリリースノート


Red Hat build of Node.js 20

Node.js 20 LTS との使用

Red Hat Customer Content Services

概要

このリリースノートには、Node.js 20 LTS に関する重要な情報が含まれています。

はじめに

リリース日: 2024-03-25

第1章 必要なインフラストラクチャーコンポーネントのバージョン

Red Hat build of Node.js を使用する場合は、次のインフラストラクチャーコンポーネントが必要です。サポート対象として明示的に指定されているコンポーネントを除き、Red Hat はこれらのコンポーネントのサポートを提供していません。

Expand
コンポーネント名バージョン

Nodeshift

2.1.1

npm 10

10.1.0

OpenShift Container Platform (OCP)[a]

3.11、4.5

git

2.0 以降

oc コマンドラインツール

3.11 以降[b]

[a] OCP は Red Hat によってサポートされます
[b] CLI ツール oc のバージョンは、使用している OCP のバージョンに対応する必要があります。

第2章 機能

このセクションには、Red Hat build of Node.js 20 リリースの機能変更に関する情報が含まれています。

2.1. 新機能および変更された機能

Node.js 20 LTS には、Red Hat build of Node.js がサポートする次の新機能と拡張機能があります。

Node.js 20 LTS の変更の詳細については、アップストリームコミュニティーの リリースノートドキュメント を参照してください。

2.1.1. v11.3 への V8 JavaScript エンジンのアップグレード

このリリースには、Chromium 113 の一部である v11.3 への V8 JavaScript エンジンのアップグレードが含まれています。

アップグレードされた V8 JavaScript エンジンには、以下の新機能および機能拡張が含まれています。

V8 JavaScript エンジンで利用可能な変更の詳細については、V8 ブログ を参照してください。

2.1.2. テストランナーモジュールの完全サポート

Red Hat build of Node.js 20 は、実稼働環境で使用できる安定した機能としてテストランナーモジュールを提供します。以前のリリースでは、テストランナーモジュールは実験的な機能としてのみ利用可能でした。

テストランナーモジュールは、JestMocha などの機能をすべて備えたテストフレームワークを置き換えることを目的としたものではありません。テストランナーモジュールを使用すると、追加の依存関係をインストールすることなく、テストスイートをすばやく簡単に作成して実行できます。

Red Hat build of Node.js 20 には、テストランナーモジュールに次の種類の機能強化が含まれています。

  • node --test フラグを使用して呼び出せるコマンドラインテストランナー
  • --test-reporter フラグを使用して設定できるカスタムテストレポーター
  • --experimental-test-coverage フラグで使用できる実験的なテストカバレッジ
  • モック機能

詳細は、Node.js Test Runner のドキュメント を参照してください。

2.1.3. 専用スレッドで実行されるカスタム ESM ローダーフック

Red Hat build of Node.js 20 では、ローダー (例: --experimental-loader=myhook.mjs) を通じて提供される ECMAScipt モジュール (ESM) フックは、メインのアプリケーションスレッドとは別の専用スレッドで実行されます。この機能強化により、ローダーに別のスコープが指定され、アプリケーションコードは潜在的な汚染から保護されます。

2.1.4. 同期 import.meta.resolve() 関数

Red Hat build of Node.js 20 では、import.meta.resolve() 関数は値を同期的に返します。ただし設定によっては、カスタムローダー resolve フックを同期関数または非同期関数として定義することもできます。非同期 resolve フックがロードされている場合でも、import.meta.resolve() 関数はアプリケーションコードに対して同期的に値を返します。

2.1.5. Web Crypto API による WebIDL コンバーターの使用

Red Hat build of Node.js 20 では、Web Crypto API は、Web Crypto API の他の実装と同様に、WebIDL 定義に基づき関数引数を強制および検証します。この機能強化により、Node.js と Web Crypto API のブラウザー実装間の相互運用性が向上します。

2.1.6. プロパティー import.meta.resolve は CLI フラグに対して非依存に

Red Hat build of Node.js 20 では、import.meta.resolve(specifier) プロパティーがデフォルトで --experimental-import-meta-resolve コマンドラインインターフェイス (CLI) フラグの使用に依存しなくなりました。現在は、import.meta.resolve(specifier) プロパティーを使用して、指定子文字列が解決される絶対文字列を取得できるようになりました。これは、CommonJS モジュールの require.resolve 機能に似ています。この機能強化により、Node.js をブラウザーやその他のサーバー側ランタイムと連携させることができます。

詳細は、Node.js import.meta.resolve のドキュメント を参照してください。

2.1.7. モジュールカスタマイズフックの module.register メソッド

Red Hat build of Node.js 20 は、node:module API の一部である新しい module.register(specifier[, parentURL][, options]) メソッドを提供します。この新しいメソッドを使用すると、モジュールカスタマイズフックをエクスポートするファイルを指定し、フックにデータを渡し、それらのフックとの通信チャネルを確立できます。この機能強化は、フックをエクスポートしたファイルの指定に --experimental-loader フラグを使用する必要があった以前のリリースの動作より優先されます。

アプリケーションコードが実行される前にカスタマイズフックが確実に登録されるようにするには、登録機能を使用するアプリケーションを実行するときに --import フラグを使用することを検討してください。

以下に例を示します。

node --import ./file-that-calls-register.js ./app.js
Copy to Clipboard Toggle word wrap

詳細は、Node.js module.register のドキュメント を参照してください。

2.1.8. CommonJS モジュールでモジュールカスタマイズ load フックをサポート

Red Hat build of Node.js 20 では、モジュールカスタマイズフックの作成者は、load フックで ESM ソースと CommonJS ソースの両方を処理できます。この機能強化は、アプリケーションのメインエントリーポイントが ESM ローダーによって処理されるときに、import または require ステートメントを使用して参照される CommonJS モジュールで利用できます。たとえば、エントリーポイントが ESM ファイルである場合や、--import フラグを使用する場合、この機能強化が関連します。この機能を使用すると、パッケージ作成者は require.extensions などの非推奨の API に依存することなく追加の Node.js カスタマイズを実行できるため、Node.js 読み込みプロセスを容易にカスタマイズできます。

詳細は、Node.js Hooks: load ドキュメント を参照してください。

2.1.9. ストリームパフォーマンスの向上

Red Hat build of Node.js 20 は、読み取りおよび書き込み可能なストリームのパフォーマンスを高めます。この機能強化には、メモリーオーバーヘッドの削減、読み取り可能なストリームの async イテレーター消費の向上、読み取り可能なストリームの pipeTo 消費の向上などの改良が含まれています。

2.2. 非推奨の機能

以下の機能は、Red Hat build of Node.js 20 リリースで非推奨になりました。

注記

このリリースで廃止または削除された機能の詳細については、nodejs.org の Web サイト を参照してください。

2.2.1. 無効なポートでの url.parse() メソッドのランタイム非推奨

このリリースには、無効なポートを含む url.parse() メソッド呼び出しのランタイム非推奨が含まれています。以前のリリースでは、url.parse() メソッドが数値以外のポート値を含む URL を受け入れていたため、予期しない入力によってホスト名のスプーフィングが発生する可能性がありました。このリリースでは、URL に数値以外のポート値が含まれている場合、url.parse() メソッドが警告を発します。

詳細は、Node.js url.parse のドキュメント を参照してください。

2.3. テクノロジープレビューの機能

以下の機能は、Node.js 20 LTS リリースのテクノロジープレビュー機能として利用できます。

2.3.1. 実験的な WASI 機能の強化

このリリースでは、実験的な WebAssembly System Interface (WASI) 機能に次の機能強化が適用されています。

  • WASI では、この機能を有効にするために experimental-wasi-unstable-preview1 コマンドラインインターフェイス (CLI) フラグを使用する必要がなくなりました。この機能強化により、WASI がさらに使いやすくなります。
  • WASI では、新しい WASI() 呼び出しに、特定の WASI バージョンを要求する version オプションを含めることが必要になりました。Node.js はさまざまなバージョンの WASI をサポートしており、version オプションにはデフォルト値がないため、アプリケーション内のすべての新しい WASI() 呼び出しで特定のバージョンを要求する必要があります。そうしない場合、エラーが発生します。

詳細は、Node.js WebAssembly System Interface (WASI) のドキュメント を参照してください。

2.3.2. 権限モデル

Red Hat build of Node.js 20 では、実験的な権限モデル機能が導入されています。開発者はこの機能を使用して、プログラム実行中にファイルシステム操作、子プロセスの生成、ワーカースレッドの作成などでの特定リソースへのアクセスを制限できます。つまり、アプリケーションによる機密データへのアクセス、機密データの変更、有害な可能性のあるコードの実行などを防止できます。

権限モデル機能は、--experimental-permission CLI フラグを使用して有効にできます。この機能を有効にすると、利用可能なすべての権限へのアクセスが自動的に制限されます。

権限を管理するには、次の CLI フラグを使用できます。

  • ファイルシステムの権限を管理するには、--allow-fs-read フラグと --allow-fs-write フラグを使用します。
  • 子プロセスの権限を管理するには、--allow-child-process フラグを使用します。
  • ワーカースレッドの権限を管理するには、--allow-worker フラグを使用します。

詳細は、Node.js 権限モデルのドキュメント を参照してください。

2.3.3. トレーシングチャネル

Red Hat build of Node.js 20 では、Diagnostics Channel 機能の実験的なエクステンションとして TracingChannel クラスが導入されています。トレーシングチャネルは、1 つのトレース可能アクションの実行ライフサイクルにおけるさまざまなポイントを表す複数の診断チャネルをグループ化し、トレースデータを生成して使用するために使用できます。つまりトレーシングチャネルは、アプリケーションフローをトレースするイベントを生成するプロセスを形式化し、簡素化するのに役立ちます。

詳細は、Node.js TracingChannel のドキュメント を参照してください。

2.3.4. Mock Timers

Red Hat build of Node.js 20 には、実験的な Mock Timers 機能が導入されています。開発者はこの機能を使用して、タイマーに依存する機能に対し、より予測可能で信頼性の高いテストを記述できます。タイマーのモッキングは、指定された間隔を待たずにタイマーの動作をシミュレートおよびテストするためによく使用される手法です。Mock Timers 機能には、グローバルオブジェクトと、node:timers API および node:timers/promises API からの、setTimeout() メソッドおよび setInterval() メソッドの呼び出しをシミュレートできる MockTimers クラスが含まれています。

Mock Timers 機能は、時間を進めたり、特定のタイマーを有効にしたり、すべてのタイマーを解放したりするためのシンプルな API を提供します。

以下に例を示します。

import assert from 'node:assert';
import { test } from 'node:test';

test('mocks setTimeout to be executed synchronously without having to actually wait for it', (context) => {
  const fn = context.mock.fn();
  // Optionally choose what to mock
  context.mock.timers.enable(['setTimeout']);
  const nineSecs = 9000;
  setTimeout(fn, nineSecs);

  const threeSeconds = 3000;
  context.mock.timers.tick(threeSeconds);
  context.mock.timers.tick(threeSeconds);
  context.mock.timers.tick(threeSeconds);

  assert.strictEqual(fn.mock.callCount(), 1);
Copy to Clipboard Toggle word wrap

詳細は、Node.js Mocking: Timers ドキュメント を参照してください。

2.3.5. ビルトイン .env ファイルのサポート

Red Hat build of Node.js 20 では、起動時に Node.js アプリケーションに渡される .env ファイルで環境変数を設定するための実験的な機能が導入されています。.ini ファイル形式と同様に、.env 設定ファイルの各行には、特定の環境変数のキーと値のペアが含まれています。以下に例を示します。

PASSWORD=nodejs
Copy to Clipboard Toggle word wrap

--env-file フラグを使用すると、事前に定義された環境変数を使用して Node.js アプリケーションを初期化および実行できます。以下に例を示します。

node --env-file=myconfig.env myapp.js
Copy to Clipboard Toggle word wrap

前述の例のようにアプリケーションを初期化すると、process.env プロパティーを使用して関連する環境変数にアクセスできます。たとえば、PASSWORD=node.js 環境変数にアクセスするには、process.env.PASSWORD プロパティーを使用できます。

この機能強化により、.env 設定ファイルで NODE_OPTIONS 環境変数を定義できるようになり、package.json ファイルに NODE_OPTIONS を含める必要がなくなります。

2.4. サポート対象のアーキテクチャー

Node.js ビルダーイメージおよび RPM パッケージが利用可能で、以下の CPU アーキテクチャーとの使用がサポートされます。

  • AMD x86_64
  • ARM64
  • OpenShift 環境の IBM Z (s390x)
  • OpenShift 環境の IBM Power System (ppc64le)

第3章 リリースコンポーネント

第4章 修正された問題

このリリースには、Node.js 20 LTS のコミュニティーリリースでの問題修正がすべて組み込まれています。

4.1. 仮想マシンモジュール API のメモリー管理を強化

Red Hat build of Node.js 20 は、importModuleDynamically オプションをサポートする以下の仮想マシンモジュール API に長年存在していたメモリーリークと解放後の使用に関する問題を解決します。

  • vm.Script
  • vm.compileFunction
  • vm.SyntheticModule
  • vm.SourceTextModule

この機能強化により、影響を受けるユーザーは、Red Hat build of Node.js の以前のバージョンからアップグレードできるようになります。

第5章 既知の問題

本リリースに影響する既知の問題はありません。

第6章 必要なインフラストラクチャーコンポーネントに影響する既知の問題

次の問題は、このリリースに必要なインフラストラクチャーコンポーネントに影響することがわかっています。

6.1. Node.js パッケージマネージャーがシグナルを正しく処理しない

説明
Red Hat build of Node.js 20 では、Node.js パッケージマネージャー (npm) が子プロセスにシグナルを送信しません。この問題は、Node.js アプリケーションが正しくシャットダウンできないことを意味します。
原因
npm 9.6.7 以降のバージョンには、npmSIGINT および SIGTERM シグナルを子プロセスに転送できないという問題があります。この問題は、npm 9.6.7 以降の使用を必要とする Node.js バージョンに影響します。Node.js コミュニティーは、この npm の問題に対する修正を調査しています。
回避策
現在、回避策はありません。Red Hat は、Red Hat build of Node.js 20 でこの問題に対する修正を調査しています。

法律上の通知

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る