Node.js のバージョン管理には、従来から nvm や nodenv といったツールが使われてきました。しかし最近では、パッケージマネージャー自体が Node.js や Deno などの Runtime のバージョンを管理する方法が登場しています。
この記事では、OpenJS Foundation で標準化が進められているdevEngines という仕組みを紹介し、npm、pnpm、yarn の各パッケージマネージャーにおける対応状況について解説します。
devEngines は package.json で開発環境の Runtime のバージョンを指定し、パッケージマネージャーが自動的にダウンロード・インストールする仕組みです。OpenJS Foundation の Package Metadata Interoperability Collab Space で提案され、主に npm のメンテナによって策定されました。
通常のアプリケーション開発では、このdevEngines を使用して開発環境の Runtime のバージョンを管理します。
従来から存在するengines フィールド(npm /pnpm /yarn)との主な違いは以下の通りです。
{"engines":{"node":">=22.0.0"},"devEngines":{"runtime":{"name":"node","version":">=24.0.0","onFail":"download"}}}devEngines Field Proposal では以下のキーをサポートしています。
この記事では、runtime フィールドに焦点を当てて解説します。
onFail オプションで、バージョン要件を満たさない場合の動作を指定できます。
{"devEngines":{"runtime":{"name":"node","version":">=24.0.0","onFail":"download"}}}onFail: "download" を指定すると、要件を満たすバージョンが存在しない場合、パッケージマネージャーが自動的にダウンロードを試みます。これにより、nvm や nodenv などの追加ツールなしで Runtime のバージョン管理が可能になります。
注意:onFail: "download" はdevEngines 仕様で定義されていますが、実際に対応しているかどうかは各パッケージマネージャーの実装によります。詳しくは次のセクションを参照してください。
| パッケージマネージャー | devEngines 対応 | onFail: ignore | onFail: warn | onFail: error | onFail: download | 参考リンク |
|---|---|---|---|---|---|---|
| npm | 対応 (v10.9.0~) | 対応 | 対応 | 対応 | 未実装 | PR #7766 |
| pnpm | 対応 (v10.14~) | 未実装 | 未実装 | 未実装 | 対応 | PR #9755 |
| yarn | 未対応 | - | - | - | - |
v10.9.0 でdevEngines の対応が完了しましたが、onFail: "download" は未実装です。詳しい説明はないものの、npm の開発チームはセキュリティ上の懸念を理由に、あえて実装を見送っているようです。
利用可能なオプション:onFail: "ignore",onFail: "warn",onFail: "error"
{"devEngines":{"runtime":{"name":"node","version":">=24.0.0","onFail":"error"}}}v10.14.0 でdevEngines の対応が完了し、onFail: "download" による自動ダウンロード機能が利用可能です。
pnpm はonFail: "download" のみをサポートしており、error、warn、ignore は未実装です。これらを指定しても無視されます。
利用可能なオプション:onFail: "download"
{"devEngines":{"runtime":{"name":"node","version":">=24.0.0","onFail":"download"}}}yarn はdevEngines のサポート予定がありません。従来のengines フィールドでバージョン要件を指定することは可能ですが、自動インストールには対応していません。
devEngines は OpenJS Foundation で標準化が進められている、package.json で開発環境の runtime バージョンを管理する仕組みです。pnpm ではonFail: "download" に対応しており、自動ダウンロードが可能です。npm は検証機能のみ、yarn は未対応という状況です。
Runtime のバージョン管理に悩んでいる方は、npm や pnpm が提供するdevEngines を検討しても良いかもしれません。
バッジを受け取った著者にはZennから現金やAmazonギフトカードが還元されます。
