[2023年2月版]WSL Ubuntu 20.02 に asdf をインストールして動かしてみる
asdf
とは
プラグインスタイルの **env ツールです。nodejsやjava、Python などの開発ツールのバージョン管理が容易に行えるようになります。
これまでそれぞれ rubyenv や nvm、sdkman などばらばらに入れていた開発環境管理ツールを asdf
で集約できるらしいです。
さっそく入れてみます!
asdf のインストール
依存モジュール
メインの asdf
コマンドの依存モジュールは以下の2つ
- Git
- Curl
これはインストール済みだったので飛ばします。
ダウンロード
以下のページを参考にダウンロード、というかリポジトリをクローンします。
# git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.11.1
でサクッとダウンロード(クローン)完了。
Bash & Git の項目を参照して bash.rc に追記
. "$HOME/.asdf/asdf.sh"
. "$HOME/.asdf/completions/asdf.bash"
で、とりあえず source
します。
source ~/.bashrc
さっそく asdf
打ち込んでみますと
$ asdf
version: v0.11.1-27c8a10
MANAGE PLUGINS
asdf plugin add <name> [<git-url>] Add a plugin from the plugin repo OR,
add a Git repo as a plugin by
specifying the name and repo url
asdf plugin list [--urls] [--refs] List installed plugins. Optionally show
git urls and git-ref
asdf plugin list all List plugins registered on asdf-plugins
repository with URLs
asdf plugin remove <name> Remove plugin and package versions
asdf plugin update <name> [<git-ref>] Update a plugin to latest commit on
default branch or a particular git-ref
asdf plugin update --all Update all plugins to latest commit on
default branch
MANAGE PACKAGES
asdf current Display current version set or being
used for all packages
asdf current <name> Display current version set or being
used for package
asdf global <name> <version> Set the package global version
asdf global <name> latest[:<version>] Set the package global version to the
latest provided version
asdf help <name> [<version>] Output documentation for plugin and tool
asdf install Install all the package versions listed
in the .tool-versions file
asdf install <name> Install one tool at the version
specified in the .tool-versions file
asdf install <name> <version> Install a specific version of a package
asdf install <name> latest[:<version>] Install the latest stable version of a
package, or with optional version,
install the latest stable version that
begins with the given string
asdf latest <name> [<version>] Show latest stable version of a package
asdf latest --all Show latest stable version of all the
packages and if they are installed
asdf list <name> [version] List installed versions of a package and
optionally filter the versions
asdf list all <name> [<version>] List all versions of a package and
optionally filter the returned versions
asdf local <name> <version> Set the package local version
asdf local <name> latest[:<version>] Set the package local version to the
latest provided version
asdf shell <name> <version> Set the package version to
`ASDF_${LANG}_VERSION` in the current shell
asdf uninstall <name> <version> Remove a specific version of a package
asdf where <name> [<version>] Display install path for an installed
or current version
asdf which <command> Display the path to an executable
UTILS
asdf exec <command> [args...] Executes the command shim for current version
asdf env <command> [util] Runs util (default: `env`) inside the
environment used for command shim execution.
asdf info Print OS, Shell and ASDF debug information.
asdf reshim <name> <version> Recreate shims for version of a package
asdf shim-versions <command> List the plugins and versions that
provide a command
asdf update Update asdf to the latest stable release
asdf update --head Update asdf to the latest on the master branch
RESOURCES
GitHub: https://github.com/asdf-vm/asdf
Docs: https://asdf-vm.com
"Late but latest"
-- Rajinikanth
Node.js の環境をインストールしてみます。
それぞれのプラグインには依存モジュールがあるらしく、node.js プラグイン用にいくつかパッケージを追加します。
$ sudo apt-get install dirmngr gpg curl gawk
...
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
gawk is already the newest version (1:5.1.0-1build3).
gawk set to manually installed.
curl is already the newest version (7.81.0-1ubuntu1.7).
dirmngr is already the newest version (2.2.27-3ubuntu2.1).
dirmngr set to manually installed.
gpg is already the newest version (2.2.27-3ubuntu2.1).
gpg set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 70 not upgraded.
とはいえ、インストール済みでしたのでそのままで動くようです。
ではさっそく asdf の node.js プラグインを追加してみます。
$ asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
Node.js バージョンの確認
$ asdf list all nodejs
...
19.2.0
19.3.0
19.4.0
19.5.0
lts-argon
lts-boron
lts-carbon
lts-dubnium
lts-erbium
lts-fermium
lts-gallium
lts-hydrogen
lts
lts
などの指定も可能ですね。
14
だけをリストアップしたい場合は以下のようにします。
$ asdf list all nodejs 14
...
14.19.1
14.19.2
14.19.3
14.20.0
14.20.1
14.21.0
14.21.1
14.21.2
lts をインストールしてみます。
$ asdf install nodejs lts
nstalling alias lts as 18.13.0
Trying to update node-build... ok
Downloading node-v18.13.0-linux-x64.tar.gz...
-> https://nodejs.org/dist/v18.13.0/node-v18.13.0-linux-x64.tar.gz
Installing node-v18.13.0-linux-x64...
Installed node-v18.13.0-linux-x64 to /home/xxxxxxxx/.asdf/installs/nodejs/18.13.0
Linking "lts" to "18.13.0"
asdf は Global と Local、実行中のシェルでバージョンの保存が別々にできます。
例えばカレントディレクトリで上記でインストールした LTS を有効にしてみて・・・
$ asdf current
nodejs lts /home/xxxxxxx/xxxxxx/asdf-example/.tool-versions
$ node -v
v18.13.0
$ cd ..
$ asdf current
nodejs ______ No version is set. Run "asdf <global|shell|local> nodejs <version>"
一つ上のディレクトリに行ったらさっきの設定は忘れていて、<global|shell|local>
で nodejs のバージョン指定してくださいとのメッセージが出る。
このようにディレクトリごとにバージョンを個別に指定することが可能です。
どのようになっているのかというと・・・
$ asdf local nodejs lts
とした時点で、 .tool-versions
ファイルが生成されてます。
このファイルの中身は以下のような感じ。
nodejs lts
ツールごとにバージョンが記載される模様ですね。
そしてasdfの真骨頂。
別のディレクトリから移動してきても、勝手に元のバージョンが有効になってます!
$ cd ..
$ node -v
v16.19.1
$ cd asdf_example/
$ node -v
v18.13.0
例えば上のディレクトリで v16 を使っていても、v18 を有効にしたディレクトリに戻ってくると自動的にバージョンが切り替わってます。
すごい賢い!
開発環境でのツールのバージョン管理がぐっと楽になりますね~👍
本日は以上です。
Discussion