Node.jsチームは先日、Node v20をリリースした。Node v20は、10月に長期サポート(LTS)ステージに入った後、完全な実運用に向けた準備が整う予定だ。主な機能には、セキュリティ向上のための実験的な権限モデルや、スタンドアロンで実行可能なNodeアプリケーションのビルドを含んでいる。
Node.js TSC MemberのRafael Gonzaga氏は、次のように説明している。
実験的な権限モデルの追加とV8アップデートにより、Node.js20は、Node.jsが開発環境にどのように適合するかをテストし、評価するのに最適になった。私たちはこの1年間でNode.jsをより安全で高性能にするという、素晴らしい進歩を遂げた。
開発者は、--experimental-permission
フラグで新しい権限APIを選択でき、これを有効にすると利用可能なすべてのアクセスが制限される。現在、利用可能な権限は、ファイルシステムへのアクセス(--allow-fs-read
、--allow-fs-write
フラグなど)、子プロセスの生成(--allow-child-process
フラグ)、ワーカスレッドの生成(--allow-worker
フラグ)などを設定できる。たとえば、--allow-fs-write=* --allow-fs-read=/tmp/
は、/tmp/
フォルダへの FileSystemRead
アクセスを許可し、すべての FileSystemWrite
操作を許可する。
権限はプロセス範囲に限定される。したがって開発者は特定のモジュールのみに対するアクセス許可を拒否できない。--experimental-permission
を持つプロセスは、デフォルトでは子プロセスを生成できない。--allow-child-process
フラグが有効な場合、正しい権限の子プロセスを生成するために、正しい引数を渡すことはユーザーの責任になる。詳細についてはこのプルリクエストと権限モデルのロードマップを参照されたい。
Node v20ではNode.jsがない、またはインストールできないユーザーのためにNodeアプリケーションをスタンドアロンの実行ファイル(単独で実行可能)からビルドできる。単独実行可能アプリのサポートは、Windows、MacOS、Linux(Alpineを除くNode.jsがサポートするすべてのディストリビューション、s390xとppc64を除くNode.jsがサポートするすべてのアーキテクチャ)で利用可能だ。マイクロソフトはベクター攻撃を減らす方法として単独実行可能なアプリを実験している。
Node v19で導入されたテストランナーがv20では安定しており、製品として準備万端であることを示している。V8 JavaScript/WebAssemblyエンジンは、バージョン11.3にアップデートされている。これによりArrayとTypedArrayをコピーで変更するメソッドや、サイズ変更可能なArrayBufferと拡張可能なSharedArrayBufferなど新しいJavaScript APIが利用可能になった。Node v20はV8のWebAssemblyテールコールのサポート(v11.2で導入)を活用できる。そしてimport.meta.resolve()の呼び出しが同期されるようになった。
Node.jsはOpen JS FoundationのMITライセンスで利用できるオープンソースソフトウェアである。Node.jsへのコントリビューションとフィードバックはNode.jsのコントリビュート・ガイドラインと行動規範によって奨励されている。