0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

nvmで一発解決:EBADENGINEを確実に潰す、WSL2×Ubuntu向け Node LTS 運用ガイド

Last updated at Posted at 2025-10-09

はじめに(対象とゴール)

  • 対象:Windows + WSL2(Ubuntu) で Node/Codex CLI などの最新ツールを動かしたい人

  • ゴール

    1. EBADENGINE確実に回避
    2. 常にLTS(安定版)を使い続けられる運用(自動追従)を整備
  • 想定作業時間:10〜20分

  • 作業場所WSL(Ubuntu)ターミナルのみ(PowerShellではなく、Ubuntu と表示されたウィンドウ)

なぜ「LTS」なの?

Nodeは「Current → Active LTS → Maintenance」というライフサイクルで進み、本番運用はLTS推奨です。偶数メジャーがLTSへ移行します(22→LTS、24→2025-10-28にLTS移行予定)。(GitHub)


1. EBADENGINE の正体(まず理解)

  • EBADENGINE=npmが出す「指定エンジン(Nodeなど)に合わない」という警告/エラー。
    例:package.jsonengines.node>=22 なのに、手元の Node が 18 だと不一致で出ます。(docs.npmjs.com)

要点Nodeが古いのが根本。最新LTSへ切り替えれば原則解決します。


2. すでに nvm がある人向け「最短2コマンド」

nvm install --lts    # その時点のLTS(例:22系、LTS移行後は24系)を取得
nvm use --lts        # いま使うNodeをLTSに切り替え
  • --lts常に最新LTSを選ぶスイッチ(将来のLTS移行にも自動追従)。(GitHub)

確認

node -v   # v22.x 以上(LTS移行後は v24.x 以上)
npm -v    # npmのバージョンが出ればOK

3. ゼロから nvm を入れて LTS にする(手順と意味)

3-1. nvm をインストール(WSLのUbuntuで実行)

# nvm 公式インストールスクリプト(2025-10時点最新版)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
# 役割:~/.nvm に nvm を入れ、~/.bashrc 等へ読み込み行を追記
  • 根拠:nvm公式READMEの手順。タグは v0.40.3。(GitHub)

いま開いているシェルですぐ使えるよう、手動で読み込み:

export NVM_DIR="$HOME/.nvm"                         # nvmのホームを環境変数に設定
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"     # nvm本体をこのシェルに読み込む

補足:インストーラは .bashrc にも追記しますが、すぐ使いたいので手動で source しています。(GitHub)

3-2. LTS を入れて使う

nvm install --lts    # 最新LTSをダウンロード & インストール
nvm use --lts        # 使うNodeをLTSへ切替(カレントシェル)
node -v              # v22+(LTS移行後は v24+)を確認
npm -v               # npmが出ればOK
  • 用語

    • LTS=Long Term Support(長期サポート/安定版)
    • Current=最新機能を取り込み中の現行版(のちにLTSへ)
    • Maintenance=重要修正のみの保守段階

4. 新しいターミナルでも自動でLTSを選ぶ(恒久設定)

