プロジェクトを開いて npm install したら謎のエラー。コードは1行も触っていないのに動かない——原因はNodeのバージョン違い、というのは現場で本当によくある事故です。

結論はシンプルで、nvmを「公式インストールスクリプト」で入れて、Node 24(LTS)を基準に使うのが2026年7月時点の正解です。Homebrewでのインストールはnvm公式が非推奨としているので、昔の記事の手順をそのまま真似するのは危険です。

この記事では、macOS/Linuxでnvmを導入してNodeのバージョンを切り替える最短手順に加えて、fnm・mise・Voltaといった現代的な代替ツールとの使い分けまでまとめます。複数案件を掛け持ちするフロントエンドエンジニアなら、この1本で環境まわりの迷いが消えるはずです。

この記事でわかること
・nvmの正しいインストール方法(Homebrewが非推奨な理由)
・Nodeのバージョン切り替え・デフォルト設定の全コマンド
・.nvmrcでプロジェクトごとに自動切り替えする方法
・nvm / fnm / mise / Volta の比較と使い分けの結論

独学に限界を感じたら

プログラミング教室がおすすめ。挫折せず最短で実力を伸ばせます。

PR

前提:2026年のNodeはどのバージョンを使うべきか

先にバージョン選びの結論です。2026年7月時点のNode.jsのサポート状況は次のとおりです。

バージョン状態使いどころ
Node 22Maintenance LTS既存プロジェクトの延命用
Node 24Active LTS(推奨)仕事・本番運用の基準
Node 26Current(2026年10月にLTS化予定)新機能の検証用

仕事で使うならNode 24(Active LTS)が基準です。

ちなみにNode.jsは2026年10月のNode 27から「年1回リリース・すべてLTS」という体制に変わるとアナウンスされており、偶数=LTS・奇数=短命という長年の暗黙ルールは終わりを迎えます。

この手の前提が数年単位で変わるからこそ、バージョン管理ツールが必須なのです。

最近のNode本体は標準機能もかなり増えています。詳しくはNodeの標準機能だけでできること10選にまとめているので、バージョンアップの動機づけにどうぞ。

nvmのインストール手順(macOS / Linux)

①現在の状態を確認する

まず、nvmがまだ入っていないことを確認します。

$ nvm -v
zsh: command not found: nvm

すでにHomebrew経由のnvmが入っている場合は、後述するトラブルの原因になるので brew uninstall nvm で一度削除してから進めるのがおすすめです。

②公式インストールスクリプトを実行する

nvmのインストールは、GitHubで配布されている公式のインストールスクリプトを使います。2026年7月時点の最新版はv0.40.5です。

$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.5/install.sh | bash

このスクリプトは ~/.nvm にnvm本体を配置し、~/.zshrc(または ~/.bashrc)に次の読み込み設定を自動追記してくれます。追記されていなければ手動で追加してください。

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

③なぜ「brew install nvm」ではダメなのか

日本語のブログ記事では brew install nvm を紹介しているものが多いのですが、nvmの開発チーム自身が「Homebrewでのインストールはサポート対象外」と明言しています

Homebrew版は読み込み設定の置き場所が独自で、シェルの設定が公式手順とズレてしまい、「ターミナルを開くたびにnvmが消える」「アップデートで挙動が変わる」といった不具合の温床になります。

私も過去にHomebrew版で入れたnvmが、macOSのメジャーアップデート後に突然読み込まれなくなり、朝イチの作業が丸ごと潰れた経験があります。公式スクリプトなら ~/.nvm 配下で完結するので、この種の事故はほぼ起きません。

④インストールを確認する

一度ターミナルを開き直してから(または source ~/.zshrc を実行してから)確認しましょう。ここを飛ばして「command not foundのままだ!」と焦るのが初心者の定番のハマりポイントです。

$ nvm -v
0.40.5

nvmでNodeのバージョンを変更する

①インストールできるバージョンを確認する

nvm ls-remote で全バージョンが一覧できますが、量が膨大なのでLTSだけに絞るのが実用的です。

$ nvm ls-remote --lts

        ...
        v22.x 系(Maintenance LTS)
        v24.x 系(Latest LTS)
        ...

②Node 24(LTS)をインストールする

メジャーバージョンだけ指定すれば、その系列の最新パッチが入ります。パッチ番号まで手打ちする必要はありません。

# Node 24系の最新をインストール
$ nvm install 24

# 「今のLTSの最新」を入れたいならこちらでもOK
$ nvm install --lts

③バージョンを切り替える

$ nvm use 24
Now using node v24.x.x

$ node -v
v24.x.x

手元に入っているバージョンの一覧は nvm ls で確認できます。矢印が付いているのが現在使用中のバージョンです。

④デフォルトのバージョンを設定する

ここが重要です。nvm use「そのターミナルのセッション内」でしか有効ではありません。新しいタブを開くたびに古いバージョンへ戻ってしまう場合は、デフォルトが未設定です。

$ nvm alias default 24

ターミナルを開き直して node -v がv24系になっていれば完了です。

⑤不要になったバージョンを削除する

# 使っていないバージョンを削除(例:Node 20系)
$ nvm uninstall 20

# nvm自体を削除したい場合はディレクトリごと消す
$ rm -rf "$NVM_DIR"

nvm自体を削除した場合は、~/.zshrc に追記されたnvm関連の3行も忘れずに消しておきましょう。

.nvmrcでプロジェクトごとに自動切り替えする

チーム開発での本命はこれです。プロジェクトのルートに .nvmrc というファイルを置き、使うバージョンを書いておきます。

$ echo "24" > .nvmrc

これで、そのディレクトリで引数なしの nvm use を実行するだけで指定バージョンに切り替わります。.nvmrc をリポジトリにコミットしておけば、「新メンバーのNodeだけバージョンが違って動かない」という問題を仕組みで潰せます。

