見出し画像

「anyenv」の環境構築をしよう❗

こんにちは、おおとろ(@digiangler)です。

家の書斎で大好きなコーヒーを飲みながら書いています。

フルスタックエンジニアは、様々な言語で開発する機会が増えますので、プロジェクトを同一マシンで管理すると各プログラミング言語のバージョンが競合してしまいます。

なかには、並行していくつかの案件・プロジェクトを抱えている人もいますよね。

そこで便利なのが「anyenv」です。

「anyenv」は、様々なenv系のバージョンを複数インストールできる管理ツールです。

どんなenvをインストールできるのかというと、

✓ 「Renv」・・・R
✓ 「crenv」・・・Crystal
✓ 「denv」・・・D
✓ 「erlenv」・・・Erlang
✓ 「exenv」・・・Elixir
✓ 「goenv」・・・Go
✓ 「hsenv」・・・Haskell
✓ 「jenv」・・・Java
✓ 「luaenv」・・・Lua
✓ 「nodenv」・・・Node.js
✓ 「phpenv」・・・PHP
✓ 「plenv」・・・Perl
✓ 「pyenv」・・・Python
✓ 「rbenv」・・・Ruby
✓ 「sbtenv」・・・Sbt
✓ 「scalaenv」・・・Scala
✓ 「swiftenv」・・・Swift
✓ 「tfenv」・・・Terraform

かなりのenv系がサポートされています。

今後、様々なプログラミング言語を使って開発する可能性があるWebエンジニア(フロントエンドエンジニアとバックエンドエンジニア)は、「anyenv」の導入をおすすめします。

「anyenv」を導入するメリット

あくまで、私の見解です。

✓ 「anyenv」を導入すると、様々な言語のインストールやバージョン管理が簡単にできる
✓ 「bash」や「z shell(zsh)」、「fish shell」などに「anyenv」のパスを通すだけいい
✓ 「bash_profile」や「bashrc」、「zshrc」、「config.fish」がキレイ
✓ 「nodenv」などを直接インストールすると、他のenv系をインストールしてパスを通すと、上手くパスが通らないという不具合がなくなる
✓ 「nodenv」とか複数バージョンをインストールでき、切り替えもできる
✓ 環境を汚さず、プロジェクト毎にバージョンを切り替えることができる
✓ 特定のディレクトリだけバージョンを切り替えることができる

など

前置きが長くなりましたが、早速「anyenv」のインストールについて書いていきます。

環境

OS:macOS Catalina
Shell:fish shell
Homebrew 2.2.11

「bash」や「z shell」シェルを使用した環境構築の記事が多いので、あえて「fish shell」の記事とさせて頂きます。

「Command Line Tools」と「Homebrew」のインストール

インストール済みの場合は、スキップして次にいきましょう。

「Homebrew」を使うには「Command Line Tools」が必要ですので、インストールしてください。

$ xcode-select --install

「Homebrew」のインストール方法は、公式サイトで確認してください。

「anyenv」のインストール

注意:情報が古くなっている場合がありますので、必ず、本家「anyenv」のGitHubリポジトリを参照しながらやりましょう。

シェルは、「fish」を使用して環境構築しています。

1. 「anyenv」をインストールします。

$ brew install anyenv

2. ~/.config/fish/config.fishを編集してanyenvのパスを通します。

$ echo 'set -x PATH $HOME/.anyenv/bin $PATH' >> ~/.config/fish/config.fish
$ echo 'eval (anyenv init - | source)' >> ~/.config/fish/config.fish

3. シェルの再起動します。

$ exec fish -l

4. すると、ターミナルの一番上に、以下のエラーが表示されます。

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

5. 説明のとおり、マニュフェストディレクトリを作成します。

途中、「/User/[your_account]/.config/anyenv/anyenv-install」の「ディレクトリが存在しません、checkout しますか?」と聞かれるので「y」でcheckoutします。

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

6. バージョンが確認できたらインストールが完了。

$ anyenv -v
anyenv 1.1.1

7. 「anyanv」が使えるか確認します。

$ anyenv
anyenv 1.1.1
Usage: anyenv <command> [<args>]

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 **env
  version             Show the current Any version and its origin
  versions            List all Any versions available to **env

