anyenv で tfenv を入れると init でエラーが出るので回避する

数多ある *env 系のツール導入をぐっと簡単にしてくれる anyenv ですが、現行バージョン (1.1.1) では、tfenv を導入すると、シェルログイン時にエラーが出るようになります。

No such command 'init'
Usage: tfenv <command> [<options>]

Commands:
   install       Install a specific version of Terraform
   use           Switch a version to use
   uninstall     Uninstall a specific version of Terraform
   list          List all installed versions
   list-remote   List all installable versions

anyenv はログイン時、導入されている *env すべての init サブコマンドを順に実行するのですが、 tfenv には init サブコマンドがないのでエラーとなるようです。

修正 PR も上がっているようなのでそのうち取り込まれると思いますが、当面の回避方法のメモ。

ここでは、Mac で homebrew を使って anyenv をインストールした前提で書きます。

anyenv のインストール先を確認

% brew ls anyenv
/usr/local/Cellar/anyenv/1.1.1/bin/anyenv
/usr/local/Cellar/anyenv/1.1.1/completions/ (3 files)
/usr/local/Cellar/anyenv/1.1.1/libexec/ (14 files)

で、 libexec 以下の anyenv-init を修正します。

% cp /usr/local/Cellar/anyenv/1.1.1/libexec/anyenv-init /usr/local/Cellar/anyenv/1.1.1/libexec/anyenv-init.backup
% vim /usr/local/Cellar/anyenv/1.1.1/libexec/anyenv-init

修正内容は以下のような感じ。

% diff -up /usr/local/Cellar/anyenv/1.1.1/libexec/anyenv-init.backup /usr/local/Cellar/anyenv/1.1.1/libexec/anyenv-init
--- /usr/local/Cellar/anyenv/1.1.1/libexec/anyenv-init.backup 2020-01-26 22:57:10.000000000 +0900
+++ /usr/local/Cellar/anyenv/1.1.1/libexec/anyenv-init    2020-01-26 22:59:09.000000000 +0900
@@ -140,5 +140,5 @@ for env in $(anyenv-envs); do
     ;;
   esac

-  echo "$(${ENV_ROOT}/bin/${env} init - ${no_rehash_arg}${shell})"
+  [ "${env}" != 'tfenv' ] && echo "$(${ENV_ROOT}/bin/${env} init - ${no_rehash_arg}${shell})"
 done

homebrew を使わず git clone でインストールした場合は、 .anyenv/libexec/anyenv-init を同じように修正すればOKです。

本当はちゃんと 「init のない *env」を判定したいところなんですが、まあ一時的な回避策ということで。