🧭

オールインワンな開発環境をanyenvで構築する

2021/03/26に公開

はじめに

各プログラミング言語で開発を進める際には必ずそれぞれの言語での開発環境を構築することから始まります。しかし、プログラミング言語にはバージョンが多く存在するため、特定のバージョンによって動かないパッケージの存在など、プロジェクト毎に異なるバージョンを使いたいといったケースが存在します。またプログラミング言語がバージョンアップするたびに開発環境の構築方法が変わったりすることも多くあるため、複数のバージョンを使用するときに苦労を強いられることもあります。

各言語向けのツールとしてRubyならrbenv,Node.jsならnodenvといった環境管理env系ツールがあります。

これらのツールはそれぞれGitHubからのクローン、Homebrewなどのパッケージ管理ツールを使いインストールが可能です。使用するバージョンを場面に応じて柔軟に切り替えられるため、どれも人気のツールとなっています。

タイトルにもある「anyenv」は、公式が「All in one for env」と謳っている、オールインワンのバージョンマネージャです。今回はそんなオールインワンなツール「anyenv」を紹介します。

anyenvのGitHubリポジトリはこちらになります。

https://github.com/anyenv/anyenv

anyenvでインストールできるもの

v1.1.5時点では以下のツールをanyenv経由でインストール可能です。

ツール 対象環境・言語
Renv R
crenv Crystal
denv D
erlenv Erlang
exenv Elixir
goenv Go
hsenv Haskell
jenv Java
jlenv Julia
luaenv Lua
nodenv Node.js
phpenv PHP
plenv Perl
pyenv Python
rbenv Ruby
sbtenv sbt
scalaenv Scala
swiftenv Swift
tfenv Terraform

インストール

実行環境

  • WSL2(Ubuntu 22.04 LTS)
  • macOS Monterey 12.5.1(AppleSilicon)

手動インストール

Gitからチェックアウトしてインストールする方法です。Gitを使うため、特定のパッケージマネージャや、OSを選ぶことなくインストールできます。

まず、Gitを使いanyenvのGitHubリポジトリから本体をクローンしてきます。Gitコマンドを使うため、事前に Git コマンドがインストールされている必要があります。
以下のコマンドを実行してバージョン情報がうまく返ってくればGitコマンドがインストールされています。

# Gitのバージョンを確認
$ git --version
  git version 2.37.2

Gitが使えることを確認したら以下のコマンドでユーザーのホームディレクトリにanyenv本体をクローンします。

$ git clone https://github.com/anyenv/anyenv ~/.anyenv

クローンが終わると、ユーザーのホームディレクトリに.anyenvが作られます。

$ ls -a

. .. .anyenv

クローンしただけでは、パスが通っていないためパスを通します。
シェルにbashを利用している場合は以下のコマンドを実行。

bash
$ echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bash_profile

zshを使用している場合は以下のコマンドを実行します。

zsh
$ echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.zshrc

コマンドを実行したら設定を有効化するためシェルに再ログインします。以下のコマンドで再ログインできます。

# シェルを再起動
$ exec $SHELL -l

つづいて、anyenvの初期化をしていきます。ターミナルで以下のコマンドを実行。

$ anyenv init

# Load anyenv automatically by adding
# the following to ~/.bash_profile:

eval "$(anyenv init -)"

コマンドを実行すると設定の手順が表示されます。指示に従い、設定ファイル(この場合は.bash_profile)へ初期化処理を記述し初期設定を完了させます。

$ echo 'eval "$(anyenv init -)"' >> ~/.bash_profile

コマンド実行後またシェルに再ログインします。

続けて複数のenvをインストールするために必要なセットアップをしていきます。

anyenv install --init

コマンドを実行途中で確認を求められたら続行します。Completed!と表示されれば完了です。これで手動でのanyenvセットアップは終了です。

Homebrewを使ったインストール

macOSなど、パッケージマネージャとしてHomebrewを使用している場合、簡単にインストールして使い始められます。

brewコマンドが使える状況で以下のコマンドを実行します。

$ brew install anyenv

インストールが完了したら初期化処理をします。

$ anyenv init

設定ファイルに初期化処理を記述するように促されるので、.zshrcへ記述します。

$ echo 'eval "$(anyenv init -)"' >>  ~/.zshrc

これで初期化ができました。以下のコマンドで再ログインします。

# シェルを再起動
$ exec $SHELL -l

続けてanyenvのセットアップをします。

$ anyenv install --init

コマンドを実行途中で確認を求められたら続行します。Completed!と表示されれば完了です。

インストール可能なenv系を一覧表示

以下のコマンドで現在のanyenvのバージョンで使用できるenv系ツールを一覧表示できます。

$ anyenv install -l

  Renv
  crenv
  denv
  erlenv
  exenv
  goenv
  hsenv
  jenv
  jlenv
  luaenv
  nodenv
  phpenv
  plenv
  pyenv
  rbenv
  sbtenv
  scalaenv
  swiftenv
  tfenv

現在インストール可能なenv系ツールが表示されました。ここから必要なenv系ツールをインストールできます。

env系ツールのインストール

例としてNode.jsのバージョンマネージャnodenvをインストールしてみます。
まずnodenvをanyenv経由でインストールします。

