Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
60
Help us understand the problem. What is going on with this article?
@282Haniwa

nodenvの環境構築

この記事では個人的にお勧めなnodenvのインストール方法と使い方について簡単に紹介していきたいと思います。

anyenvを使ったインストール方法も別の記事で紹介していますので、こちらも参考にしていただければと思います。

nodenvのダウンロード

まず、nodenvのソースをGitHubからcloneしてきます。

git clone https://github.com/nodenv/nodenv.git ~/.nodenv

nodenvのビルド

ダウンロードしてきたソースからnodenvをビルドして実行可能な状態にしましょう。

cd ~/.nodenv && src/configure && make -C src

pathを通す

コマンドを叩けるようにパスを通しましょう。

  • bashの場合
echo 'export PATH="$HOME/.nodenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(nodenv init -)"' >> ~/.bash_profile
  • Ubuntu DesktopやWindows Subsystem for Linuxの場合
echo 'export PATH="$HOME/.nodenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(nodenv init -)"' >> ~/.bashrc
  • zshの場合
echo 'export PATH="$HOME/.nodenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(nodenv init -)"' >> ~/.zshrc
  • Fish shellの場合
set -Ux fish_user_paths $HOME/.nodenv/bin $fish_user_paths
echo 'eval (nodenv init - | source)' >> ~/.config/fish/config.fish

上記を参考に自分の環境に合ったコマンドを実行することでパスを通すことができます。

個人的にお勧めするパスの通し方はコンフィグファイルに以下のように記述する方法です。

bashzshで機能することを確認しています。

.zshrc
if [ -e "$HOME/.nodenv" ]
then
    export NODENV_ROOT="$HOME/.nodenv"
    export PATH="$NODENV_ROOT/bin:$PATH"
    if command -v nodenv 1>/dev/null 2>&1
    then
        eval "$(nodenv init -)"
    fi
fi

このように記述してパスを通しておくことで、nodenvを入れる予定のない環境へ.zshrcファイルなどをコピーしたとしても、エラーを吐きません。

シェルを再起動する

pathを通したらログインシェルを再起動して新しい設定ファイルを読ませましょう。

exec $SHELL -l

コマンドが正しくインストールされているかも確認しましょう。

nodenv --version

プラグインをインストールする

nodenvはnodeのバージョンを管理するためのコマンドですが、プラグインを入れることで、nodeのインストールも行うことができます。

まず、プラグイン用のディレクトリを作ります。

mkdir -p "$(nodenv root)"/plugins

次に、nodenv-buildをGitHubからcloneします。

git clone https://github.com/nodenv/node-build.git "$(nodenv root)"/plugins/node-build

これでnodenv-buildのインストールは完了です。

あとは、nodenvのアップデートなどをプラグインまで含めて自動で行ってくれるプラグインnodenv-updateを入れておくのをお勧めします。

git clone https://github.com/nodenv/nodenv-update.git "$(nodenv root)"/plugins/nodenv-update

これで、nodenv updateとコマンドを叩くことで、nodenvとそのプラグインを自動的にアップデートすることが可能です。

nodenvの使い方

ここまでの準備ができていれば、nodenvは以下のようにして使うことができます。

nodeのインストール

# インストールできるnodeのバージョンの確認
nodenv install --list

# nodeのインストール(12.16.3は本記事執筆時点でのLTSバージョン)
nodenv install 12.16.3

# nodenvからnodeやグローバルなnpmパッケージを見えるようにするためにrehashを行う
# 新しいnodeのバージョンを入れたり、npm install -gなどを行ったときに実行する必要がある
nodenv rehash

npm install -gのたびにrehashを行うのが面倒であれば
nodenv-package-rehash
のパッケージを入れることでそれを省略できます。

インストールしているnodeのバージョンの確認

nodenv versions

nodeのバージョンの指定

# グローバルで使うnodeのバージョンを指定する
nodenv global 12.16.3

# あるプロジェクトのディレクトリでのみ使うnodeのバージョンを指定する
nodenv local 12.16.3

nodenv localを実行することで、.node-versionという名前の不可視ファイルが生成され、その中にそのディレクトリで使うnodeのバージョンが記述されます。

gitなどで.node-versionを共有することで、プロジェクトのメンバーで使うnodeのバージョンを統一することもできます。

nodeのアンインストール

特定のnodeを消したい場合はuninstallコマンドを使います。

nodenv uninstall 12.16.3

nodenvのアップデート

# nodenv-updateをインストールしているとき
nodenv update

# nodenv-updateをインストールしていないとき
(cd "$(nodenv root)"; git pull)
(cd "$(nodenv root)"/plugins/node-build && git pull)

nodenvのアンインストール

~/.nodenvのディレクトリを消すだけです。

rm -rf $(nodenv root)

まとめ

最後まで読んでいただきありがとうございました。
以上でnodenvのインストール・使い方は一通り終了です。
他にもいろいろな機能がありますので、公式のドキュメントを参考にして使っていってください。

参考

60
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
yumemi
みんなが知ってるあのサービス、実はゆめみが作ってます。スマホアプリ/Webサービスの企画・UX/UI設計、開発運用。Swift, Kotlin, PHP, Vue.js, React.js, Node.js, AWS等エンジニア・クリエイターの会社です。Twitterで情報配信中https://twitter.com/yumemiinc

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
60
Help us understand the problem. What is going on with this article?