Featured image of post Homebrewで「anyenv」を導入してバージョン管理する方法

Homebrewで「anyenv」を導入してバージョン管理する方法

pyenvやnodenvなどのバージョン管理ツールをまとめて扱える「anyenv」をHomebrewで導入する方法。環境変数の設定、init、nodenvのインストール、対象バージョンの適用まで。fish shellでの注意点も♪

1985文字

言語のバージョン管理の決定版

皆さんは言語のバージョン管理は行っていますか?

有名なのはpyenvnodenvなどですね。

しかし、各言語ごとにバージョン管理システムを落として管理するのはとてもめんどくさいと思います。

今回はほとんどの開発言語のバージョン管理を可能にしてくれるanyenvについてご紹介しようと思います。

anyenv

anyenvとはXXenv関連のモジュールをまとめて一限管理してくれるモジュールとなっています。

anyenv - All in one for **env This is a simple wrapper for rbenv style environment managers. You don't have to git clone or modify your shell profile for each **env anymore if you install anyenv.anyenv/anyenv: All in one for **env

こちらを使うと、anyenv経由でpyenvやnodenvを取扱う事が可能になるので、とても便利です。

インストール方法や使い方もとても簡単なので、ご紹介しようと思います。

手順

anyenvのインストール

まずはメインとなるanyenvをお馴染みHomebrewを使ってインストールしましょう。

[adsense-responsive]

brew install anyenv
==> Downloading https://homebrew.bintray.com/bottles/anyenv-1.1.1.mojave.bottle.tar.gz
Already downloaded: /Users/blogenist/Library/Caches/Homebrew/downloads/8bf4362e86fa71924c51fe1833bcf52d2f1ec89b67dd2aa570e65faa7ad3bf99--anyenv-1.1.1.mojave.bottle.tar.gz
==> Pouring anyenv-1.1.1.mojave.bottle.tar.gz
🍺  /usr/local/Cellar/anyenv/1.1.1: 23 files, 29.6KB

環境変数の設定

インストールが完了したら環境変数にANYENV_ROOT=~/.anyenvを追加しておきましょう。

確認

anyenv -v
anyenv 1.1.1

init

この状態で以下のコマンドを実行すると、エラーが表示されます。

anyenv install -l
ANYENV_DEFINITION_ROOT(/Users/blogenist/.config/anyenv/anyenv-install) doesn't exist. You can initialize it by:
> anyenv install --init

これは、anyenv用の作業ディレクトリが無いから、anyenv install --init初期化して!というメッセージなので言われた通りに実行しましょう。

anyenv install --init
Manifest directory doesn't exist: /Users/blogenist/.config/anyenv/anyenv-install
Do you want to checkout ? [y/N]: y
Cloning https://github.com/anyenv/anyenv-install.git master to /Users/blogenist/.config/anyenv/anyenv-install...
Cloning into '/Users/blogenist/.config/anyenv/anyenv-install'...
remote: Enumerating objects: 48, done.
remote: Counting objects: 100% (48/48), done.
remote: Compressing objects: 100% (42/42), done.
remote: Total 48 (delta 2), reused 45 (delta 1), pack-reused 0
Unpacking objects: 100% (48/48), done.

Completed!

確認

これで必要な準備が出来たのでもう一度コマンドを打ってみましょう。

anyenv install -l
  Renv
  crenv
  denv
  erlenv
  exenv
  goenv
  hsenv
  jenv
  luaenv
  nodenv
  phpenv
  plenv
  pyenv
  rbenv
  sbtenv
  scalaenv
  swiftenv
  tfenv

正常に通りましたね♪
このリストが管理出来る各言語のようです。

ほとんど網羅していますね・・・!

nodenvのインストール

今回は試しにnodenvを使ってみようと思います。

[adsense-responsive]