$ anyenv install nodenv
...

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

インストールが成功すると設定の再読み込みを求められるため、指示に従いexec $SHELL -lでシェルへ再ログインします。

再ログインするとインストールしたenv系ツールのコマンドが使用可能になります。

インストールしたツールは、anyenvと同様に、以下のようなコマンドが使用できます。例では、上に続けてnodenvをインストールした場合で説明しています。
env系ツールでほとんど操作は変わらないため、適宜先頭を置き換えてください。

インストールできるバージョンの表示

$ nodenv install -l
  ~
  # インストール可能なすべてのバージョンが表示される

バージョンを指定してのインストール

# Node.js 14.15.4(LTS)をインストール
$ nodenv install 14.15.4

# nodevをrehash 新しいバージョンをいれたら rehashを行う
$ nodenv rehash

# インストールされたバージョンを確認
$ nodenv versions
  14.15.4

システム全体で使うバージョンを指定

インストールしただけではまだnodeコマンドを使用できないため、システム上でメインとして使うバージョンを指定する必要があります。

# システム全体で使用するバージョンを設定 例 node 14.15.4
$ nodenv global 14.15.4

# Node.jsのバージョンを確認
$ node --version
  node 14.15.4

複数バージョンの切り替え

env系ツールを使う醍醐味である複数バージョンの切り替えです。
ここでは新しい別のバージョンを新たにインストールして切り替える例を紹介します。

# 異なるバージョン(15.10.0)をインストール
$ nodenv install 15.10.0

~
Installed node-v15.10.0-linux-x64 to /home/user/.anyenv/envs/nodenv/versions/15.10.0

# 15.10.0がインストールされた グローバルで指定されている14.15.4は先頭に * (アスタリスク)がつく
$ nodenv versions
* 14.15.4 (set by /home/user/.anyenv/envs/nodenv/version)
  15.10.0

# システムで使うバージョンを15.10.0に変更
$ nodenv global 15.10.0

# 切り替わったか確認
$ node -v
  15.10.0

# システム全体で使うバージョンが15.10.0に変更されている
$ nodenv versions
  14.15.4
* 15.10.0 (set by /home/user/.anyenv/envs/nodenv/version)

プロジェクトごとに使いたいバージョンを切り替える

先程設定したバージョンと 異なるバージョンをプロジェクト内で使いたいという前提でバージョンを切り替える例を紹介します。
Node.js 15.10.0 を14.15.4に切り替えてみます。

# システムでのバージョンを確認
$ node --version
  15.10.0

# バージョンを指定したいプロジェクトへ移動
$ cd ~/Documents/example-project

# 使用したいバージョンを(local)で指定
$ nodenv local 14.15.4

# Node.jsのバージョンを確認
$ node --version
  14.15.4

# バージョンを指定するとプロジェクト内に .node-version ファイルが作成される

上の流れでバージョンを切り替えることができます。anyenvを経由して柔軟にenv系のツールをインストール、バージョンの指定までできるのは便利です。

また、anyenvでは複数のenv系ツールをまとめて管理できます。以下のコマンドでanyenvにて管理しているenv系ツールを表示します。

$ anyenv versions

nodenv:
  system
* 14.15.4 (set by /home/user/.anyenv/envs/nodenv/version)
phpenv:
  7.4.15
rbenv:
* 2.7.2 (set by /home/user/.anyenv/envs/rbenv/version)
  3.0.0

env系ツールの一括アップデート

ここまで、env軽ツールのインストールとバージョン管理について紹介してきました。

anyenvで管理できるenv系ツールはよくアップデートでバージョンが上がります。複数のenvを使用している場合、アップデートを確認して場合それぞれ個別にアップデートするのは大変です。そこでenv系のバージョンをまとめてアップデートできる便利なプラグインがあるため紹介します。

プラグインのリポジトリはこちらになります。

https://github.com/znz/anyenv-update

# .anyenv 配下にプラグイン管理用のディレクトリ作成
$ mkdir -p $(anyenv root)/plugins

# プラグインをGitHubからクローン
$ git clone https://github.com/znz/anyenv-update.git $(anyenv root)/plugins/anyenv-update

# インストールされたenvの一括アップデート
$ anyenv update
  ~
  Updating 'anyenv'...
  Updating 'anyenv/anyenv-update'...
  Updating 'nodenv'...
  Updating 'nodenv/node-build'...
  Updating 'nodenv/nodenv-vars'...
  Updating 'anyenv manifest directory'...

これでバージョンアップがあったときにもanyenv updateとひとつのコマンドで対応できるようになり便利です。

おわりに

今回は、オールインワンなバージョンマネージャ「anyenv」についてまとめました。これ1つでバージョン管理はバッチリというぐらいに柔軟にツールの管理ができてとても便利だと感じました。anyenvを使うことでcomposerやbundlerといったおなじみのパッケージマネージャも合わせて導入されたりと痒いところに手が届くの便利です。anyenvを使うことで誰もが通るプログラミング環境構築という大きな壁も柔軟に解決できそうな気がしました。開発環境に時間をかけることなく開発の方に集中したほうが望ましいため、このようなツールは積極的に活用していきたいところですね。

最後まで読んでいただきありがとうございました。

GitHubで編集を提案

Discussion

ログインするとコメントできます