# もっと Docker 使おうよ!Node.js を Docker から引っ張ろうよ
Docker だけで Node.js のバージョン管理を完結させたい人向けのメモ。ローカル環境を汚したくない、複数プロジェクトで LTS と最新版を行き来したい人向け。
# Node.js コンテナ alias を作成する
~/.zshrc や ~/.bashrc に追記して、Terminal を再起動(または source ~/.zshrc)。
# bash でインタラクティブに入りたい場合
alias node18="docker run --rm -it -v $(pwd):/app -w /app node:18 bash"
alias node20="docker run --rm -it -v $(pwd):/app -w /app node:20 bash"
alias node22="docker run --rm -it -v $(pwd):/app -w /app node:22 bash"
alias node24="docker run --rm -it -v $(pwd):/app -w /app node:24 bash"
使い方:
node18 # Node.js 18 の bash を起動
node20 # Node.js 20 の bash を起動
node22 # Node.js 22 の bash を起動
node24 # Node.js 24 の bash を起動
# npm / Yarn / pnpm もコンテナ経由に統一する
CLI ごとに alias を揃えることで、ローカルにインストール済みのコマンドと混ざる事故を防げる。
# Node
alias node18="docker run --rm -it --entrypoint node node:18"
alias node20="docker run --rm -it --entrypoint node node:20"
alias node22="docker run --rm -it --entrypoint node node:22"
alias node24="docker run --rm -it --entrypoint node node:24"
# npm
alias npm18="docker run --rm -it --entrypoint npm -v $(pwd):/app -w /app node:18"
alias npm20="docker run --rm -it --entrypoint npm -v $(pwd):/app -w /app node:20"
# Yarn
alias yarn18="docker run --rm -it --entrypoint yarn -v $(pwd):/app -w /app node:18"
alias yarn20="docker run --rm -it --entrypoint yarn -v $(pwd):/app -w /app node:20"
# pnpm も必要なら
alias pnpm20="docker run --rm -it --entrypoint pnpm -v $(pwd):/app -w /app node:20"
# よくあるハマりポイント
- 権限エラー:
node_modulesをホストと共有すると root 権限で書き込まれることがある。--user $(id -u):$(id -g)を指定すると回避できる。 - パフォーマンス: Apple Silicon では
node:22など公式イメージがlinux/arm64対応なので問題なし。ただし Rosetta 変換が必要な旧イメージは遅いので注意。 - キャッシュ: 依存関係を毎回入れ直したくない場合、
-v node_modules:/app/node_modulesのように名前付きボリュームを共通化すると高速化できる。
# Docker 方式のメリット・デメリット
| 項目 | Docker で管理 | NVM / Nodebrew |
|---|---|---|
| 環境の汚れ | ほぼゼロ(コンテナ破棄で終了) | ローカルにバージョンが溜まる |
| プロジェクト切替 | alias で即切替 | nvm use で切替(スムーズ) |
| npm scripts | コンテナ経由なので差分が出にくい | ローカルの Node と揃える必要あり |
| 初回起動 | イメージ pull が必要 | 事前インストール済みなら即時 |
| CI/CD 連携 | Dockerfile へ転用しやすい | 追加設定が必要 |
「環境差分を極力排除したい」「CI と同一環境で開発したい」なら Docker 方式が優勢。GUI ツールとの連携やネイティブ性能を重視する場合は NVM が楽。
# 公式推奨(NVM)の導入手順
Node.js 公式は依然として NVM を推している。Docker 方式と併用したい人向けに最小セットを残しておく。
# nvm をインストール
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
# Node.js をインストール
nvm install 22
# バージョン確認
node -v
nvm current
npm -v
# よくある質問
Q. VS Code の拡張機能(ESLint など)はどうする?
Lint や type-check はローカル Node が必要なケースがある。Docker alias で npm を叩くと node_modules/.bin がホストに生成されるので、VS Code はホストの Node を参照できる。完全にコンテナへ寄せたいなら Devcontainer を使うのがおすすめ。
Q. グローバルインストールした CLI は?
npm install -g firebase-tools などはコンテナ内に閉じるため、毎回消えてしまう。CLI を使い回す場合は独自 Dockerfile を用意し、firebase-tools を事前に入れたイメージを作るとよい。
Q. Windows は対応している?
WSL2 であれば同じ手順が利用可能。PowerShell で alias を貼る場合は function node20 { docker run ... } のように関数化する。