さらに、ディレクトリ移動時に自動で nvm use させたい場合は、nvm公式READMEで案内されているzsh用フックを ~/.zshrc に追記します。

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

正直に言うと、この「フックを手で書く」体験の面倒さこそが、次に紹介するfnmやmiseが台頭した理由でもあります。

nvm・fnm・mise・Volta比較【2026年版】

2026年現在、Nodeのバージョン管理ツールはnvm一強ではありません。主要4ツールを比較します。

項目nvmfnmmiseVolta
実装シェルスクリプトRustRustRust
速度遅め(シェル起動を圧迫)高速高速高速
.nvmrc対応○(本家)×(package.jsonに記録)
自動切り替え△(手動フック)○(フラグ1つ)○(標準)○(シム方式)
Windows対応×(WSLのみ)
管理対象NodeのみNodeのみ多言語+タスク実行Node+npm/pnpm等
情報量・実績圧倒的多い増加中そこそこ

使い分けの結論はこうです。

  • 迷ったら・情報量重視なら:nvm(トラブル時の検索ヒット数が桁違い)
  • 速さ重視・nvmからの乗り換え先:fnm(.nvmrcをそのまま読める互換性+Rust製の速度)
  • Node以外(PHPやPython等)もまとめて管理したい:mise(.nvmrcも読めて移行が楽)
  • チーム全員の環境を強制的に揃えたい:Volta(package.jsonにNodeとnpmのバージョンを固定)

私がレビューする側で見てきた限り、2026年の新規チームではfnmかmiseを選ぶケースが目に見えて増えました。とはいえfnmもmiseも.nvmrcを読めるので、「まずnvmの流儀を覚える」ことは無駄になりません。この記事の知識はそのまま他ツールでも通用します。

初心者がハマるポイント3つ

①インストール直後に「command not found: nvm」

ほぼ100%、シェルの再読み込み忘れです。ターミナルを開き直すか source ~/.zshrc を実行してください。それでもダメなら、~/.zshrc にnvm読み込みの3行があるか確認しましょう。

②新しいタブを開くとバージョンが戻る

nvm use だけで満足して nvm alias default を設定していないパターンです。恒久的に使うバージョンは必ずdefaultに登録しましょう。

③バージョンを切り替えたらグローバルパッケージが消えた

消えたのではなく、グローバルパッケージはNodeのバージョンごとに別管理だからです。プロのコツとしては、グローバルインストールには極力頼らず、プロジェクトのdevDependenciesと npx で完結させる設計にしておくと、バージョンを何度切り替えても壊れません。

まとめ

  • nvmは公式インストールスクリプトで入れる(Homebrewは公式非推奨)
  • 2026年の基準はNode 24(Active LTS)nvm install 24nvm alias default 24
  • チーム開発では.nvmrcをコミットして環境差異を仕組みで防ぐ
  • 速さ重視ならfnm、多言語管理ならmise、チーム固定ならVoltaという選択肢もある

環境構築はエンジニアの「最初の壁」ですが、面接やポートフォリオレビューでも意外と見られているポイントです。

ここで詰まって独学が止まりがちな人は、スクールでメンターに環境ごと見てもらうのも近道ですし、実務経験を積みたい段階なら転職エージェントに現場環境の話を聞いてみるのも有効です。

フロントエンドエンジニアの仕事内容とあわせて、次の一歩を考えてみてください。

よくある質問(FAQ)

Q. nvmはWindowsでも使えますか?

本家nvm(nvm-sh)はmacOS/Linux用で、Windowsネイティブでは動きません。WSL2上で使うか、Windowsネイティブ対応のfnm・mise・Voltaを選ぶのがおすすめです。名前が似た「nvm-windows」は別プロジェクトなので、挙動の違いに注意してください。

Q. Node 26(Current)を今から使ってもいいですか?

個人の検証や新機能の素振りならOKですが、本番運用はNode 24(Active LTS)が無難です。Node 26は2026年10月にLTS入りする予定なので、それを待ってから上げるのが安全です。新しめのNode機能はNode標準機能10選で紹介しています。

Q. プロジェクトのNodeバージョンはどこで確認できますか?

まずリポジトリ直下の .nvmrc.node-version、次に package.jsonengines.node を確認しましょう。何も書かれていない場合はCIの設定ファイル(GitHub Actionsなど)にヒントがあることが多いです。

Next.js 16のようにフレームワーク側が最低バージョンを要求するケースもあります。

あわせて読みたい関連記事

ts-nodeもdotenvも不要|Node.js標準機能10選【2026】ts-node、dotenv、nodemon、Jest、axios、chalk——2026年のNode.jsなら、その多くはもう npm install 不要です。Node 24 LTS で安定版になったネイティブTypeScript実行をはじめ、標準機能だけで外部パッケージを置き換える10の方法を、コピペで動くコード付きで解説します。frontendlab.magicgifted.com Next.js 16移行ガイド|破壊的変更と新機能まとめ【2026】Turbopackが標準に、middlewareはproxyへ、paramsの同期アクセスは完全廃止——Next.js 16の破壊的変更と新機能を公式アップグレードガイドに沿って整理。codemodで自動化できる部分と手作業が必要な部分を切り分け、コピペで使える移行手順を解説します。frontendlab.magicgifted.com もう知らないと損!モダンJavaScript新機能12選【2026】配列のグルーピング、集合演算、遅延イテレータ、ディープコピー——2026年のJavaScriptは標準機能だけでここまで書けます。lodashやワンライナーに頼っていた処理を置き換える、Baseline対応済みのモダン機能12選を、コピペで動くコードとともに解説します。frontendlab.magicgifted.com