anyenv install nodenv
/var/folders/5k/s10ppj590d534615rmtkm9cm0000gn/T/nodenv.20190619141332.24018 ~
Cloning https://github.com/nodenv/nodenv.git master to nodenv...
Cloning into 'nodenv'...
remote: Enumerating objects: 35, done.
remote: Counting objects: 100% (35/35), done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 3719 (delta 15), reused 21 (delta 5), pack-reused 3684
Receiving objects: 100% (3719/3719), 662.32 KiB | 495.00 KiB/s, done.
Resolving deltas: 100% (2465/2465), done.
~
~/.anyenv/envs/nodenv/plugins ~
Cloning https://github.com/nodenv/node-build.git master to node-build...
Cloning into 'node-build'...
remote: Enumerating objects: 64, done.
remote: Counting objects: 100% (64/64), done.
remote: Compressing objects: 100% (45/45), done.
remote: Total 17211 (delta 21), reused 54 (delta 11), pack-reused 17147
Receiving objects: 100% (17211/17211), 2.99 MiB | 703.00 KiB/s, done.
Resolving deltas: 100% (11090/11090), done.
~
~/.anyenv/envs/nodenv/plugins ~
Cloning https://github.com/nodenv/nodenv-default-packages.git master to nodenv-default-packages...
Cloning into 'nodenv-default-packages'...
remote: Enumerating objects: 13, done.
remote: Counting objects: 100% (13/13), done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 264 (delta 6), reused 4 (delta 2), pack-reused 251
Receiving objects: 100% (264/264), 58.20 KiB | 505.00 KiB/s, done.
Resolving deltas: 100% (119/119), done.
~
~/.anyenv/envs/nodenv/plugins ~
Cloning https://github.com/nodenv/nodenv-vars.git master to nodenv-vars...
Cloning into 'nodenv-vars'...
remote: Enumerating objects: 211, done.
remote: Total 211 (delta 0), reused 0 (delta 0), pack-reused 211
Receiving objects: 100% (211/211), 31.82 KiB | 237.00 KiB/s, done.
Resolving deltas: 100% (76/76), done.
~

Install nodenv succeeded!
Please reload your profile (exec $SHELL -l) or open a new session.

確認

nodenv -v
nodenv 1.3.0

対象バージョンのインストール

現在インストール可能なバージョン一覧をみてみましょう。

