Node.jsを用いた開発において、最新のLTS(Long Term Support)バージョンを使用することは一般的ですが、プロジェクトの要件や特定のライブラリの互換性、あるいは既存システムの制約により、意図的に以前のバージョンへダウングレードしなければならない場面が発生します。
特に2026年現在のモダンな開発環境では、複数のプロジェクトを並行して進めることが当たり前となっており、バージョン管理の不手際がビルドエラーや実行時エラーに直結するケースも少なくありません。
本記事では、Node.jsを安全かつ確実にダウングレードするための方法を、使用している環境やパッケージ管理ツール別に詳しく解説します。
初めてダウングレード作業を行う方から、トラブルシューティングが必要なエンジニアの方まで、すぐに実践できる手順をまとめました。
なぜNode.jsのダウングレードが必要になるのか
Node.jsのダウングレードが必要になる主な理由は、環境のミスマッチによる互換性の問題です。
Node.jsは進化が早く、新しいメジャーバージョンがリリースされるたびに非推奨(Deprecated)なAPIが削除されたり、ESモジュールの挙動に変更が加えられたりすることがあります。
例えば、数年前に開発されたプロジェクトをメンテナンスする場合、最新バージョンのNode.jsでは依存ライブラリが動作しない、あるいはビルドツールであるWebpackやViteがエラーを吐くといった事態が起こり得ます。
このような状況で無理にコードを最新版に合わせるよりも、プロジェクトが元々想定していたNode.jsのバージョンに戻すほうが安全かつ効率的です。
また、チーム開発において「開発者Aの環境では動くが、開発者Bの環境ではエラーになる」といった現象が起きた際、バージョンの差異を解消するためにダウングレードが選択されることもあります。
Node.jsのバージョン管理ツールを活用するメリット
Node.jsを直接OSにインストール(インストーラー形式)している場合、バージョンを変更するたびに再インストールが必要となり、非常に手間がかかります。
そのため、現代のNode.js開発ではバージョン管理ツールの利用が推奨されています。
主なメリットは以下の通りです。
| メリット | 内容 |
|---|---|
| 切り替えが容易 | コマンドひとつで異なるバージョンへ瞬時に切り替え可能 |
| 共存が可能 | 複数のバージョンを同じOS内に共存させ、プロジェクトごとに使い分けられる |
| アンインストールが簡単 | 特定のバージョンが不要になった際、OSを汚さず削除できる |
| 権限問題の回避 | ローカルユーザー権限で動作するため、sudoによるトラブルを防げる |
それでは、代表的なツールを用いたダウングレード手順を見ていきましょう。
nvm (Node Version Manager) を使用したダウングレード
nvmは世界的に最も広く普及しているバージョン管理ツールの一つです。
macOSやLinux環境での利用が一般的ですが、Windows向けには nvm-windows という互換ツールが存在します。
nvmでのダウングレード手順
まずは、現在インストールされているバージョンと、利用可能なバージョンを確認します。
# 現在使用しているNode.jsのバージョンを確認
node -v
# インストール済みのリストを表示
nvm ls
次に、目的のバージョンをインストールします。
ここでは例として Node.js 22.x から 20.x へのダウングレードを想定します。
# 特定のバージョンをインストール
nvm install 20.10.0
# バージョンを切り替える
nvm use 20.10.0
Now using node v20.10.0 (npm v10.2.3)
特定のプロジェクトだけでダウングレードを適用したい場合は、プロジェクトのルートディレクトリに .nvmrc というファイルを作成し、中に 20.10.0 と記述しておきます。
その後、そのディレクトリで nvm use を実行するだけで自動的に適切なバージョンへ切り替わります。
fnm (Fast Node Manager) を使用したダウングレード
2026年現在、Rust製で非常に高速に動作する fnm (Fast Node Manager) を利用するエンジニアが増えています。
シェル起動時のオーバーヘッドが少なく、パフォーマンスを重視する方に最適です。
fnmでのダウングレード手順
fnmを使用している場合、コマンド体系はnvmと非常に似ています。
# 利用可能なバージョンのリスト(リモート)を表示
fnm list-remote
# 必要なバージョンをインストール
fnm install 18.18.0
# デフォルトのバージョンを変更する
fnm default 18.18.0
# 現在のシェルで使用するバージョンを切り替える
fnm use 18.18.0
fnmの優れた点は、--use-on-cd オプションをシェルの設定ファイル(bashrcやzshrc)に追加しておくことで、ディレクトリを移動するだけで自動的にNode.jsのバージョンを切り替えられる点です。
これにより、手動でダウングレード操作を行う手間自体を省くことができます。
Volta を使用したダウングレード
Voltaは「Toolchain Manager」を掲げており、Node.jsだけでなくnpmやyarn、グローバルインストールされたパッケージのバージョンまで一括管理できるツールです。
設定が宣言的であり、チーム開発において非常に強力です。
Voltaでのダウングレード手順
Voltaの場合、pin コマンドを使用するのが最も確実なダウングレード方法です。
# プロジェクトディレクトリ内で実行
# Node.js 20系にダウングレードして固定する
volta pin node@20
このコマンドを実行すると、プロジェクト内の package.json に以下のような記述が自動で追加されます。
{
"name": "my-project",
"version": "1.0.0",
"volta": {
"node": "20.10.0"
}
}
これにより、そのプロジェクトを開いている間は強制的に指定のバージョンが使用されるようになります。
他のプロジェクトに影響を与えずに、特定の開発環境だけをダウングレードしたい場合に非常に有用です。
Node.js 標準機能 Corepack を活用する方法
Node.js v16.9.0 以降、パッケージマネージャーのバージョンを管理するための「Corepack」が導入されました。
2026年現在はこれが標準的なワークフローに組み込まれています。
これはNode.js自体のダウングレードではありませんが、実行環境を縛るという意味で重要な手法です。
package.json の packageManager フィールドを指定することで、開発メンバー全員が同じバージョンのツールを使うよう強制できます。
{
"packageManager": "npm@10.2.3"
}
Node.jsのバージョン自体も、エンジンの制限として記載することが推奨されます。
{
"engines": {
"node": ">=20.0.0 <21.0.0"
}
}
ただし、engines の記述は「このバージョン以外では動かない」という宣言に過ぎず、実際にダウングレードを実行するわけではないため、前述のnvmやVoltaと組み合わせて利用します。
ダウングレード後に発生しやすいエラーと対処法
Node.jsをダウングレードした直後は、環境の整合性が崩れることによるエラーが発生しやすくなります。
代表的なトラブルとその解決策を紹介します。
1. node-gyp によるネイティブモジュールのビルドエラー
C++などで書かれたネイティブアドオンを含むライブラリ(例: node-sass ※現在は非推奨, bcrypt など)は、Node.jsのバージョンに依存してビルドされています。
ダウングレード後にこれらのライブラリを実行しようとすると、「The module ‘…’ was compiled against a different Node.js version」 というエラーが出ることがあります。
解決策:
node_modules ディレクトリを一度削除し、依存関係を再インストールしてください。
# node_modulesとロックファイルを削除(必要に応じて)
rm -rf node_modules
rm package-lock.json
# 再度インストール
npm install
2. npm/yarn のバージョン不一致
Node.jsをダウングレードすると、それに付随してインストールされている npm のバージョンも変わることがあります。
古いnpmでは package-lock.json のフォーマット(lockfileVersion)がサポートされていない場合があります。
解決策: 必要に応じてnpm自体を単体でアップデート、または指定バージョンにダウングレードします。
# npmを特定のバージョンにする
npm install -g npm@9.x
3. グローバルパスの競合
以前のバージョンでインストールしたグローバルパッケージ(例: typescript, nodemon)が、新しいバージョンのパスを参照したままになっているケースがあります。
解決策: 管理ツール(nvmなど)を使用している場合は、各バージョンごとにグローバルパッケージを管理しているため、ダウングレード後のバージョンでも改めてインストールを行う必要があります。
# 現在のバージョン環境にパッケージをインストール
npm install -g nodemon
OSから直接アンインストールしてダウングレードする場合
バージョン管理ツールを導入しておらず、インストーラーで直接入れたNode.jsをダウングレードしたい場合は、一度現在のバージョンを完全に削除してから、公式サイトのアーカイブから過去のインストーラーを入手する必要があります。
Windowsの場合
- 「設定」→「アプリと機能」から Node.js をアンインストールします。
C:\Program Files\nodejsが残っている場合は手動で削除します。- Node.js 公式の過去リリース一覧から必要なバージョンの
.msiをダウンロードして実行します。
macOSの場合
- 公式インストーラーで入れた場合、複数のディレクトリにファイルが散らばっているため、以下のコマンド等で手動削除が必要です(注意が必要な操作です)。
sudo rm -rf /usr/local/lib/node_modules
sudo rm -rf /usr/local/bin/node
sudo rm -rf /usr/local/include/node
- その後、公式サイトから
.pkgファイルをダウンロードしてインストールします。
ただし、この方法は手間がかかり、環境を汚す原因となるため、2026年現在の開発現場では管理ツールへの移行を強くおすすめします。
まとめ
Node.jsのダウングレードは、プロジェクトの安定稼働を維持するために避けては通れない技術の一つです。
- nvm や fnm などのバージョン管理ツールを使えば、コマンド一つで安全に切り替えが可能。
- Volta を使えば、プロジェクトごとにバージョンを自動で固定(pin)できる。
- ダウングレード後は
node_modulesの再構築が必要になるケースが多い。 - ネイティブモジュールのエラーには
npm installのやり直しで対応する。
開発環境を適切に管理することで、バージョンの違いに悩まされる時間を減らし、本来のコーディング作業に集中できるようになります。
もし現在、直接Node.jsをインストールしているなら、この機会に fnm などの管理ツールを導入し、柔軟にバージョンを行き来できる環境を整えてみてはいかがでしょうか。
