anyenv+nodenvでプロジェクトのNode.jsのバージョンを自動で切り替える
はじめに
年末に近づくにつれて、ローカル環境も来年に向けて新しくしたくなる
地味に面倒に思っていたのが、プロジェクトごとに Node.js のバージョンを切り替えることだった
仕事でも Node.js を 20 系に上げるタスクをしたときに、18 と 20 を行き来しながら動作確認をしてて簡単にできると良いなと思った
そこで、今回は anyenv
・ nodenv
をベースにプロジェクトの package.json
の engines
オプションを参照して Node.js のバージョンを自動的に切り替えるように設定する方法を書いていく
Homebrew がインストールされている前提で大まかあ流れとしては以下になる
-
anyenv
の導入と設定 -
nodenv
の導入と設定 -
nodenv-package-json-engine
の導入と設定
(もしも)nodebrew で Node.js のバージョンを管理していた場合
すでに nodebrew を使っている場合は、シェルの設定でパスを外しておいてから試す
自分の場合は普段から使っていたため、以下のように外した
# 設定ファイル
vi ~/.zshrc
# 以下のようにパスをコメントアウトする
# PATH=$HOME/.nodebrew/current/bin:$PATH
anyenv
の導入と設定
https://github.com/anyenv/anyenv
公式の紹介通りに入力すれば一通り導入はできる
# homebrew経由でインストールする
brew install anyenv
# anyenvを初期化する
anyenv init
# 以下の案内が出るのでシェルの設定に記載する
# Load anyenv automatically by adding
# the following to ~/.zshrc:
echo 'eval "$(anyenv init -)"' >> ~/.zshrc
# ターミナルをリロードするとマニフェストディレクトリがないと案内される
exec $SHELL -l
# ANYENV_DEFINITION_ROOT(/Users/whoami/.config/anyenv/anyenv-install) doesn't exist. You can initialize it by:
# > anyenv install --init
# マニュフェストディレクトリを作る
anyenv install --init
# インストールするディレクトリのパスを確認して続ける
# Manifest directory doesn't exist: /Users/username/.config/anyenv/anyenv-install
# Do you want to checkout ? [y/N]: y
# 以下、インストール内容なので省略
# ターミナルを再起動して問題がないことを確認する
exec $SHELL -l
上記の手順を踏んでも CommandLineTools がインストールされていなければ、以下のような案内が出る
Cloning https://github.com/anyenv/anyenv-install.git master to /Users/xxxxxx/.config/anyenv/anyenv-install...
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
その場合は CommandLineTools をインストールしてから、再度マニフェストディレクトリを作る
nodenv
の導入と設定
anyenv
から nodenv
をインストールする
# nodenvをインストールする
anyenv install nodenv
# インストールが終わったら、ターミナルを再起動する
exec $SHELL -l
# envコマンドでanyenvやnodenvのパスやルート情報が確認できる
env
# PATH=/Users/username/.anyenv/envs/nodenv/shims:/Users/username/.anyenv/envs/nodenv/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/sbin:/Users/username/.nodebrew/current/bin
# NODENV_ROOT=/Users/username/.anyenv/envs/nodenv
# NODENV_SHELL=zsh
nodenv
で Node.js をインストール
https://github.com/nodenv/nodenv#installing-node-versions
nodenv でインストールできるバージョン一覧を確認する
nodenv install -l
anyenv
の拡張機能を追加する
ただ、バージョン確認をしても最新のバージョンが表示されないときがある
そのため、以下のプラグインをインストールすると使いたい最新の Node.js のバージョン一覧を anyenv
からアップデートすることができる
https://github.com/anyenv/anyenv#plugins
https://github.com/znz/anyenv-update
mkdir -p $(anyenv root)/plugins
git clone https://github.com/znz/anyenv-update.git $(anyenv root)/plugins/anyenv-update
インストールが終わったら、 anyenv
で管理する各種言語のバージョン一覧をアップデートすることができる
anyenv install
nodenv の基本的な操作
各種基本的な操作は以下のようにできる
説明 | 操作 |
---|---|
インストール(バージョン指定) | nodenv install バージョン |
アンインストール(バージョン指定) |
~/.anyenv/envs/nodenv/versions/バージョン を削除 |
インストール済みバージョンの一覧 | nodenv whence npm |
デフォルトの Node.js バージョンを指定 | nodenv global バージョン |
プロジェクトの Node.js バージョンを指定 | プロジェクトのディレクトリでnodenv local バージョン
|
nodenv
のバージョン自動切り替えの導入と設定
上記の設定でもプロジェクト内のバージョン指定をしたファイルがあれば、Node.js のバージョンは切り替えられる
ただ、 package.json
の engines
で指定したバージョンを切り替えの対象にするためには以下のプラグインをインストールする必要がある
https://github.com/nodenv/nodenv-package-json-engine
インストールは以下のコマンドになる
git clone https://github.com/nodenv/nodenv-package-json-engine.git $(nodenv root)/plugins/nodenv-package-json-engine
これで package.json
の engines
を参照して Node.js のバージョンを自動で切り替えられるようになる
さいごに
これでプロジェクトごとに Node.js のバージョンを毎回変えながら開発する必要がなくなってすごく便利になった
anyenv
や nodenv
のプラグインが見つかったら、今後試してみたいと思っている
Discussion