プロジェクトを開いて 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 の比較と使い分けの結論
前提:2026年のNodeはどのバージョンを使うべきか
先にバージョン選びの結論です。2026年7月時点のNode.jsのサポート状況は次のとおりです。
| バージョン | 状態 | 使いどころ |
|---|---|---|
| Node 22 | Maintenance LTS | 既存プロジェクトの延命用 |
| Node 24 | Active LTS(推奨) | 仕事・本番運用の基準 |
| Node 26 | Current(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.5nvmで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ツールを比較します。
| 項目 | nvm | fnm | mise | Volta |
|---|---|---|---|---|
| 実装 | シェルスクリプト | Rust | Rust | Rust |
| 速度 | 遅め(シェル起動を圧迫) | 高速 | 高速 | 高速 |
| .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 24→nvm 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.json の engines.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



