Node.jsは開発環境によって異なるバージョンを求められることがあります。この記事ではNode.jsに限らず他の言語でもバージョン管理ができる「anyenv」を使った環境構築を行います。
この記事で取り扱う内容は以下の通りです。
- anyenvのインストール
- nodenvのインストール
- Node.jsのインストール/設定/プロジェクトごとのバージョン指定
Node.jsはバージョン管理が必要
バージョンによって動作しないアプリケーションがある場合、バージョンを固定して不用意なエラーを回避します。しかし、アップデートによる新機能や動作の高速化は魅力的。せめてプロジェクト外では使ってみたい場合に、面倒な再インストール作業が頭をよぎります。これらを回避するために、瞬時にバージョンを切りかえられるanyenvを使用するのです。
例えば、Node.jsでLibSassを動かすためのライブラリ「node-sass」は、v4.5.2の時点ではNode v8でのインストールエラーが発生していました。 これは、Node v8からのインストール要求に対応するバージョンが設定されていないことによりました。現在はv4.5.3にアップデートされ、この問題は解決しています。このような問題は他のパッケージでも十分起こりうることです。メンテナンスが追従するかどうかはそのパッケージの開発状況により、長くアップデートされてないほどこの問題は起こります。
このような問題を回避するためには、プロジェクトごとに安定するバージョンで固定します。 開発にかかわる人には「このバージョンのNode.jsを使ってください」と伝えてインストールしてもらいます。そうすれば、インストールができないという問題も回避でき、開発がスムーズにはじめられます。
しかし、Node.jsのインストールは環境全体に影響するものです。 たとえば、上記の例をうけてプロジェクトAで使うNode.jsのバージョンをv7系で固定していたとしましょう。その際に、新しくたちあげるプロジェクトBにおいてv8系を使いたい場合は、アップデートが必要です。しかし、プロジェクトAの業務の際は、またv7系に戻さなければなりません。この際にインストール作業をその都度繰り返すのは手間です。
Node.jsを複数バージョン保持しておき、それをコマンドひとつで切り替えられるのがanyenvです。 正確には、anyenvの中で動作するnodenvというソフトウェアです。nodenvの他にも、Rubyのバージョン管理をするrbenvやPythonのバージョン管理をするpyenvなどがあります。これらを包括的に管理する存在がanyenvです。anyenvの設定さえしておけば、他の**env
系の設定をする必要はありません。もしそれぞれ使用する場合、それぞれの設定が必要ですが、それらをまとめて管理してくれます。複数の言語をつかって開発をする場合に大きな力を発揮しますが、現時点でその予定がなくても今後に見据えて使用することをおすすめします。
anyenvをインストールしよう
anyenvはanyenv専用のディレクトリを作り、そこにアクセスするという形で使います。 通常、インストーラをつかってNode.jsをインストールする際につかう領域を侵すことはありません。共同作業者の環境を汚染することを強制しないということも、anyenvのいいところのひとつです。手順は4つです。
- anyenvをダウンロードしてくる
- シェルを確認する
- PATHを通すためのコマンドを設定ファイルに書く
- シェルを再起動する
anyenvをダウンロードしてくる
まずはanyenvをGitHubからダウンロードしましょう。 さきほど「新たに作り」と言いましたが、あらかじめ存在するものをダウンロードしてくれば完了です。必要なファイルはGitHub上に存在します。ダウンロード先は、ホームディレクトリの直下です。不用意に削除してしまったりすることを防ぐために、隠しディレクトリとしてダウンロードします。clone先の指定は、リポジトリ名のあとに半角スペースをあけてパスを記述すればOKです。
git clone https://github.com/riywo/anyenv ~/.anyenv
シェルを確認する
使っているシェルの種類によって設定を書くファイルは異なります。 シェルとはターミナルの中で動いているソフトウェアで、OSにアクセスするためのものです。Macのデフォルトのシェルはbash
で、その場合は、~/.bash_profile
に記述します。zsh
をお使いの場合は/.zsh_profile
です。何を使っているかわからない場合は、次のコマンドで確認できます。このコマンドは確認のみを行うもので、わかっている場合は飛ばしてもかまいません。
echo $SHELL
たとえばbash
を使っている場合は次のように表示されます。
/usr/local/bin/bash
PATHを通すためのコマンドを設定ファイルに書く
PATHを通すというのは、簡単にいうと「その都度場所を指定しなくても、プログラム名だけで起動できるようにあらかじめ場所を書いておく」というものです。 そのためには、シェルの設定ファイルに「シェルでログインするときに、PATHを通すためのコマンドを真っ先に呼び出す」という記述をします。PATHを通すコマンドは「初期設定の際に使う変数を設定するコマンド」と「初期設定を行うコマンド」の2つありますので、それぞれ登録します。
初期設定の際に使う変数を設定するコマンド
PATH
という変数にディレクトリ名を格納します。この変数が、実際の初期設定で使われます。
echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bash_profile
初期設定を行うコマンド
先ほどの変数を踏まえ、実際に初期設定を行うコマンドです。環境変数はログインするたびに設定を行う必要があるので、ログインするたびにこのコマンドが呼び出されます。一度行われたらもう削除していいわけではありません。
echo 'eval "$(anyenv init -)"' >> ~/.bash_profile
シェルを再起動する
設定が完了したら、シェルを再起動します。 シェルが行っているのはOSへのログインなので、再ログインといったほう正確ですが、わかりやすいように再起動とします。ここでその都度ターミナルを立ち上げなおす必要はありません。次のコマンドで再ログインできます。このログインの際に、先ほど記述した設定ファイルが読み込まれ、anyenvが使えるようになります。
exec $SHELL -l
anyenvを使おう
実際にanyenvを使ってみましょう。ここで行う作業は次の通りです。
- anyenvからnodenv(Node.jsの管理ツール)をインストール
- nodenvからNode.jsをインストール
- 使うバージョンを設定する(システム全体)
- 使うバージョンを設定する(プロジェクトごと)
これで、Node.jsのバージョン管理を行う環境が整います。
anyenvからnodenvをインストール
anyenv
コマンドを使うと、各種コマンドが表示されます。 操作に迷った時も、まずはanyenv
コマンドを使いましょう。
anyenv
このような表示がされます。簡易的なREADMEです。
anyenv
Usage: anyenv []
Some useful anyenv commands are:
commands List all available anyenv commands
local Show the local application-specific Any version
global Show the global Any version
install Install a **env
uninstall Uninstall a specific **anv
version Show the current Any version and its origin
versions List all Any versions available to **env
See `anyenv help ' for information on a specific command.
For full documentation, see: https://github.com/riywo/anyenv#readme
表示に従い、install
コマンドを使って**env
がインストールしてみましょう。
anyenv install
anyenv install
コマンドの使い方と、オプションが表示されます。
Usage: anyenv install [-f|--force] <**env>
anyenv install -l|--list
-l/--list List all available **envs
-f/--force Install even if the **env appears to be installed already
-s/--skip-existing Skip if the version appears to be installed already
--l
もしくは--list
を付与すると、インストールできる**env
のリストが表示されるようです。実際にやってみましょう。
anyenv install --list
表示は次の通りです。
Available **envs:
Renv
crenv
denv
erlenv
exenv
goenv
hsenv
jenv
luaenv
ndenv
nenv
nodenv
phpenv
plenv
pyenv
rbenv
sbtenv
scalaenv
swiftenv
かなりいろいろありますが、今回はnodenv
をインストールします。もともとRubyのためのrbenv
のみが存在していて、他の**env
はその派生として作られたものです。そのため、Node.jsに関してはndenv
、nenv
など複数の管理システムが存在します。ndenv
の情報が散見されますが、ここではアクティブなメンテナが多数存在していて現在も継続的にメンテナンスされているnodenv
を採用します。ではnodenv
をインストールしましょう。
anyenv install nodenv
いくつかの出力のあとに、再起動を促すメッセージが表示されます。
Install nodenv succeeded!
Please reload your profile (exec $SHELL -l) or open a new session.
メッセージに従い、シェルを再起動しましょう。先ほどと同様exec
コマンドを使います。これでnodenvのインストールは完了です。
exec $SHELL -l
nodenvからNode.jsをインストール
nodenvを使って、Node.jsをインストールします。
まずは、nodenv
コマンドを使ってみましょう。
nodenv
すると、anyenv
と同じように使えるコマンドの説明が出力されます。
Usage: nodenv []
Some useful nodenv commands are:
commands List all available nodenv commands
local Set or show the local application-specific Node version
global Set or show the global Node version
shell Set or show the shell-specific Node version
install Install a Node version using node-build
uninstall Uninstall a specific Node version
rehash Rehash nodenv shims (run this after installing executables)
version Show the current Node version and its origin
versions List all Node versions available to nodenv
which Display the full path to an executable
whence List all Node versions that contain the given executable
See `nodenv help ' for information on a specific command.
For full documentation, see: https://github.com/nodenv/nodenv#readme
インストールにはinstall
コマンドを使うと表示されているので、install
コマンドを使いましょう。
nodenv install
install
コマンドの説明が表示されます。
Usage: nodenv install [-f|-s] [-kpv]
nodenv install [-f|-s] [-kpv]
nodenv install -l|--list
nodenv install --version
-l/--list List all available versions
-f/--force Install even if the version appears to be installed already
-s/--skip-existing Skip if the version appears to be installed already
node-build options:
-c/--compile Force compilation even if a matching binary exists
-k/--keep Keep source tree in $NODENV_BUILD_ROOT after installation
(defaults to $NODENV_ROOT/sources)
-p/--patch Apply a patch from stdin before building
-v/--verbose Verbose mode: print compilation status to stdout
--version Show version of node-build
For detailed information on installing Node versions with
node-build, including a list of environment variables for adjusting
compilation, see: https://github.com/nodenv/node-build#usage
インストールできるバージョンは--list
をつけることで表示できます。2017年11月1日現在ではv8.9.0
が安定版となっていますので、安定版をダウンロードします。
nodenv install 8.9.0
Installed node-v8.9.0-darwin-x64 to ...
のように表示されたら完了です。現在インストールされているバージョンを確認してみましょう。
nodenv versions
現在インストールされているバージョンが表示されます。さきほどインストールしたv8.9.0
があることを確認できました。
* system (set by /Users/nayucolony/.anyenv/envs/nodenv/version)
8.9.0
使うバージョンを設定する(システム全体)
現時点ではインストールされているのみで、有効にはなっていません。 まずは、システム全体で使うバージョンを設定してみましょう。ここではglobal
コマンドを使って8.9.0
を設定します。指定できるバージョンは、nodenv versions
コマンドをつかって確認した通り、インストールされたバージョンのみです。
nodenv global 8.9.0
完了しても特に反応はありませんが、設定は書き換わっています。新しく設定を読み込むために、シェルを再起動しましょう。
exec $SHELL -l
Node.jsのバージョンを確認します。
node -v
設定されたバージョンがっ表示されます。以前にnodenvではなくインストーラなどをつかってインストールしたことがある場合も、バージョンが切り替わります。今回は次のように表示されます。これで、Node.jsのインストールから設定までが完了しました。
v8.9.0
使うバージョンを設定する(プロジェクトごと)
さて、現在はグローバルにv8.9.0
がインストールされており、指定のない限りはv8.9.0
で動きます。例えばパッケージの都合などで最新版のv9.0.0
を必要とする場合があります。プロジェクトごとにバージョンを指定し、その作業ディレクトリでは自動で指定したバージョンが設定されるようにしてみます。
まず、任意のNode.jsをインストールします。 現時点ではv8.9.0
がインストールされていますので、つづいて執筆時点の最新版v9.0.0
をインストールしてみましょう。コマンドは先ほど同様にinstall
を使います。
nodenv install 9.0.0
次に、ホームディレクトリに移動します。 今回はホームディレクトリ直下に適当なディレクトリをつくりましたが、実際は既存のプロジェクトになるでしょう。cd
コマンドで移動します。
cd ~/anyenv-sample
local
コマンドを使用して、設定ファイルを生成します。
nodenv local 9.0.0
完了すると、.node-version
というファイルが作られます。 使用するバージョンが書かれているだけのファイルですが、nodenvはこのファイルを検出した場合そのバージョンのNode.jsを使用するように切り替えます。先頭に.
のつくファイルは隠しファイルとして扱われるので、finderなどでみる場合は表示されていない場合があります。その場合は⌘ + shift + .
で表示/非表示を切り替えることができます。
設定が有効になっているか確認しましょう。
node -v
指定したバージョンになっていればOKです。もし既存プロジェクトなどで最初から.node-version
ファイルがある場合は、そのバージョンをインストールしておきましょう。インストールされてない場合は指定したバージョンに切り替えることができません。
v9.0.0
これがこのディレクトリのみで有効なバージョンであることを確認するために、いったんcd
コマンドでホームディレクトリに戻ります。
cd
バージョンを確認してみましょう。
node -v
nodenv global
に設定されたバージョンであればOKです。ここでは先ほど設定したv8.9.0
に切り替わっています。
v8.9.0
終わりに
以上で、anyenvをつかったNode.jsのバージョン管理をするための環境が整いました。この記事の内容で基本的には事足りますが、他の操作が必要になった場合もanyenv
コマンドから使用方法を呼び出すことで対応していきましょう。
また、チュートリアルなどでいきなりコマンドにオプション付きで紹介されているものを使うことも多いでしょうが、コマンド単体で起動してみると気づかなかった機能に気づくことがあります。ぜひ試して見てください。
フロントエンドエンジニア積極採用中
株式会社トゥーアールでは現在フロントエンドエンジニア積極的に採用中です!
興味がある人は採用ページをチェック!!