Node.jsのバージョンを自動で切り替えられるndenvが超便利

  • 39
    いいね
  • 8
    コメント

サーバーサイドで動作するJavaScriptNode.jsはSassのコンパイル、webpackの使用等、今やフロントエンド開発に欠かせないものです。Node.jsを使う場合、バージョンを自動で切り替えられる ndenvというツールがお薦めです。本エントリーではndenvのメリットと、基本的な使い方について解説します。

Node.jsのバージョン管理

プロジェクトによっては古いNode.jsのバージョンで動作が安定し、違うNode.jsにしてしまうと動作しなくなる、といったケースは現場でよくあります。しかし、プロジェクトを切り替える度、現在のNode.jsをアンイストールして目的のバージョンのNode.jsをインストールする、というのは時間がかかります

このようなNode.jsのバージョン問題を解決するため、Node.jsのバージョン管理をするツールとしてmacOSの「Nodebrew」があります。

Nodebrewを用いると、下記のようにプロジェクト毎にバージョンを切り替えることができます。

コマンドライン
nodebrew use v0.10.12

▲ Node.jsのv0.10.12を使う

コマンドライン
nodebrew use v7.9.0

▲ Node.jsのv7.9.0を使う

これで充分便利なのですが、Node.jsのバージョン切り替えコマンドを実行するというのが手間です

この手間を省くのが、ndenvです。

自動でNode.jsのバージョンを切り替えるndenv

ndenvを用いると、プロジェクトに移動するだけでNode.jsのバージョンが自動で切り替わります。手動でNode.jsのバージョンを切り替える必要が無いため、開発者はNode.jsのバージョン問題に時間を取られることなく、作業を進められます。

インストール方法

ndenvのインストールには、「anyenv」というツールを用いるのが便利です。ndenvの他にもPHPのバージョン管理をするphpenv、Swiftのバージョン管理をするswiftenvといったバージョン管理ツールが存在するのですすが、anyenvとは「〜env」と名前のついた各バージョン管理ツールをまとめて扱うものです。

インストールはコマンドラインを使いますが、コピペだけでできるので手軽です。以下のコマンドを一行ずつ実行してください。

git clone https://github.com/riywo/anyenv ~/.anyenv
echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(anyenv init -)"' >> ~/.bash_profile
exec $SHELL -l

なお、公式リポジトリにおいては、上記コマンドのbash_profile部分がyour_profileとなっていますが、bash_profileに環境変数を記載して問題ありません。bash_profileについては記事「.bash_profile ? .bashrc ? いろいろあるけどこいつらなにもの? - Qiita」が参考になります。

anyenvのインストールが完了したら、次のコマンドでndenvをインストールします。

コマンド
anyenv install ndenv
コマンド
exec $SHELL -l

下記のコマンドを実行し、バージョン番号等が表示されれば成功です。

コマンド
ndenv

image

以上でndenvの環境が準備できました。

プロジェクト毎のNode.jsバージョン切り替え例

では、ndenvを使って下記のようにプロジェクトごとにNode.jsのバージョン切り替えを行ってみます。

  • プロジェクトAではNode.js v7.9.0を使う
  • プロジェクトBではNode.js v0.12.18を使う

Node.jsのインストール

Node.jsのインストールには、次のコマンドを用います。

コマンド
ndenv install (バージョン)

今回の例では、v7.9.0と v0.12.18が必要なので、次のようにインストールします。

v7.9.0のインストールコマンド
ndenv install v7.9.0
v0.12.18のインストールコマンド
ndenv install v0.12.18

プロジェクトAで使用するNode.jsのバージョン設定

プロジェクトで使用するNode.jsのバージョンを設定するには、次のコマンドを用います。

コマンド
ndenv local (バージョン)

プロジェクトA用のフォルダにて、v7.9.0を使う設定をします。

プロジェクトAフォルダに移動コマンド
cd (プロジェクトAフォルダへのパス)
v7.9.0の使用コマンド
ndenv local v7.9.0

Node.js v7.9.0が使えるかどうかをチェックしてみましょう。次のコマンドでNode.jsのバージョンを確認します。

Node.jsのバージョン確認コマンド
node -v

v7.9.0のバージョン番号が出力されていれば成功です。

これまでNode.jsを使用してきていたのと同じく、npmコマンドも使用できます。

ところで、localコマンドを実行すると、プロジェクトフォルダ内に.node-versionという設定ファイルができます。.node-versionにはこのプロジェクトで使用するNode.jsのバージョンが記述されているため、このフォルダに移動した時に、自動的にバージョンが切り替わる仕組みになっているのです

image

.node-versionファイルの中身

プロジェクトBでの設定

プロジェクトBではv0.12.18を使う設定をします。

プロジェクトBフォルダに移動コマンド
cd (プロジェクトBフォルダへのパス)
v.0.12.18の使用コマンド
ndenv local v0.12.18

Node.js v0.12.18に切り替わっているか確認してみましょう。

Node.jsのバージョン確認コマンド
node -v

v0.12.18が表示されていれば成功です。

フォルダを移動してバージョンが自動で切り替わるかを確認する

Node.jsのバージョンが自動で切り替わるか確認をしてみましょう。

プロジェクトAフォルダに移動コマンド
cd (プロジェクトAフォルダへのパス)
Node.jsのバージョン確認
node -v

プロジェクトAで使用するNode.js v7.9.0に切り替わります。

プロジェクトBフォルダに移動コマンド
cd (プロジェクトAフォルダへのパス)
Node.jsのバージョン確認
node -v

プロジェクトBで使用するNode.js v0.12.18に切り替わります。

image

デフォルトで使用するNode.jsのバージョンも指定しておく

バージョンを固定したプロジェクトフォルダ以外では、特にバージョン指定せずにNode.jsを使いたい場合もあるでしょう。その場合は、デフォルトで使用するNode.jsのバージョンを指定しておくと便利です。

コマンド
ndenv global (デフォルトで使用したいバージョン)

例えば、7.9.0をデフォルトバージョンにするには、次のようにします。

コマンド
ndenv global v7.9.0

Windowsではnodistで自動バージョン切り替え

ndenvはmacOS用ですが、nodistを使うとWindowsでも.node-versionによるNode.jsの自動バージョン切り替えが可能です。Windows、macOS問わず、Node.jsのバージョン自動切り替えができるのは嬉しいですね。

※ 本エントリーのコメント欄にて、 @Jaman1993 さんより教えていただきました。

ndenvは便利

複数のプロジェクトを開発するにあたって、Node.jsのバージョン管理ツールは必須。筆者は主にNodebrewを使っていましたが、プロジェクトごとにバージョンを自動で切り替えたいと思い、ndenvを使うようになりました。おかげでプロジェクト毎にNode.jsのバージョンを意識する必要がなくなり、時間短縮に繋がりました。お勧めです。