Skip to content

Ubuntu 24.04 へ asdf をインストールして言語 / ツールのバージョンを管理する

asdf は複数の言語やツールに対応したバージョンマネージャです。 今回は Ubuntu 24.04 へ asdf をインストールしてみます。

検証環境

以下の環境で検証しおました。

  • macOS Sonoma 14.2.1
  • asdf v0.13.1-0586b37

インストールする

asdf をインストールするには事前に curl と git をインストールしておく必要があります。 apt でインストールしておきます。

1
apt -y install curl git

~/.asdf へ git clone します。

1
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.13.1

必要な環境変数を ~/.bashrc へ追記します。

1
2
3
4
cat << 'EOF' >> ~/.bashrc
. "$HOME/.asdf/asdf.sh"
. "$HOME/.asdf/completions/asdf.bash"
EOF

~/.bashrc へ追記した内容を反映します。

1
source ~/.bashrc

これでインストール完了です。

基本的な使い方

asdf の基本的な利用の流れは以下です。

  1. 各言語/ツールのプラグインをインストールする
  2. 各言語/ツールの指定バージョンをインストールする
  3. インストールしたバージョンを利用出来るように設定する

asdf でよく利用するコマンドには以下などがあります。

コマンド 説明
asdf update asdf 自身をアップデートする
asdf plugin list インストール済みのプラグイン一覧を表示する
asdf plugin list all インストール可能なプラグイン一覧を表示する
asdf list インストール済みのプラグイン・バージョンを表示する
asdf list [PLUGIN] インストール済みの NAME プラグイン・バージョンを表示する
asdf list all [PLUGIN] インストール可能な NAME プラグインのバージョン一覧を表示する
asdf plugin add [PLUGIN] NAME プラグインをインストールする
asdf plugin remove [PLUGIN] NAME プラグインをアンインストールする
asdf plugin update [PLUGIN] NAME プラグインをアップデートする
asdf plugin update --all インストール済みのプラグインを全てアップデートする
asdf install [PACKAGE] PACKAGE をインストールする
asdf install [PACKAGE] [VERSION] 指定バージョンの PACKAGE をインストールする
asdf uninstall [PACKAGE] [VERSION] 指定バージョンの PACKAGE をアンインストールする
asdf global [PACKAGE] [VERSION] システム全体で利用する PACKAGE のバージョンを指定する
asdf local [PACKAGE] [VERSION] 特定のディレクトリ配下のみで利用する PACKAGE のバージョンを指定する

Python プラグインをインストールする

試しに Python プラグインをインストールしてみます。 Python プラグインを利用する為に必要なソフトウェアをインストールしておきます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
apt -y install \
  build-essential \
  curl \
  libbz2-dev \
  libffi-dev \
  liblzma-dev \
  libncursesw5-dev \
  libreadline-dev \
  libsqlite3-dev \
  libssl-dev \
  libxml2-dev \
  libxmlsec1-dev \
  tk-dev \
  xz-utils \
  zlib1g-dev

まず Python 用のプラグインをインストールします。 asdf plugin add python を実行します。

1
asdf plugin add python

インストール可能な Python のバージョンを確認します。 asdf list all python を実行します。

1
2
3
4
5
6
7
# asdf list all python
2.1.3
2.2.3
2.3.7
  ・
  ・
  ・

今回はバージョン 3.12.1 をインストールすることにします。 asdf install python 3.12.1 を実行します。

1
asdf install python 3.12.1

インストールした Python 3.12.1 がシステム全体で利用されるように設定します。

1
asdf global python 3.12.1

asdf list を実行すると 3.12.1 の横にアスタリスクが付いており、「システム全体で利用されている」ことが分かります。

1
2
3
# asdf list
python
 *3.12.1

実際に pythonpython3 のバージョンを確認すると 3.12.1 が利用されていることが分かります。

1
2
3
4
# python --version
Python 3.12.1
# python3 --version
Python 3.12.1

Python プラグインは内部で pyenv を利用している

Python プラグインは下記の GitHub リポジトリで管理されているようです。

1
2
# asdf plugin list all | grep python
python                       *https://github.com/danhper/asdf-python.git

このリポジトリの内容を見ていくと、例えば asdf-python/bin/help.links などに「内部的には pyenv を利用している」旨の記載が見受けられます。

1
2
3
4
5
6
# Output should be <title>: <link>

echo 'home-page: https://github.com/danhper/asdf-python
dependencies: https://github.com/pyenv/pyenv/wiki#suggested-build-environment
troubleshooting: https://github.com/pyenv/pyenv/wiki/Common-build-problems
'

尚、Python プラグイン (≒ pyenv) 以外にも poetryrye も利用可能なようです。

1
2
3
# asdf plugin list all | grep -e asdf-poetry -e asdf-rye
poetry                        https://github.com/asdf-community/asdf-poetry.git
rye                           https://github.com/Azuki-bar/asdf-rye

参考

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# asdf --help
version: v0.13.1-0586b37

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