😀

anyenvからasdfに移行した話

2022/05/10に公開

anyenvを使っていた私が、asdfに乗り換えた時に実施した手順を残しておきます。

環境

  • masOS Monterey 12.3.1
  • fish 3.4.1
  • fisher 4.3.1
  • homebrew 3.4.8

移行前のconfig.fishの状態

特に変わったことはしておらず、ただhomebrewとanyenvの有効化をしているだけです。

if status is-interactive
    source (/opt/homebrew/bin/brew shellenv|psub)
    source (anyenv init - fish|psub)
    # Commands to run in interactive sessions can go here
end

anyenvをやめる

anyenvをやめるにあたり、$HOME/.anyenvとanyenv自体の削除も考えたのですが、asdf移行後にまた戻ってくる可能性を考えると、これらは削除せず、単にconfig.fishからanyenv initの実行をやめて、関係するディレクトリをPATHに乗せない方針にしました。

なので、config.fishsource (anyenv init - fish|psub)をコメントアウトしてシェルを再起動しました。

これにより、PATHから*envのshimsとbinが削除されました。
ただ、引き続き$HOME/.anyenv/binへのPATHは残っています。ただ、自分の環境にはこのディレクトリは存在せず、また、このPATHを追加しているのはanyenvのインストール手順なので、今回はanyenvを削除しない方針なので残しておきます。

anyenvをやめた後のconfig.fish。(コメントアウトしただけ)

if status is-interactive
    source (/opt/homebrew/bin/brew shellenv|psub)
    # source (anyenv init - fish|psub)
    # Commands to run in interactive sessions can go here
end

asdfをインストールする

これでanyenvに関連した*envは動かなくなるので、asdfのGet Startedの通りにインストールを進めます。

brew install asdf
echo -e "\nsource "(brew --prefix asdf)"/libexec/asdf.fish" >> ~/.config/fish/config.fish
# シェルを再起動

各種pluginを入れる

私は、goenvとnodenvとpyenvを使っていたので、最後にそれらを有効化しました。

# nodejs
asdf plugin-add nodejs
asdf install nodejs latest
asdf install nodejs 16.15.0
asdf global nodejs 16.15.0

# golang
asdf plugin-add golang
asdf install golang 1.18.1
asdf global golang 1.18.1

# python
asdf plugin-add python
asdf install python latest
asdf global python 3.10.4

(2022-06-10追記)

.python-versionといったレガシーな書き方をしているプロジェクトも扱っているので、~/.asdfrcに以下を記入する。

legacy_version_file = yes

まとめ

  • anyenvで入れた*env系を一時的に無効化するのであれば、anyenv initをコメントアウトするのが良い。
    • anyenvの削除で深追いをしない!
      - asdfのマニュアルにはfish&Homebrewの場合の手順が記載されていてとても助かった。

皆さんも良きasdfライフを!

Discussion