複数のプロジェクトを開発していると、プロジェクトごとに異なるNode.jsバージョンが必要になることがあります。本記事では、Node.jsバージョン管理ツールであるnvmとfnmの使い方、.nvmrcによるプロジェクト設定、そしてCorepackによるパッケージマネージャー管理について解説します。

実行環境

項目 バージョン
Node.js 20.x LTS以上
npm 10.x以上
OS Windows/macOS/Linux
nvm v0.40.3
fnm v1.38.1

前提条件

  • JavaScriptの基礎文法を理解していること
  • ターミナル(コマンドライン)の基本操作ができること
  • 管理者権限でのコマンド実行が可能であること

なぜバージョン管理ツールが必要なのか

Node.jsのバージョン管理ツールを使用する主な理由は以下の通りです。

  1. プロジェクトごとの互換性確保: 古いプロジェクトはNode.js 18.xが必要で、新しいプロジェクトはNode.js 22.xが必要といった状況に対応できます
  2. チーム開発での統一: チームメンバー全員が同じNode.jsバージョンを使用することで、環境差異による問題を防げます
  3. 簡単なバージョン切り替え: コマンド一つでNode.jsバージョンを即座に切り替えられます
  4. 安全なインストール: sudo権限なしでNode.jsやグローバルパッケージをインストールできます
graph LR
    A[プロジェクトA<br/>Node.js 18.x] --> VM[バージョン管理ツール<br/>nvm / fnm]
    B[プロジェクトB<br/>Node.js 20.x] --> VM
    C[プロジェクトC<br/>Node.js 22.x] --> VM
    VM --> D[適切なNode.js<br/>バージョンを自動選択]

nvmとfnmの比較

Node.jsのバージョン管理ツールとして代表的なnvmとfnmの特徴を比較します。

特徴 nvm fnm
対応OS macOS/Linux/WSL Windows/macOS/Linux
実装言語 Bash Rust
起動速度 標準的 高速
.nvmrcサポート あり あり
.node-versionサポート なし あり
自動バージョン切替 スクリプト追加が必要 組み込みサポート

Windowsネイティブ環境で開発する場合はfnmが推奨されます。macOS/Linuxでは両方とも利用可能ですが、起動速度を重視する場合はfnmが有利です。

fnmのインストールと設定

fnm(Fast Node Manager)は、Rustで実装された高速なNode.jsバージョン管理ツールです。クロスプラットフォーム対応で、Windowsでもネイティブに動作します。

Windowsでのfnmインストール

PowerShellを管理者権限で開き、以下のコマンドを実行します。

1
2
3
4
5
6
7
8
# wingetを使用したインストール
winget install Schniz.fnm

# または Scoopを使用
scoop install fnm

# または Chocolateyを使用
choco install fnm

インストール後、PowerShellプロファイルに設定を追加します。

1
2
3
# プロファイルファイルを開く(存在しない場合は作成)
if (-not (Test-Path $PROFILE)) { New-Item $PROFILE -Force }
notepad $PROFILE

プロファイルに以下の行を追加して保存します。

1
fnm env --use-on-cd --shell powershell | Out-String | Invoke-Expression

新しいPowerShellウィンドウを開いて設定を反映させます。

macOS/Linuxでのfnmインストール

ターミナルで以下のコマンドを実行します。

1
2
3
4
5
# curlを使用したインストール
curl -fsSL https://fnm.vercel.app/install | bash

# または Homebrewを使用(macOS/Linux)
brew install fnm

シェル設定ファイルに以下を追加します。

Bashの場合(~/.bashrc):

1
eval "$(fnm env --use-on-cd --shell bash)"

Zshの場合(~/.zshrc):

1
eval "$(fnm env --use-on-cd --shell zsh)"

Fishの場合(~/.config/fish/conf.d/fnm.fish):

1
fnm env --use-on-cd --shell fish | source

設定を反映させるためにシェルを再起動するか、設定ファイルを再読み込みします。

