fnmでNode.jsの複数バージョンを切り替える実践ガイド

Windows 11 環境でのセットアップ

パッケージマネージャ winget を利用して fnm をインストールします。

winget install Schniz.fnm

インストール直後は PowerShell にパスが通っていないため、下記コマンドでロードしておきます。

fnm env --use-on-cd | Out-String | Invoke-Expression

国内ミラーから高速に取得する場合は環境変数を追加します。

[Environment]::SetEnvironmentVariable(
  'FNM_NODE_DIST_MIRROR',
  'https://npmmirror.com/mirrors/node',
  'User'
)

基本的な操作

  • リモートの全バージョン一覧:fnm ls-remote
  • ローカルにインストール済み一覧:fnm ls
  • 特定バージョンのインストール:fnm install 18.17.0
  • LTS 最新をインストール:fnm install --lts
  • メジャー指定でのインストール:fnm install 20
  • バージョン削除:fnm uninstall 16
  • 既定バージョンに設定:fnm default 20
  • 即座に切り替え:fnm use 20

プロジェクトごとの自動切り替え

リポジトリルートに .node-version または .nvmrc を置くことで、cd した瞬間に指定バージョンが有効になります。

echo "20.12.2" > .node-version

JetBrains IDE 連携

WebStorm などが fnm の Node を認識できるよう、デフォルトエイリアスパスをユーザ PATH に追加します。

$aliasDir = "$env:APPDATA\fnm\aliases\default"
[Environment]::SetEnvironmentVariable(
  'Path',
  [Environment]::GetEnvironmentVariable('Path', 'User') + ";$aliasDir",
  'User'
)

Linux サーバへの導入

curl/bash ワンライナーでインストールし、/usr/local/fnm に配置します。

curl -fsSL https://fnm.vercel.app/install | bash -s -- --install-dir /usr/local/fnm

インストール後、/etc/profile.d/fnm.sh を作成して全ユーザが利用できるようにします。

sudo tee /etc/profile.d/fnm.sh <<'EOF'
export FNM_DIR=/usr/local/fnm
export PATH="$FNM_DIR:$PATH"
eval "$(fnm env --use-on-cd)"
EOF
sudo chmod 644 /etc/profile.d/fnm.sh

設定を即座に反映:

source /etc/profile.d/fnm.sh

非 root ユーザーの権限対策

CI/CD ランナーや git ユーザーが /run/user/UID を利用できるよう、事前にディレクトリを作成して権限を付与します。

uid=$(id -u git)
sudo mkdir -p /run/user/$uid
sudo chown git:git /run/user/$uid
sudo chmod 700 /run/user/$uid

該当ユーザーの ~/.bashrc に以下を追加:

export XDG_RUNTIME_DIR=/run/user/$(id -u)
eval "$(fnm env --use-on-cd)"

インストーラスクリプト(抜粋)

以下は公式スクリプトの主要部を簡略化したものです。アーキテクチャ判定、依存チェック、シェル設定の自動追記まで行います。

#!/usr/bin/env bash
set -e

INSTALL_DIR="${INSTALL_DIR:-$HOME/.local/share/fnm}"
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m)

case "$ARCH" in
  armv7*)  FILENAME="fnm-arm32" ;;
  aarch64|armv8*) FILENAME="fnm-arm64" ;;
  x86_64) FILENAME="fnm-linux" ;;
  *) echo "Unsupported arch"; exit 1 ;;
esac

curl -L "https://github.com/Schniz/fnm/releases/latest/download/${FILENAME}.zip" -o /tmp/fnm.zip
unzip -q /tmp/fnm.zip -d /tmp
mv /tmp/fnm "$INSTALL_DIR/fnm"
chmod +x "$INSTALL_DIR/fnm"

echo 'export PATH="'"$INSTALL_DIR"':$PATH"' >> ~/.bashrc
echo 'eval "$(fnm env)"' >> ~/.bashrc

これで複数の Node.js バージョンを高速に切り替えながら開発・CI/CD が可能になります。

タグ: fnm Node.js version-manager winget PowerShell

5月13日 22:12 投稿