nodenv install -l
Available versions:
  0.1.14
  0.1.15
  0.1.16
  0.1.17
  0.1.18
  0.1.19
  0.1.20
  0.1.21
  0.1.22
  0.1.23
  0.1.24
  0.1.25
  0.1.26
  0.1.27
  0.1.28
  0.1.29
  0.1.30
  0.1.31
  0.1.32
  0.1.33
  0.1.90
  0.1.91
  0.1.92
  0.1.93
  0.1.94
  0.1.95
  0.1.96
  0.1.97
  0.1.98
  0.1.99
  0.1.100
  0.1.101
  0.1.102
  0.1.103
  0.1.104
  0.2.0
  0.2.1
  0.2.2
  0.2.3
  0.2.4
  0.2.5
  0.2.6
  0.3.0
  0.3.1
  0.3.2
  0.3.3
  0.3.4
  0.3.5
  0.3.6
  0.3.7
  0.3.8
  0.4.0
  0.4.1
  0.4.2
  0.4.3
  0.4.4
  0.4.5
  0.4.6
  0.4.7
  0.4.8
  0.4.9
  0.4.10
  0.4.11
  0.4.12
  0.5.0
  0.5.1
  0.5.2
  0.5.3
  0.5.4
  0.5.5
  0.5.6
  0.5.7
  0.5.8
  0.5.9
  0.5.10
  0.6.0
  0.6.1
  0.6.2
  0.6.3
  0.6.4
  0.6.5
  0.6.6
  0.6.7
  0.6.8
  0.6.9
  0.6.10
  0.6.11
  0.6.12
  0.6.13
  0.6.14
  0.6.15
  0.6.16
  0.6.17
  0.6.18
  0.6.19
  0.6.20
  0.6.21
  0.7.0
  0.7.1
  0.7.2
  0.7.3
  0.7.4
  0.7.5
  0.7.6
  0.7.7
  0.7.8
  0.7.9
  0.7.10
  0.7.11
  0.7.12
  0.8.0
  0.8.1
  0.8.2
  0.8.3
  0.8.4
  0.8.5
  0.8.6
  0.8.7
  0.8.8
  0.8.9
  0.8.10
  0.8.11
  0.8.12
  0.8.13
  0.8.14
  0.8.15
  0.8.16
  0.8.17
  0.8.18
  0.8.19
  0.8.20
  0.8.21
  0.8.22
  0.8.23
  0.8.24
  0.8.25
  0.8.26
  0.8.27
  0.8.28
  0.9.0
  0.9.1
  0.9.2
  0.9.3
  0.9.4
  0.9.5
  0.9.6
  0.9.7
  0.9.8
  0.9.9
  0.9.10
  0.9.11
  0.9.12
  0.10.0
  0.10-dev
  0.10-next
  0.10.1
  0.10.2
  0.10.3
  0.10.4
  0.10.5
  0.10.6
  0.10.7
  0.10.8
  0.10.9
  0.10.10
  0.10.11
  0.10.12
  0.10.13
  0.10.14
  0.10.15
  0.10.16
  0.10.17
  0.10.18
  0.10.19
  0.10.20
  0.10.21
  0.10.22
  0.10.23
  0.10.24
  0.10.25
  0.10.26
  0.10.27
  0.10.28
  0.10.29
  0.10.30
  0.10.31
  0.10.32
  0.10.33
  0.10.34
  0.10.35
  0.10.36
  0.10.37
  0.10.38
  0.10.39
  0.10.40
  0.10.41
  0.10.42
  0.10.43
  0.10.44
  0.10.45
  0.10.46
  0.10.47
  0.10.48
  0.11.0
  0.11.1
  0.11.2
  0.11.3
  0.11.4
  0.11.5
  0.11.6
  0.11.7
  0.11.8
  0.11.9
  0.11.10
  0.11.11
  0.11.12
  0.11.13
  0.11.14
  0.11.15
  0.11.16
  0.12.0
  0.12-dev
  0.12-next
  0.12.1
  0.12.2
  0.12.3
  0.12.4
  0.12.5
  0.12.6
  0.12.7
  0.12.8
  0.12.9
  0.12.10
  0.12.11
  0.12.12
  0.12.13
  0.12.14
  0.12.15
  0.12.16
  0.12.17
  0.12.18
  4.0.0
  4.x-dev
  4.x-next
  4.1.0
  4.1.1
  4.1.2
  4.2.0
  4.2.1
  4.2.2
  4.2.3
  4.2.4
  4.2.5
  4.2.6
  4.3.0
  4.3.1
  4.3.2
  4.4.0
  4.4.1
  4.4.2
  4.4.3
  4.4.4
  4.4.5
  4.4.6
  4.4.7
  4.5.0
  4.6.0
  4.6.1
  4.6.2
  4.7.0
  4.7.1
  4.7.2
  4.7.3
  4.8.0
  4.8.1
  4.8.2
  4.8.3
  4.8.4
  4.8.5
  4.8.6
  4.8.7
  4.9.0
  4.9.1
  5.0.0
  5.x-next
  5.1.0
  5.1.1
  5.2.0
  5.3.0
  5.4.0
  5.4.1
  5.5.0
  5.6.0
  5.7.0
  5.7.1
  5.8.0
  5.9.0
  5.9.1
  5.10.0
  5.10.1
  5.11.0
  5.11.1
  5.12.0
  6.0.0
  6.x-dev
  6.x-next
  6.1.0
  6.2.0
  6.2.1
  6.2.2
  6.3.0
  6.3.1
  6.4.0
  6.5.0
  6.6.0
  6.7.0
  6.8.0
  6.8.1
  6.9.0
  6.9.1
  6.9.2
  6.9.3
  6.9.4
  6.9.5
  6.10.0
  6.10.1
  6.10.2
  6.10.3
  6.11.0
  6.11.1
  6.11.2
  6.11.3
  6.11.4
  6.11.5
  6.12.0
  6.12.1
  6.12.2
  6.12.3
  6.13.0
  6.13.1
  6.14.0
  6.14.1
  6.14.2
  6.14.3
  6.14.4
  6.15.0
  6.15.1
  6.16.0
  6.17.0
  6.17.1
  7.0.0
  7.x-dev
  7.x-next
  7.1.0
  7.2.0
  7.2.1
  7.3.0
  7.4.0
  7.5.0
  7.6.0
  7.7.0
  7.7.1
  7.7.2
  7.7.3
  7.7.4
  7.8.0
  7.9.0
  7.10.0
  7.10.1
  8.0.0
  8.x-dev
  8.x-next
  8.1.0
  8.1.1
  8.1.2
  8.1.3
  8.1.4
  8.2.0
  8.2.1
  8.3.0
  8.4.0
  8.5.0
  8.6.0
  8.7.0
  8.8.0
  8.8.1
  8.9.0
  8.9.1
  8.9.2
  8.9.3
  8.9.4
  8.10.0
  8.11.0
  8.11.1
  8.11.2
  8.11.3
  8.11.4
  8.12.0
  8.13.0
  8.14.0
  8.14.1
  8.15.0
  8.15.1
  8.16.0
  9.0.0
  9.x-dev
  9.x-next
  9.1.0
  9.2.0
  9.2.1
  9.3.0
  9.4.0
  9.5.0
  9.6.0
  9.6.1
  9.7.0
  9.7.1
  9.8.0
  9.9.0
  9.10.0
  9.10.1
  9.11.0
  9.11.1
  9.11.2
  10.0.0
  10.x-dev
  10.x-next
  10.1.0
  10.2.0
  10.2.1
  10.3.0
  10.4.0
  10.4.1
  10.5.0
  10.6.0
  10.7.0
  10.8.0
  10.9.0
  10.10.0
  10.11.0
  10.12.0
  10.13.0
  10.14.0
  10.14.1
  10.14.2
  10.15.0
  10.15.1
  10.15.2
  10.15.3
  10.16.0
  11.0.0
  11.x-dev
  11.x-next
  11.1.0
  11.2.0
  11.3.0
  11.4.0
  11.5.0
  11.6.0
  11.7.0
  11.8.0
  11.9.0
  11.10.0
  11.10.1
  11.11.0
  11.12.0
  11.13.0
  11.14.0
  11.15.0
  12.0.0
  12.x-dev
  12.x-next
  12.1.0
  12.2.0
  12.3.0
  12.3.1
  12.4.0
  chakracore-dev
  chakracore-nightly
  chakracore-8.1.2
  chakracore-8.1.4
  chakracore-8.2.1
  chakracore-8.3.0
  chakracore-8.4.0
  chakracore-8.6.0
  chakracore-8.9.4
  chakracore-8.10.0
  chakracore-8.11.1
  chakracore-10.0.0
  chakracore-10.1.0
  chakracore-10.6.0
  chakracore-10.13.0
  graal+ce-1.0.0-rc1
  graal+ce-1.0.0-rc10
  graal+ce-1.0.0-rc11
  graal+ce-1.0.0-rc12
  graal+ce-1.0.0-rc13
  graal+ce-1.0.0-rc14
  graal+ce-1.0.0-rc15
  graal+ce-1.0.0-rc16
  graal+ce-1.0.0-rc2
  graal+ce-1.0.0-rc3
  graal+ce-1.0.0-rc4
  graal+ce-1.0.0-rc5
  graal+ce-1.0.0-rc6
  graal+ce-1.0.0-rc7
  graal+ce-1.0.0-rc8
  graal+ce-1.0.0-rc9
  iojs-0.12.0-dev
  iojs-1.0.0
  iojs-1.x-dev
  iojs-1.0.1
  iojs-1.0.2
  iojs-1.0.3
  iojs-1.0.4
  iojs-1.1.0
  iojs-1.2.0
  iojs-1.3.0
  iojs-1.4.1
  iojs-1.4.2
  iojs-1.4.3
  iojs-1.5.0
  iojs-1.5.1
  iojs-1.6.0
  iojs-1.6.1
  iojs-1.6.2
  iojs-1.6.3
  iojs-1.6.4
  iojs-1.7.1
  iojs-1.8.1
  iojs-1.8.2
  iojs-1.8.3
  iojs-1.8.4
  iojs-2.0.0
  iojs-2.0.1
  iojs-2.0.2
  iojs-2.1.0
  iojs-2.2.0
  iojs-2.2.1
  iojs-2.3.0
  iojs-2.3.1
  iojs-2.3.2
  iojs-2.3.3
  iojs-2.3.4
  iojs-2.4.0
  iojs-2.5.0
  iojs-3.0.0
  iojs-3.1.0
  iojs-3.2.0
  iojs-3.3.0
  iojs-3.3.1
  nightly
  node-dev
  rc
  v8-canary