1
2
3
4
5
# Bashの場合
source ~/.bashrc

# Zshの場合
source ~/.zshrc

fnmの基本操作

インストールが完了したら、fnmを使用してNode.jsをインストールします。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 利用可能なNode.jsバージョン一覧を表示
fnm list-remote

# 最新のLTSバージョンをインストール
fnm install --lts

# 特定のバージョンをインストール
fnm install 22
fnm install 20.18.0

# インストール済みバージョン一覧を表示
fnm list

# バージョンを切り替え
fnm use 22

# デフォルトバージョンを設定
fnm default 22

# 現在使用中のバージョンを確認
fnm current
node --version

nvmのインストールと設定

nvm(Node Version Manager)は、最も広く使われているNode.jsバージョン管理ツールです。macOS、Linux、WSL環境で動作します。

macOS/Linuxでのnvmインストール

ターミナルで以下のコマンドを実行します。

1
2
3
4
5
# インストールスクリプトを実行
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash

# または wgetを使用
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash

インストールスクリプトは自動的にシェル設定ファイル(~/.bashrc~/.zshrcなど)に以下の設定を追加します。

1
2
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

シェルを再起動するか、設定ファイルを再読み込みします。

1
source ~/.bashrc  # または ~/.zshrc

インストールの確認を行います。

1
2
command -v nvm
# nvm と表示されれば成功

WSL環境でのnvmインストール

Windows Subsystem for Linux(WSL)では、Linux環境と同様にnvmをインストールできます。

1
2
3
# WSLターミナルで実行
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
source ~/.bashrc

nvmの基本操作

nvmを使用してNode.jsをインストール・管理します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 利用可能なバージョン一覧を表示
nvm ls-remote

# LTSバージョン一覧のみ表示
nvm ls-remote --lts

# 最新のLTSバージョンをインストール
nvm install --lts

# 特定のバージョンをインストール
nvm install 22
nvm install 20.18.0

# インストール済みバージョン一覧を表示
nvm ls

# バージョンを切り替え
nvm use 22

# デフォルトバージョンを設定
nvm alias default 22

# 現在使用中のバージョンを確認
nvm current
node --version

# 特定バージョンでコマンドを実行
nvm exec 20 node --version

# Node.jsをアンインストール
nvm uninstall 18

.nvmrcによるプロジェクト設定

.nvmrcファイルを使用すると、プロジェクトごとに使用するNode.jsバージョンを指定できます。チーム開発やCI/CD環境で特に有用です。

.nvmrcファイルの作成

プロジェクトのルートディレクトリに.nvmrcファイルを作成します。

1
2
3
4
5
6
7
8
# 現在使用中のバージョンを.nvmrcに書き込む
node --version > .nvmrc

# または直接バージョンを指定
echo "22" > .nvmrc

# LTSを指定することも可能
echo "lts/*" > .nvmrc

.nvmrcファイルの内容例は以下の通りです。

1
22.12.0

.nvmrcファイルの書式

.nvmrcファイルでは以下の形式でバージョンを指定できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 完全なバージョン指定
22.12.0

# メジャーバージョンのみ(最新のマイナー/パッチを使用)
22

# メジャー.マイナーバージョン
22.12