nvm alias default lts/*
# 意味:新規シェルを開くたびに "LTS" を既定として選択
  • 根拠:nvm公式の「Set default node version」。(GitHub)

Tip:プロジェクト直下に .nvmrc を置き、内容を lts/* にしておくと、
そのディレクトリでは nvm use で自動的にLTSへ切替できます。(GitHub)


5. 動かないときの「3チェック」(原因切り分け)

# ① PATH と実体の確認
which node      # 例)/home/<you>/.nvm/versions/node/v22.x/bin/node
node -v         # v22.x 以上か(LTS移行後は v24.x 以上)

# ② nvm 自体が見えるか
command -v nvm  # "nvm" と出ればOK
echo "$NVM_DIR" # 例)/home/<you>/.nvm

# ③ nvm の在庫と取得可能なLTS
nvm ls                  # インストール済み一覧(→が現在選択)
nvm ls-remote --lts     # 取得できるLTSの一覧

よくある症状と対処

  • nvm: command not found
    ~/.bashrc に nvm 読み込み行があるか確認。なければ追記して再読み込み:

    echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.bashrc
    echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"' >> ~/.bashrc
    source ~/.bashrc
    

    (公式READMEのインストール節・Verifyに準拠)(GitHub)

  • which node/usr/bin/node を指す(nvm管理下でない)
    Windows側PATHの混入が原因のことあり。WSLの wsl.conf
    WindowsのPATHを足さない設定にする:

    # /etc/wsl.conf(要sudoで編集)
    [interop]
    appendWindowsPath=false
    

    反映は wsl --shutdown(PowerShell)→WSL再起動。(Microsoft Learn)


6. やらないほうがいいこと(落とし穴)

  • sudo npm -g の乱用
    権限や配置が混在し、PATH事故の温床。nvm管理下のNodeで素の npm -g を使うのが基本。
    併せて、nvmはnpmのprefix設定と非互換である旨の注意がREADMEにあります。(GitHub)
  • Windows側のNodeとWSLのNodeを混在させない
    作業はWSLのUbuntuターミナルへ統一。必要なら appendWindowsPath=false を活用。(Microsoft Learn)
  • 複数の入れ方をミックスapt + 手動 + NodeSource など)
    nvmに一本化しておくと、更新・PATHが一貫します。

7. トラブル復旧「最短レシピ」

# 1) このシェルで nvm を確実に読み込む
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"

# 2) LTS を入れ直して選ぶ
nvm install --lts
nvm use --lts

# 3) 既定(default)を LTS に固定
nvm alias default lts/*

# 4) 動作確認
which node
node -v
npm -v

8. 参考:WSLでのNode運用の公式ガイド

  • Microsoft Docs(WSLでのNode.js導入ガイド)。WSL2推奨の観点整理に有用。(Microsoft Learn)
  • WSLの詳細設定(wsl.conf/.wslconfig)appendWindowsPath=false などのキーの意味がまとまっています。(Microsoft Learn)

用語ミニ辞典

  • EBADENGINE:npmの警告/エラー。package.jsonengines 定義とインストール環境のNodeバージョンが合わないと出る。(docs.npmjs.com)
  • LTS(Long Term Support):長期サポート版。安定運用向き。各バージョンの移行日程はRelease WGが管理。(GitHub)
  • nvmNode Version Manager。Nodeのバージョンを共存・即時切替できる。WSLでの利用も公式READMEに明記。(GitHub)
  • appendWindowsPath:WSLの設定キー。WindowsのPATHをWSLに足す/足さないを制御。混線回避に有効。(Microsoft Learn)

コマンド早見表

# nvm をインストール(公式・最新版タグを明示)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
# → ~/.nvm に nvm を配置し、シェル初期化ファイルへ読込行を追記(公式手順)  :contentReference[oaicite:24]{index=24}

# いま開いているシェルに nvm を読み込む
export NVM_DIR="$HOME/.nvm"                         # nvm のホームを指す環境変数
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"     # nvm 本体を source してコマンドを有効化

# LTS(安定版)を入れて使う
nvm install --lts                                   # 最新LTSを取得(将来のLTSに自動追従)  :contentReference[oaicite:25]{index=25}
nvm use --lts                                       # カレントシェルの Node を LTS に切替
node -v                                             # v22+(LTS移行後は v24+)であることを確認  :contentReference[oaicite:26]{index=26}
npm -v                                              # npm が応答すればOK

# 新しいターミナルでも自動で LTS を選ぶ
nvm alias default lts/*                              # 既定(default)エイリアスに LTS を設定  :contentReference[oaicite:27]{index=27}

# よく使う確認コマンド
which node   # 実行される node のフルパス(nvm配下であることを確認)
nvm ls       # インストール済み Node 一覧(→が現在選択)
nvm ls-remote --lts  # 取得可能な LTS 一覧

# (必要に応じて)WSLの Windows PATH 混入を止める
# /etc/wsl.conf を編集し、以下を追記 → PowerShell で "wsl --shutdown" 後に再起動
# [interop]
# appendWindowsPath=false  # WindowsのPATHをWSLに混ぜない  :contentReference[oaicite:28]{index=28}

参考リンク

  • nvm 公式README(Install/Usage/.nvmrc/alias default) (GitHub)
  • Node.js Release Working Group:公式スケジュール(22=Active LTS、24=2025-10-28 LTS入り) (GitHub)
  • npm Docs:package.jsonengines フィールドの解説 (docs.npmjs.com)
  • Microsoft Docs:WSLの設定(wsl.conf / appendWindowsPath) (Microsoft Learn)
  • Microsoft Docs:WSLでのNode.js導入ガイド (Microsoft Learn)

以上で、EBADENGINEを根こそぎ潰す “LTS運用の土台” が整いました。
あとは各プロジェクトに .nvmrc(中身 lts/*)を用意し、ディレクトリごとに自動切替できるようにしておくと、チーム開発でもトラブルが大幅に減ります。(GitHub)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?