Node.js 22 のリリースノート
はじめに リンクのコピーリンクがクリップボードにコピーされました!
リリース日: 2025 年 2 月 24 日
第1章 必要なインフラストラクチャーコンポーネントのバージョン リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js を使用する場合は、次のインフラストラクチャーコンポーネントが必要です。サポート対象として明示的に指定されているコンポーネントを除き、Red Hat はこれらのコンポーネントのサポートを提供していません。
第2章 機能 リンクのコピーリンクがクリップボードにコピーされました!
このセクションには、Red Hat build of Node.js 22 リリースにおける機能の変更に関する情報が記載されています。
2.1. 新機能および変更された機能 リンクのコピーリンクがクリップボードにコピーされました!
Node.js 22 LTS には、Red Hat build of Node.js がサポートする次の新機能と機能拡張があります。
Node.js 22 LTS の変更点の詳細は、アップストリームコミュニティーの リリースノート と ドキュメント を参照してください。
2.1.1. v12.4 への V8 JavaScript エンジンのアップグレード リンクのコピーリンクがクリップボードにコピーされました!
このリリースには、Chromium 124 の一部である v12.4 への V8 JavaScript エンジンのアップグレードが含まれています。
アップグレードされた V8 JavaScript エンジンには、以下の新機能および機能拡張が含まれています。
V8 JavaScript エンジンで利用可能な変更の詳細は、V8 ブログ を参照してください。
2.1.2. Node.js ストリームのデフォルトハイウォーターマークの増加 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js 22 では、Node.js ストリームのデフォルトのハイウォーターマークが 16 KB から 65 KB に増加しました。この機能拡張により、Node.js ストリームの全体的なパフォーマンスが向上します。
この機能拡張により、メモリー使用量もわずかに増加します。環境がメモリーの影響を受ける場合は、setDefaultHighWaterMark() を使用してデフォルト値を変更できます。
詳細は、Node.js の new stream.Writable および new stream.Readable ドキュメントを参照してください。
2.1.3. AbortSignal 作成のパフォーマンスの向上 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js 22 では、AbortSignal インスタンスの作成が効率化します。この機能拡張により、fetch() API とテストランナーモジュールのパフォーマンスが大幅に向上します。
詳細は、Node.js の AbortSignal ドキュメントを参照してください。
2.1.4. 同期ファイルシステム API のパフォーマンスの向上 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js 22 では、UTF-8 でエンコードされた文字列データ用の非常に効率的な高速パスの追加により、writeFileSync() メソッドが強化されています。このリリースでは、appendFileSync() メソッドを最適化するために、改良された writeFileSync() 機能も使用されます。この機能拡張は、特に文字列データ操作の効率を最大化することに重点を置いています。
詳細は、Node.js の fs.writeFileSync および fs.appendFileSync ドキュメントを参照してください。
2.1.5. 不適切な IPV6 設定の処理の改善 リンクのコピーリンクがクリップボードにコピーされました!
Node.js 17 リリース以降、Node.js は IPv6 アドレスよりも IPv4 アドレスを優先しなくなりました。Node.js は、ドメイン名検索 (DNS) エントリーに基づいて返される順序に従います。この動作は通常、適切に設定されたホストには影響しません。しかし、IPv6 スタックが部分的にまたは誤って設定されているホストでは、この動作により問題が発生する可能性があります。最近のリリースでは、Happy Eyeballs アルゴリズムの実装を組み込み、エッジケースを修正することで、誤って設定されている IPv6 スタックのユーザーエクスペリエンスを向上させることを目指しています。
Red Hat build of Node.js 22 には、net.createConnection フロー内の接続試行に関する次の 3 つの新しいイベントが追加されています。
-
新しい接続試行が確立されると、
connectionAttemptイベントが発生します。Happy Eyeballs を使用すると、このイベントが複数回発生する場合があります。 -
接続試行が失敗すると、
connectionAttemptFailedイベントが発生します。Happy Eyeballs を使用すると、このイベントが複数回発生する場合があります。 -
接続試行が指定タイムアウト期間を超えると、
connectionAttemptTimeoutイベントが発生します。Happy Eyeballs を使用する場合、最後の試行ではこのイベントは発生しません。Happy Eyeballs を使用していない場合、このイベントは発生しません。
さらに、Red Hat build of Node.js 22 では、前回の試行が失敗し、ユーザーがすでに接続を破棄した後に、新しい接続の試行が開始されることがある問題が解決されています。この問題により、以前のリリースではアサーションが失敗していました。
問題が発生した場合は、以前のリリースと同様に、--dns-result-order=ipv4first CLI オプションを使用して以前の動作に戻すことができます。--no-network-family-autoselection オプションを使用して、Happy Eyeballs を無効にすることもできます。
詳細は、Node.js の net.Socket ドキュメントを参照してください。
2.1.6. Web Streams の deflate-raw 圧縮形式のサポート リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js 22 では、CompressionStream および DecompressionSteam コンストラクターで deflate-raw パラメーターのサポートが追加されました。deflate-raw パラメーターは、ヘッダーと末尾のチェックサムなしで DEFLATE アルゴリズムを使用してストリームを圧縮または展開します。この機能拡張により、最新のブラウザーがサポートする Web ストリーム圧縮との一貫性が確保されます。
詳細は、Node.js の CompressionStream および DecompressionStream ドキュメントを参照してください。
2.1.7. ウォッチモードの完全なサポート リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js 22 は、実稼働環境で使用できる安定した機能としてウォッチモードを提供します。以前のリリースでは、ウォッチモードは実験的な機能としてのみ提供されていました。
node --watch CLI オプションを使用すると、Node.js アプリケーションをウォッチモードで実行できます。アプリケーションをウォッチモードで実行すると、インポートしたファイルを変更したときにプロセスが再起動されます。これにより、内部ループの開発サイクルが高速化するという主な利点が得られます。
ウォッチモードには次のオプションがあります。
-
--watchオプションは、Node.js をウォッチモードで起動します。 -
--watch-pathオプションは、Node.js をウォッチモードで起動し、監視するパスを指定します。 --watch-preserve-outputオプションは、ウォッチモードによってプロセスが再起動されるときのコンソールのクリアを無効にします。注記このオプションを使用するには、
--watchまたは--watch-pathオプションも使用する必要があります。
詳細は、Node.js の --watch ドキュメントを参照してください。
2.2. 非推奨の機能 リンクのコピーリンクがクリップボードにコピーされました!
次の機能は、Red Hat build of Node.js 22 リリースでは非推奨です。
このリリースの非推奨または削除された機能の詳細は、nodejs.org の Web サイト を参照してください。
2.2.1. インポートアサーションのサポート リンクのコピーリンクがクリップボードにコピーされました!
このリリースでは、assert キーワードを使用するインポートアサーションのサポートが削除されました。インポートアサーションは、with キーワードを使用するインポート属性に置き換えられました。Red Hat build of Node.js 22 では、assert キーワードが出現する場合は必ず with キーワードに置き換えてください。
たとえば、次のようなステートメントがあるとします。この場合、<module_name> はインポートするモジュールの名前を表します。
import "<module_name>" assert { ... }
import "<module_name>" assert { ... }
前の例を次のステートメントに置き換えます。
import "<module_name>" with { ... }
import "<module_name>" with { ... }
詳細は、Node.js の Import attributes ドキュメントを参照してください。
2.2.2. 一部の util API の実行時非推奨表示 リンクのコピーリンクがクリップボードにコピーされました!
このリリースには、次の util API の実行時非推奨表示が含まれています。
-
util._extend -
util.isArray -
util.isBoolean -
util.isBuffer -
util.isDate -
util.isError -
util.isFunction -
util.isNull -
util.isNullOrUndefined -
util.isNumber -
util.isObject -
util.isPrimitive -
util.isRegExp -
util.isString -
util.isSymbol -
util.isUndefined -
util.log
-throw-deprecation CLI フラグを使用してアプリケーションを実行すると、非推奨の API を確認できます。このフラグにより、実行時に非推奨と表示される API をコードで使用している場合に実行時エラーが生成されます。
詳細は、Node.js の Utilities: Deprecated APIs ドキュメントを参照してください。
2.3. テクノロジープレビュー機能 リンクのコピーリンクがクリップボードにコピーされました!
以下の機能は、Node.js 22 LTS リリースのテクノロジープレビュー機能として利用できます。
2.3.1. ブラウザー互換の WebSocket クライアントのサポート リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js 22 には、WebSocket API の実験的なブラウザー互換実装が組み込まれています。この機能拡張により、外部依存関係のない WebSocket クライアントが提供されます。
この機能はデフォルトで有効化されています。この機能を無効にする場合は、--no-experimental-websocket CLI フラグを使用できます。
2.3.2. ESM の互換性に関する機能拡張 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js 22 には、ECMAScript モジュール (ESM) の互換性を確保するための次の実験的な機能拡張が含まれています。
2.3.2.1. プロパティー import.meta.dirname および import.meta.filename リンクのコピーリンクがクリップボードにコピーされました!
このリリースには、ローカルファイルシステムから読み込まれる import.meta.dirname および import.meta.filename プロパティーの実験的なサポートが含まれています。file: ベースの ESM の場合、これらのプロパティーは CommonJS の __filename および __dirname グローバル変数と同等です。import.meta.filename プロパティーは、URL ではなくファイルパス形式でモジュールへの完全な絶対パスを提供します。import.meta.dirname プロパティーは、モジュールが含まれるフォルダーへの完全な絶対パスを提供します。
これらのプロパティーは、data: または https: URL からロードされるモジュールなど、file: ベース以外の ESM では使用できません。
詳細は、Node.js の import.meta ドキュメントを参照してください。
2.3.2.2. ESM 構文の自動検出と実行のサポート リンクのコピーリンクがクリップボードにコピーされました!
このリリースには、JavaScript で ESM 構文が検出された場合に ECMAScript (ES) モジュールを自動的に実行するための実験的なサポートが含まれています。最も近い package.json ファイルに type フィールドがない、あいまいな .js ファイルまたは拡張子のないファイルの場合、Node.js はファイルを解析して ESM 構文をチェックします。ESM 構文が検出されると、Node.js はファイルを ES モジュールとして実行します。構文が検出されず、ファイルの種類が不明な場合、Node.js はファイルを CommonJS モジュールとして実行します。この機能の典型的なユースケースは、近くに package.json ファイルがない拡張子のないスクリプトで、ES モジュール構文を使用可能にすることです。
この機能はデフォルトで有効化されています。この機能を無効にする場合は、--no-experimental-detect-module CLI フラグを使用できます。
この自動検出機能により起動時間が長くなります。ESM 構文のチェックによるオーバーヘッドを回避するには、package.json ファイルに type フィールドを追加するか、.mjs や .cjs などの明示的なファイル拡張子を使用することを検討してください。
2.3.2.3. 同期 ESM グラフの要求のサポート リンクのコピーリンクがクリップボードにコピーされました!
このリリースでは、同期 ESM グラフで require() 関数を使用するための実験的なサポートが追加されました。この機能は --experimental-require-module CLI フラグを使用して有効にできます。
モジュールをロードするには、モジュールが次の要件を満たしている必要があります。
-
最も近い
package.jsonファイルのtype:moduleフィールドまたは.mjs拡張子を使用して、ES モジュールとして明示的にマークされている。 -
完全に同期しており、トップレベルの
await式が含まれていない。
require() 関数は、要求されたモジュールを ES モジュールとしてロードし、モジュール名前空間オブジェクトを返します。この動作は動的 import() 機能に似ていますが、require() 関数は同期的に実行され、名前空間オブジェクトを直接返します。
詳細は、Node.js の Loading ECMAScript modules using require() ドキュメントを参照してください。
2.3.3. TypeScript のサポート リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js 22 では、TypeScript のサポートに次の実験的な機能が導入されています。
2.3.3.1. 型の削除を使用した TypeScript のサポート リンクのコピーリンクがクリップボードにコピーされました!
このリリースには、.ts ファイルから型アノテーションを削除する実験的な機能が含まれています。これにより、TypeScript 固有の構文を変換せずにこの種類のファイルを実行できるようになります。この機能は --experimental-strip-types CLI フラグを使用して有効にできます。
この機能には次の制限があります。
- インライン型アノテーションだけをサポートしています。
- 列挙型や名前空間などの機能はサポートしていません。
-
importおよびrequireステートメントで明示的なファイル拡張子が必要です。 -
実行時エラーを回避するために、型のインポートに
typeキーワードを強制的に使用します。 -
node_modulesの TypeScript はデフォルトで無効になっています。
詳細は、Node.js の Type stripping ドキュメントを参照してください。
2.3.3.2. 型の変換のサポート リンクのコピーリンクがクリップボードにコピーされました!
このリリースには、TypeScript のみの構文を JavaScript コードに変換できる実験的な機能が含まれています。この機能により、Red Hat build of Node.js で Enum や namespace などの TypeScript 構文をサポートできるようになります。この機能は --experimental-transform-types CLI フラグを使用して有効にできます。
詳細は、Node.js の Modules: TypeScript ドキュメントを参照してください。
2.3.4. 実験的な Web Storage API リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js 22 では、データストレージに SQLite を使用する Web Storage API の実験的な実装が導入されています。この機能は --experimental-webstorage CLI フラグを使用して有効にできます。
詳細は、Node.js の --experimental-webstorage ドキュメントを参照してください。
2.3.5. 実験的な sqlite API リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js 22 では、組み込みの node:sqlite モジュールの実験的な機能が導入されています。この機能は --experimental-sqlite CLI フラグを使用して有効にできます。
次の例は、node:sqlite モジュールを使用してメモリー内データベースを開き、データベースにデータを書き込み、データを読み取る方法を示しています。
詳細は、Node.js の SQLite ドキュメントを参照してください。
2.3.7. テキスト書式指定 API リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js 22 には、実験的な util.styleText(format, text) 関数が含まれています。この関数は、指定されたフォーマットおよびテキスト文字列パラメーターに基づいて、書式設定されたテキストを返します。この新しい API を使用すると、util.inspect.colors に基づいて、さまざまな色 (red、blue、green など) や強調スタイル (italic、bold、underline など) でテキストを書式設定できます。
次の例では、テキスト Hello World を緑のフォントで書式設定します。
const { styleText } = require('node:util');
const myMessage = styleText('green', 'Hello World');
console.log(myMessage);
const { styleText } = require('node:util');
const myMessage = styleText('green', 'Hello World');
console.log(myMessage);
次の例では、テキスト Error! を太字の赤いフォントで書式設定します。
const { styleText } = require('node:util');
const myMessage = styleText(['red', 'bold'], 'Error!');
console.log(myMessage);
const { styleText } = require('node:util');
const myMessage = styleText(['red', 'bold'], 'Error!');
console.log(myMessage);
詳細は、Node.js の util.styleText ドキュメントを参照してください。
2.3.8. 環境変数のロードと解析のための API リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js 22 には、ファイル内で環境変数を定義するための既存の実験的なサポートに加えて、環境変数をプログラムでロードして解析するための次の実験的な API が含まれています。
process.loadEnvFile (path)関数は、指定パスから.envファイルを読み込みます。たとえば、次のコードは、
testサブディレクトリーからdevelopment.envファイルをロードします。const { loadEnvFile } = require('node:process'); loadEnvFile('./test/development.env');const { loadEnvFile } = require('node:process'); loadEnvFile('./test/development.env');Copy to Clipboard Copied! Toggle word wrap Toggle overflow パスを指定しない場合 (たとえば、
loadEnvFile())、この関数はカレントディレクトリーにある.envファイルをロードします。詳細は、Node.js の
process.loadEnvFileドキュメントを参照してください。util.parseEnv(content)関数は、attribute=value ペア形式の環境変数の割り当てを含む指定文字列を解析します。以下に例を示します。
const { parseEnv } = require('node:util'); parseEnv('HELLO=world');const { parseEnv } = require('node:util'); parseEnv('HELLO=world');Copy to Clipboard Copied! Toggle word wrap Toggle overflow 詳細は、Node.js の
util.parseEnvドキュメントを参照してください。
2.3.9. ディスクへのコードキャッシュ保存 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Node.js 22 では、ディスク上にコードをキャッシュする別の方法として、次の 2 つの実験的な機能が導入されています。
2.3.9.1. NODE_COMPILE_CACHE 環境変数 リンクのコピーリンクがクリップボードにコピーされました!
このリリースには、ディスクへのコードキャッシュ自動保存を有効にする実験的な NODE_COMPILE_CACHE 環境変数が含まれています。この機能により、Node.js が CommonJS または ECMAScript (ES) モジュールをコンパイルするときに、指定ディレクトリーに保存されているディスク上の V8 コードキャッシュ を使用できるようになります。この機能は、ソフトウェアのコンパイルプロセスを迅速化するのに役立ちます。この機能を有効にするには、NODE_COMPILE_CACHE 環境変数を使用してキャッシュディレクトリーへのパスを指定します (例: NODE_COMPILE_CACHE=/path/to/cache/dir)。
この機能により、モジュールグラフの最初のロード時間が長くなる可能性があります。ただし、モジュールの内容が変更されなければ、この機能により、同じモジュールグラフを次回以降ロードする際にかかる時間が大幅に短縮されます。
生成されたキャッシュをクリアする場合は、NODE_COMPILE_CACHE 環境変数で指定したキャッシュディレクトリーを削除します。Red Hat build of Node.js は、次回このディレクトリーが使用されるときに、指定されたディレクトリーを自動的に再作成します。
異なるバージョンの Red Hat build of Node.js では、同じコンパイルキャッシュを使用できません。製品バージョンごとに独自のキャッシュが生成されます。複数の異なる製品バージョンで同じディレクトリーが使用されている場合、各製品バージョンによって生成されたキャッシュが、同じディレクトリー内に個別に保存されます。
現在、この機能を V8 JavaScript のコードカバレッジで使用する場合、コードキャッシュからデシリアライズされた関数で、V8 が収集するカバレッジの精度が低くなる可能性があります。このような場合は、正確なカバレッジを生成するためにテストを実行するときに、ディスクへのコードキャッシュ自動保存を無効にすることを検討してください。
2.3.9.2. module.enableCompileCache() API リンクのコピーリンクがクリップボードにコピーされました!
このリリースには、実験的な module.enableCompileCache() API が含まれています。これは、この API が呼び出された後にロードされるモジュールすべてのディスクへのコードキャッシュ保存を有効にするためのものです。この API は、ディスク上にコードをキャッシュする別の方法であり、NODE_COMPILE_CACHE 環境変数と比較して次の利点があります。
-
module.enableCompileCache()API は、ツールやライブラリーの作成者が独自のコードのキャッシュを有効にするために使用できます。NODE_COMPILE_CACHE環境変数はエンドユーザーのみが使用できます。 -
module.enableCompileCache()API は、v8-compile-cache および v8-compile-cache-lib パッケージに代わる組み込みの代替機能です。より優れたパフォーマンスを提供し、ECMAScript モジュール (ESM) をサポートしています。
詳細は、Node.js の module.EnableCompileCache ドキュメントを参照してください。
2.4. サポートされているアーキテクチャー リンクのコピーリンクがクリップボードにコピーされました!
Node.js ビルダーイメージおよび RPM パッケージが利用可能で、以下の CPU アーキテクチャーとの使用がサポートされます。
- AMD x86_64
- ARM64
- OpenShift 環境の IBM Z (s390x)
- OpenShift 環境の IBM Power System (ppc64le)
第3章 リリースコンポーネント リンクのコピーリンクがクリップボードにコピーされました!
- Node.js 22 LTS Builder Image for RHEL 8
- Node.js 22 LTS Universal Base Image 8
- Node.js 22 LTS Minimal Stand-alone Image for RHEL 8
- Node.js 22 LTS Minimal Universal Base Image 8
- Node.js 22 LTS Builder Image for RHEL 9
- Node.js 22 LTS Universal Base Image 9
- Node.js 22 LTS Minimal Stand-alone Image for RHEL 9
- Node.js 22 LTS Minimal Universal Base Image 9
第4章 修正された問題 リンクのコピーリンクがクリップボードにコピーされました!
このリリースには、Node.js 22 LTS のコミュニティーリリースでの問題修正がすべて組み込まれています。
第5章 既知の問題 リンクのコピーリンクがクリップボードにコピーされました!
本リリースに影響する既知の問題はありません。
第6章 必要なインフラストラクチャーコンポーネントに影響する既知の問題 リンクのコピーリンクがクリップボードにコピーされました!
本リリースで必要なインフラストラクチャーコンポーネントに影響を与える既知の問題はありません。