anyenvで管理しているバージョン管理ツールを一括でアップデートする方法

2023-03-27Bash,Go,Linux,Mac,Ruby,Terraform

はじめに

anyenv を使うと、 xxxenv 系のツールを管理できます。

ここで、 xxxenv 系のツールとは、例えば pyenv goenv nodeenv といったツールを指しています。

導入することで、1 台の作業用 PC 内に複数バージョンのプログラム言語実行・ビルド環境を構築できます。

最近は Docker の登場、普及により xxxenv 系ツールの需要も下がっています。
しかし、Docker による仮想化の進んでいないコードベースもあるため、僕の PC 内では現役で活躍してくれています。

anyenv は、これら xxxenv 系のツールを一元管理するための上位のツールとなっています。

便利ですが anyenv でインストールされた xxxenv 系ツールで、最新バージョンがインストールできないときがあります。

具体的には anyenv を使ってインストールした goenv を使っていたときに、Go の最新バージョンをインストールできない時がありました。

この問題に対処します。

検証環境

$ uname -moi
arm64 unknown Darwin

$ bash -version | head -n 1
GNU bash, バージョン 5.2.2(1)-release (aarch64-apple-darwin21.6.0)

$ anyenv --version
anyenv 1.1.5

anyenv について

anyenv について、サラッと触れておきます。

冒頭で説明したとおり、 rbenv のような「各言語の複数実行環境を構築するためのツール」を「管理するツール」になります。

僕は macOS ユーザですので、導入は Homebrew を使いました。

$ brew install anyenv

インストールが終わったらセットアップを行います。

$ anyenv ini

ここまで終わったら一度ターミナルを終了し、再度立ち上げ直せば anyenv が浸かるようになります。

goenv のインストール

Go 実行環境を管理するためのツール goenv は以下のようにインストールできます。

$ anyenv install goenv

かんたんですね。

当初は go 1.19.1 を使いたかったので以下のようにインストールしていました。

$ goenv install 1.19.1

goenv で go 1.19.2 が見つからない

つい先程、 go 1.19.2 が利用したいと思ったため、 goenv install -l を実行して確認してみました。

goenv install -l コマンドは goenv でインストール可能な Go のバージョンを一覧表示するコマンドです。

$ goenv install -l | grep 1.19
  1.19.0
  1.19beta1
  1.19.1

すでに公開されている go 1.19.2 が見つかりませんでした。

どうやら goenv は何らかの方法で更新してやらなければ最新バージョンの Go をインストール可能なバージョンとして認識しないようです。

anyenv-update を使う

anyenv-update をインストールすることで、この問題に対処できます。

anyenv-updateanyenv のプラグインとして動作するツールです。
インストールすることで anyenv update というコマンドが使えるようになります。

インストール方法は Github ページに書かれているとおりです。

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

インストール後、以下のコマンドを実行します。

$ anyenv update
Skipping 'anyenv'; not git repo
Updating 'anyenv/anyenv-update'...
Updating 'goenv'...
 |  From https://github.com/syndbg/goenv
 |  337ce1f..3934658  master     -> origin/master
Skipping 'goenv/go-build'; not git repo
Updating 'nodenv'...
Updating 'nodenv/node-build'...
 |  From https://github.com/nodenv/node-build
 |  dc7cab27..ad13637c  master     -> origin/master
 |  9edeb954..205fc35b  latest-scraped-definitions -> origin/latest-scraped-definitions
 |  * [new tag]           v4.9.92    -> v4.9.92
Updating 'nodenv/nodenv-vars'...
Updating 'pyenv'...
 |  From https://github.com/pyenv/pyenv
 |  1f526edb..03a5d653  master     -> origin/master
 |  * [new tag]           v2.3.5     -> v2.3.5
Skipping 'pyenv/python-build'; not git repo
Updating 'rbenv'...
 |  From https://github.com/rbenv/rbenv
 |  - [deleted]         (none)     -> origin/resolve-rbenv-symlink
 |  22ee5d4..41580b6  master           -> origin/master
 |  * [new branch]      fallback-to-path -> origin/fallback-to-path
 |  Auto packing the repository in background for optimum performance.
 |  See "git help gc" for manual housekeeping.
 |  Auto packing the repository in background for optimum performance.
 |  See "git help gc" for manual housekeeping.
Updating 'rbenv/ruby-build'...
 |  From https://github.com/rbenv/ruby-build
 |  ecb9d22..55575fd  master     -> origin/master
 |  * [new tag]         v20221004  -> v20221004
 |  * [new tag]         v20220930  -> v20220930
Updating 'tfenv'...
 |  From https://github.com/tfutils/tfenv
 |  c05c364..1ccfddb  master      -> origin/master
 |  * [new branch]      arch-readme -> origin/arch-readme
Updating 'anyenv manifest directory'...

goenv 以外の情報も出力されていますが、僕の作業用 PC には nodenv、pyenv、rbenv、tfenv などもインストールされており、それらをまとめてアップデートしてくれたためです

改めて go 1.19.2 をインストールしてみる

改めて go 1.19.2 をインストールしてみます。

$ goenv install -l
  1.19.0
  1.19beta1
  1.19.1
  1.19.2
$ goenv install 1.19.2
Downloading go1.19.2.darwin-arm64.tar.gz...
-> https://golang.org/dl/go1.19.2.darwin-arm64.tar.gz
nv versions
Installing Go Darwin arm 1.19.2...
Installed Go Darwin arm 1.19.2 to /Users/genzouw/.anyenv/envs/goenv/versions/1.19.2

  2.68s user 3.82s system 55% cpu 11.787 total

$ goenv versions
  system
  1.16.1
  1.16.2
  1.18.0
* 1.19.1 (set by /Users/genzouw/.anyenv/envs/goenv/version)
  1.19.2

無事、 1.19.2 がインストールされました。

ひとこと

毎朝実行しているスクリプトに、 anyenv update を仕込ませて置こうと思います。

2023-03-27Bash,Go,Linux,Mac,Ruby,Terraform