ありすぎぃ!!!!

とりあえず無難に11系の最新版を落としておきましょう。

nodenv install 11.15.0
Downloading node-v11.15.0-darwin-x64.tar.gz...
-> https://nodejs.org/dist/v11.15.0/node-v11.15.0-darwin-x64.tar.gz

WARNING: node-v11.15.0-darwin-x64 is past its end of life and is now unsupported.
It no longer receives bug fixes or security updates.

Installing node-v11.15.0-darwin-x64...
Installed node-v11.15.0-darwin-x64 to /Users/blogenist/.config/anyenv/envs/nodenv/versions/11.15.0

Installed default packages for 11.15.0

確認

nodenv versions
11.15.0

バージョンの適用

グローバルの場合

マシン全体として共通のバージョンを設定したい場合はnodenv global {バージョン}コマンドで適用出来ます

[adsense-responsive]
確認

node -v
v11.15.0

ローカルの場合

そのディレクトリ内でのみ反映したい場合はnodenv local {バージョン}コマンドで適用出来ます

すると以下のようなファイルがカレントディレクトリに作成されます。

.node-version
10.16.0

確認

node -v
v10.16.0

fish: Unknown command nodeが出る場合

fish shellを使っている方は以下をfish.configに追加する必要がありますので、ご注意です。

~/.config/fish/config.fish
...
()
...
set -x NODENV_ROOT $ANYENV_ROOT/envs/nodenv/
set -x PATH $NODENV_ROOT/bin $PATH
set -x PATH $NODENV_ROOT/shims $PATH
...
()
...

終わりに

以上のように様々な言語のバージョン管理をanyenvで行う事が可能になりました。

今やバージョン管理はどの言語もマストで必要な作業なので、是非anyenvで一括管理してみてはいかがでしょうか♪