# LTSの最新バージョン
lts/*

# 特定のLTSコードネーム
lts/jod

# 最新バージョン
node

コメントも記述できます。

1
2
# このプロジェクトはNode.js 22を使用します
22

自動バージョン切り替え

fnmでは--use-on-cdオプションを使用すると、ディレクトリ移動時に自動的にバージョンが切り替わります。先述のシェル設定で既に有効になっています。

nvmで自動バージョン切り替えを有効にするには、シェル設定に追加のスクリプトが必要です。

Zsh用(~/.zshrc):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# place this after nvm initialization!
autoload -U add-zsh-hook

load-nvmrc() {
  local nvmrc_path
  nvmrc_path="$(nvm_find_nvmrc)"

  if [ -n "$nvmrc_path" ]; then
    local nvmrc_node_version
    nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")

    if [ "$nvmrc_node_version" = "N/A" ]; then
      nvm install
    elif [ "$nvmrc_node_version" != "$(nvm version)" ]; then
      nvm use
    fi
  elif [ -n "$(PWD=$OLDPWD nvm_find_nvmrc)" ] && [ "$(nvm version)" != "$(nvm version default)" ]; then
    echo "Reverting to nvm default version"
    nvm use default
  fi
}

add-zsh-hook chpwd load-nvmrc
load-nvmrc

この設定により、.nvmrcファイルがあるディレクトリに移動すると自動的に指定されたバージョンに切り替わります。

1
2
3
4
# .nvmrcがあるプロジェクトディレクトリに移動
cd my-project/
# Found '/path/to/my-project/.nvmrc' with version <22>
# Now using node v22.12.0 (npm v10.9.0)

.node-versionファイル

fnmは.node-versionファイルもサポートしています。.nvmrcと同様の機能を持ち、一部のツール(例:asdf、volta)との互換性があります。

1
2
# .node-versionファイルの作成
echo "22.12.0" > .node-version

fnmは.node-version.nvmrcの両方が存在する場合、.node-versionを優先します。

Corepackによるパッケージマネージャー管理

Corepackは、Node.js v16.9.0以降にバンドルされているパッケージマネージャーのバージョン管理ツールです。npm、Yarn、pnpmを個別にインストールすることなく、プロジェクトごとに適切なバージョンを使用できます。

Corepackの有効化

Corepackはデフォルトでは無効になっているため、明示的に有効化する必要があります。

1
2
3
4
5
6
# Corepackを有効化(yarn、pnpmのシムを作成)
corepack enable

# 特定のパッケージマネージャーのみ有効化
corepack enable yarn
corepack enable pnpm

有効化後、Yarn/pnpmを個別にインストールする必要はありません。

1
2
3
4
5
# Yarnが自動的に利用可能になる
yarn --version

# pnpmも同様
pnpm --version

package.jsonでのパッケージマネージャー指定

package.jsonpackageManagerフィールドでプロジェクトが使用するパッケージマネージャーとバージョンを指定できます。

1
2
3
4
5
{
  "name": "my-project",
  "version": "1.0.0",
  "packageManager": "pnpm@9.15.0"
}

Yarnを使用する場合の例は以下の通りです。

1
2
3
4
5
{
  "name": "my-project",
  "version": "1.0.0",
  "packageManager": "yarn@4.6.0"
}

Corepackの基本操作

Corepackを使用したパッケージマネージャーの管理方法を解説します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 現在のプロジェクトに対してパッケージマネージャーを設定
corepack use pnpm@9.15.0
# package.jsonのpackageManagerフィールドが更新される

# パッケージマネージャーを最新版に更新
corepack up

# 特定バージョンのパッケージマネージャーをグローバルにインストール
corepack install -g pnpm@9.15.0

# キャッシュをクリア
corepack cache clear

Corepackの実践例

新しいプロジェクトでpnpmを使用する場合の例を示します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# プロジェクトディレクトリを作成
mkdir my-new-project
cd my-new-project

# package.jsonを初期化
npm init -y

# pnpmを使用するように設定
corepack use pnpm@latest

# package.jsonを確認
cat package.json
# "packageManager": "pnpm@9.15.0" が追加されている

# pnpmで依存関係をインストール
pnpm install

チームメンバーがこのプロジェクトをクローンした場合、Corepackが自動的に正しいバージョンのpnpmを使用します。

1
2
3
git clone <repository-url>
cd my-new-project
pnpm install  # 自動的にpackageManagerで指定されたpnpmバージョンが使用される

Corepackの注意点

Corepackに関するいくつかの重要な注意点があります。

  1. Node.js v25以降のサポート終了: Node.js v25からはCorepackがバンドルされなくなる予定です。将来的にはnpm install -g corepackで個別にインストールする必要があります

  2. npmはデフォルトで無効: Corepackはnpmのシムをデフォルトで作成しません。npmもCorepackで管理したい場合は明示的に有効化が必要です

    1
    
    corepack enable npm
    
  3. 初回ダウンロード: 指定されたパッケージマネージャーが未キャッシュの場合、初回実行時にダウンロードが発生します

実践的なワークフロー

ここまで学んだ内容を組み合わせた実践的なワークフローを紹介します。

新規プロジェクトのセットアップ

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# 1. プロジェクトディレクトリを作成
mkdir my-awesome-project
cd my-awesome-project

# 2. Node.jsバージョンを指定
echo "22" > .nvmrc
fnm use  # または nvm use

# 3. package.jsonを初期化
npm init -y

# 4. パッケージマネージャーを設定(pnpmを使用する場合)
corepack enable
corepack use pnpm@latest

# 5. Gitに追加
git init
echo "node_modules/" >> .gitignore
git add .nvmrc package.json
git commit -m "Initial setup with Node.js 22 and pnpm"

既存プロジェクトへの参加

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 1. リポジトリをクローン
git clone <repository-url>
cd <project-name>

# 2. .nvmrcがあれば自動的にバージョンが切り替わる(fnmの場合)
# 手動で切り替える場合
fnm use  # または nvm use

# 3. 指定されたNode.jsバージョンがインストールされていない場合
fnm install  # または nvm install

# 4. 依存関係をインストール
# package.jsonにpackageManagerが指定されていれば自動で適切なPMが使用される
pnpm install  # または yarn install / npm install

CI/CD環境での設定

GitHub Actionsでの設定例を示します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
name: CI

on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version-file: '.nvmrc'
          cache: 'pnpm'

      - name: Enable Corepack
        run: corepack enable

      - name: Install dependencies
        run: pnpm install

      - name: Run tests
        run: pnpm test

この設定により、.nvmrcに指定されたNode.jsバージョンと、package.jsonpackageManagerに指定されたパッケージマネージャーが自動的に使用されます。

トラブルシューティング

よくある問題と解決策を紹介します。

nvmコマンドが見つからない

シェルを再起動するか、設定ファイルを再読み込みしてください。

1
source ~/.bashrc  # または ~/.zshrc

それでも解決しない場合は、設定が正しく追加されているか確認してください。

1
cat ~/.bashrc | grep NVM

fnmでバージョンが自動切り替えされない

シェル設定に--use-on-cdオプションが含まれているか確認してください。

1
2
# 正しい設定例
eval "$(fnm env --use-on-cd --shell bash)"

Corepackでダウンロードエラーが発生する

ネットワーク接続を確認し、プロキシ設定が必要な場合は環境変数を設定してください。

1
2
export HTTPS_PROXY=http://proxy.example.com:8080
corepack enable

権限エラーが発生する

nvm/fnmを使用している場合、sudoは通常不要です。sudoを使用せずに実行してください。

1
2
3
4
5
# 正しい方法
npm install -g typescript

# 避けるべき方法
sudo npm install -g typescript

まとめ

本記事では、Node.jsのバージョン管理について以下の内容を解説しました。

  1. バージョン管理ツールの必要性: プロジェクトごとの互換性確保とチーム開発での統一が重要
  2. fnm: Windows対応で高速、自動バージョン切替が組み込み済み
  3. nvm: 広く普及、macOS/Linux/WSLで動作
  4. .nvmrc: プロジェクトごとのNode.jsバージョンを宣言的に管理
  5. Corepack: パッケージマネージャー(Yarn/pnpm)のバージョンを統一管理

これらのツールを活用することで、複数プロジェクトでのNode.js開発がより効率的かつ安全になります。次のステップとして、package.jsonの詳細な設定やnpmスクリプトの活用について学ぶことをおすすめします。

参考リンク