See `anyenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/anyenv/anyenv#readme

表示されれば完了です。

プラグインのインストール

注意:情報が古くなっている場合がありますので、必ず、本家「anyenv-update」のGitHubリポジトリを参照しながらやりましょう。

「anyenv-update」プラグイン をインストール

「anyenv」の様々なenv系を一括でアップデートできるプラグインを導入します。

1. リポジトリをプラグインディレクトリに複製するだけです。

# 初回はpluginsフォルダがないとエラーになりますので、必ず実行しましょう❗
$ mkdir -p (anyenv root)/plugins
$ git clone https://github.com/znz/anyenv-update.git (anyenv root)/plugins/anyenv-update

2. 実際にアップデートしてみましょう。

私の場合、まだ「nodenv」しかインストールしていないので、結果はそれぞれ違います。

$ anyenv update
Skipping 'anyenv'; not git repo
Updating 'anyenv/anyenv-update'...
Updating 'nodenv'...
Updating 'nodenv/node-build'...
Updating 'nodenv/nodenv-default-packages'...
Updating 'nodenv/nodenv-vars'...
Updating 'anyenv manifest directory'...

アップデートできれば完了です。

注意:情報が古くなっている場合がありますので、必ず、本家「anyenv-git」のGitHubリポジトリを参照しながらやりましょう。

「anyenv-git」プラグイン をインストール

「anyenv」の様々なenv系を一括でgitコマンドを実行するプラグインを導入します。

1. リポジトリをプラグインディレクトリに複製するだけです。

$ git clone https://github.com/znz/anyenv-git.git (anyenv root)/plugins/anyenv-git

2. anyenv update と同様の対象に、まとめて実行できます。

# anyenvでインストールした全ての**env系とインストールされているプラグインのアップデート
$ anyenv git pull

# ガーベージコレクション
$ anyenv git gc

# 全てのリモートリポジトリを表示
$ anyenv git remote -v

# gitのステータス表示
$ anyenv git status

など、 git の各種操作ができます。

以上で、快適に使用するプラグインのインストールは完了です。

せっかくなので、「nodenv」のインストール方法も書いときます。

「nodenv」のインストール

「anyenv」でインストール可能なenv系一覧です。

$ anyenv install -l
 Renv
 crenv
 denv
 erlenv
 exenv
 goenv
 hsenv
 jenv
 luaenv
 nodenv ← これをインストール
 phpenv
 plenv
 pyenv
 rbenv
 sbtenv
 scalaenv
 swiftenv
 tfenv

1. 「nodenv」をインストールします。

# 初回はenvsフォルダがないとエラーになりますので、必ず実行しましょう❗
$ mkdir ~/.anyenv/envs
$ anyenv install nodenv
/var/folders/sn/v1hx7kls3t3f2d9s2r40krns6qc63m/T/nodenv.20191223143232.16265 ~
Cloning https://github.com/nodenv/nodenv.git master to nodenv...
Cloning into 'nodenv'...
remote: Enumerating objects: 18, done.
remote: Counting objects: 100% (18/18), done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 3915 (delta 4), reused 13 (delta 2), pack-reused 3897
Receiving objects: 100% (3915/3915), 696.59 KiB | 1.04 MiB/s, done.
Resolving deltas: 100% (2579/2579), done.
~
~/.anyenv/envs/nodenv/plugins ~
Cloning https://github.com/nodenv/node-build.git master to node-build...
Cloning into 'node-build'...
remote: Enumerating objects: 77, done.
remote: Counting objects: 100% (77/77), done.
remote: Compressing objects: 100% (52/52), done.
remote: Total 18197 (delta 33), reused 42 (delta 11), pack-reused 18120
Receiving objects: 100% (18197/18197), 3.19 MiB | 2.46 MiB/s, done.
Resolving deltas: 100% (11638/11638), 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: 267, done.
remote: Counting objects: 100% (267/267), done.
remote: Compressing objects: 100% (151/151), done.
remote: Total 531 (delta 151), reused 202 (delta 105), pack-reused 264
Receiving objects: 100% (531/531), 113.88 KiB | 291.00 KiB/s, done.
Resolving deltas: 100% (272/272), 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 | 264.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.

2. シェルの再起動します。

$ exec fish -l

3. envで環境変数を確認します。
「anyenv」と「nodenv」のパスがPATHに追加されていることを確認してみよう。

$ env

4. バージョンを確認します。

$ anyenv versions
nodenv:
Warning: no Node detected on the system

「nodenv」で管理するnodeをインストールしていないので、上記のようにエラーが出力されます。

なので、「nodenv」を使ってnodeをインストールします。

「nodenv」を使って「node.js」をインストール

1. インストール可能なバージョンを確認する。

$ nodenv install -l

2. 好きなバージョンを指定してインストールします。

# 最新バージョンの場合:13.12.0
$ nodenv install {バージョン番号}

3. シェルの再起動します。

$ exec fish -l

4. インストールしたバージョンをデフォルトに指定します。

グローバル指定できるのはインストールしたバージョンです。

$ nodenv global {バージョン番号}

5. バージョンが確認できたらインストールが完了。

私の場合、最新バージョンをインストールしたので、以下となります。

ちなみに、「anyenv」でインストールした様々なenv系のバージョンがここに表示されます。

# 「anyenv」でインストールしたenvツールの一覧が表示されます❗
$ anyenv versions
nodenv:
* 13.12.0 (set by /Users/[your_account]/.anyenv/envs/nodenv/version)

6. Nodeのバージョンも確認しましょう。

私の場合、最新バージョンをインストールしたので、以下となります。

$ node -v
v13.12.0

$ npm -v
6.14.4

表示されれば完了です。

特定のプロジェクト配下だけNodeバージョンを切り替える方法

グローバルはそのままで、特定のプロジェクト配下で指定のバージョンを使用したいときに、nodenv localのコマンドでバージョンを変更することができます。

例:先程、最新のバージョン(v13.12.0)をインストールしたので、安定版のバージョン(v12.16.1)をインストールします。

1. 好きなバージョンを指定してインストールします。

# 安定バージョンの場合:12.16.1
$ nodenv install {バージョン番号}

2. バージョンが確認できたらインストールが完了。

$ anyenv versions
nodenv:
 12.16.1
* 13.12.0 (set by /Users/[your_account]/.anyenv/envs/nodenv/version)

早速、プロジェクト配下で指定のバージョンにしてみよう。

✓ グローバルが、最新のバージョン(v13.12.0)のまま。
✓ プロジェクト配下(ローカル)が、安定版のバージョン(v12.16.1)にします。

3. プロジェクト配下に移動します。

# プロジェクトのパスに移動してみましょう❗
$ cd {プロジェクトのパス}

4. 安定版のバージョンに指定します。

# 実行すると、プロジェクト配下に.node-versionファイルが作成されます❗
$ nodenv local 12.16.1

5. .node-versionのバージョン番号を確認します。

これで、自動的にバージョンを切り替えてくれます。

# バージョン番号が記載されています❗
$ cat .node-version
12.16.1

6. 安定版のバージョンに変更されているか確認します。

$ anyenv versions
nodenv:
* 12.16.1 (set by /Users/[your_account]/Desktop/Project_dir/.node-version)
 13.12.0

7. Nodeのバージョンも確認しましょう。

# Nodeのバージョンも安定版のバージョンになっています❗
$ node -v
v12.16.1

$ npm -v
6.13.4

表示されれば完了です。

こんな感じです。

あとは、お好きなenvをインストールしてみましょう。

おまけ

以下、読みたい方だけ読んでください。

注意:情報が古くなっている場合がありますので、必ず、本家「asdf-vm」のGitHubリポジトリを参照しながらやりましょう。

「asdf-vm」と呼ばれる、「anyenv」と同じようなバージョン管理ツールがあるようです。

使っていませんが、インストールだけしました。

ご参考程度に。

「asdf-vm」のインストール

一覧を参照してみると、様々なプログラム言語やツールの実行環境・SDKなどが管理できるようです。

1. 「asdf」をインストールします。

$ brew install asdf

2. ~/.config/fish/config.fishを編集してanyenvのパスを通します。

echo "source "(brew --prefix asdf)"/asdf.fish" >> ~/.config/fish/config.fish

4. シェルの再起動します。

$ exec fish -l

5. バージョンが確認できたらインストールが完了。

$ asdf --version                                                                                                                                                                                                     
v0.7.8

表示されれば完了です。

6. 「asdf」に必要なモジュールをインストールします。

brew install \
 coreutils automake autoconf openssl \
 libyaml readline libxslt libtool unixodbc \
 unzip curl

アップデートの場合

brew upgrade asdf

あくまで「asdf-vm」をインストールしただけなので、レビューなどはありません。

おわり

「Docker」という、コンテナ型の仮想化サービスを知っていますか❓

最近では、「Docker」の実用性に高い評価があり、開発時だけではなくコンテナの環境をそのままテストや本番環境として利用されるケースが増えています。

Dockerクラスタ管理ツール「kubernetes」も、現在ではコンテナ管理ツールのデファクトスタンダードとなっているようです。

世界中で注目されているサービスでもあり、日本でも流行りつつあります。

私も「Docker」で環境構築してシステム開発をしたりしています。

実際使ってみると、メリットやデメリットがあることがわかりました。

次回、「Docker」についても書いていこうと思います。

最後まで、読んで頂きありがとうございました❗

それでは、また。

画像1

是非、感想をコメントでくださると嬉しいです。

また、スキボタンを”こっそり”押したり、サポートしてくださるのも、とても嬉しいです。

SNSもよろしければご覧くださいね。

Twitterからのリツイートでの感想もくださると嬉しいです。

"こっそり"フォローしてくれると後で良いことがあるかも❗

この記事が参加している募集

よろしければサポートよろしくお願い致します。頂いたサポートはライターとしての活動費に使わせて頂きます❗m(_ _)mまた、感想のツイートやリクエスト、ぜひぜひお寄せください(*⌒▽⌒*)