Ubuntu 24.04 LTSにasdfをインストールする(Bash)

Elixirインストールのために、前段階として、複数のElixirのバージョン管理ができるasdfをUbuntuにインストールします。
asdfのインストールのガイドページ:
「1. Install asdf」の「With Package Manager」にはaptを使った方法が書いていないので、「Build from Source」を参考にソースビルドします。
今回は、ホームディレクトリ配下の「.asdf/」ディレクトリ内にasdf
コマンドをビルド・配置することにします。
使うシェルは、UbuntuのデフォルトシェルであるBashです。

手順
以下に示す手順は、前述の「1. Install asdf」の「Build from Source」のUbuntu+aptの場合のコマンドを参考に、省略された部分の補足や前述の条件に合うような変更をしたものです。
目指す最終形は、以下のようになります:
- ビルドした
asdf
コマンドは「~/.asdf/」ディレクトリ内に配置される - PATHの設定やasdfの基本的な設定は、「~/.asdf/asdf.sh」をBash起動時に読み込むことで行う
aptリポジトリ情報の最新化
sudo apt update -y
gitとunzipのインストール
git
はasdfのインストール時に、unzip
はインストールしたasdfを使ったElixirインストール時に、それぞれ必要になります。
sudo apt install -y git unzip
asdfのインストール
asdfのGitリポジトリのクローン
asdfのGitリポジトリを、ホームディレクトリ配下の「.asdf/」ディレクトリとしてgitクローンします:
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.16.7
gitクローンして「.asdf/」ディレクトリが作成されていることを確認する:
ls ./ -pa
出力例
~$ ls ./ -pa
.asdf/ # ←このディレクトリができていればOK!
make
コマンドを実行して、asdfをビルドする
「~/.asdf/」ディレクトリに移動します:
cd ~/.asdf/
make
コマンドを実行して、asdfをビルドします:
make
今いる「~/.asdf/」ディレクトリ内に、asdf
コマンド(=実行ファイル)が作成されています:
ls -l asdf
出力例
~/.asdf$ ls -l asdf
-rwxr-xr-x 1 shuichi shuichi 11776260 Apr 27 03:33 asdf
このasdf
コマンドのビルドが成功していることを確認しましょう:
./asdf version
出力例
$ ./asdf version
"cbe8c6b-dev"

「~/.asdf/asdf.sh」をBash起動時に読み込むようにする
asdfのGitリポジトリにはシェルスクリプト「asdf.sh」があり、これを読み込むことで、PATHの設定やasdfの基本的な設定を行ってくれます。
Bash起動時に読み込まれる「~/.profile」に、「~/.asdf/asdf.sh」を読み込む設定を追記します。
ホームディレクトリに戻ります:
cd ~
「~/.profile」のバックアップを作成する
念の為、「~/.profile」のバックアップを作成しておきます。
バックアップファイル名は、タイムスタンプをつけた「~/.profile.<YYYY-mm-dd_HH-MM-SS>」とします。
-
まず、バックアップファイル名をシェル変数
profile_backup_filename
に格納しておきます。
バックアップファイル作成時の他、その後でのバックアップファイルの作成の成否確認の際にこのファイル名が必要になるため、使い回せるようにします。profile_backup_filename=".profile.$(date '+%Y-%m-%d_%H-%M-%S')"
確認のために、バックアップファイル名を出力しておきましょう:
echo "${profile_backup_filename}"
出力例
~$ echo "${profile_backup_filename}" .profile.2025-04-27_04-05-03
-
バックアップファイルを作成します:
cp ~/.profile ~/"${profile_backup_filename}"
-
バックアップファイルが作成されたことを確認します:
-
ファイルの存在確認
ls -a ~/"${profile_backup_filename}"
出力例
~$ ls -a ~/"${profile_backup_filename}" /home/shuichi/.profile.2025-04-27_04-05-03
-
ファイルの内容が一致することを確認:出力がなければOK
sdiff -s ~/.profile ~/"${profile_backup_filename}"
-

「.profile」に「~/.asdf/asdf.sh」を読み込む設定を追記する
echo -e "\n# asdf" >> ~/.profile
echo 'export PATH=$PATH:$HOME/.asdf' >> ~/.profile
sdiff -s ~/.profile ~/"${profile_backup_filename}"
~$ sdiff -s ~/.profile ~/"${profile_backup_filename}"
<
# asdf <
export PATH=$PATH:$HOME/.asdf <
シェルに新たにログインします
asdf version
type -a asdf
~$ type -a asdf
asdf is /home/shuichi/.asdf/asdf
「.profile」を変更前の状態に戻す
cp ~/"${profile_backup_filename}" ~/.profile

ドキュメントの「2. Configure asdf 」の「Bash」のセクションを参考にする。
ただし、編集するファイルは変更する。
ドキュメントでは「~/.bash_profile」「~/.bashrc」を編集しているが、Ubuntuなので(説明を追記)いずれも「.profile」の編集に変更する。
echo 'export PATH="${ASDF_DATA_DIR:-$HOME/.asdf}/shims:$PATH"' >> ~/.profile
コマンド補完
echo '. <(asdf completion bash)' >> ~/.profile
再ログイン

ErlangとElixirのインストール
ElixirはErlangの上で動くので、ErlangとElixirの両方をインストールする。
asdfのpluginでそれぞれインストールする。
ErlangとElixirのバージョンの組み合わせの確認
このあと言及する「asdf-elixir」プラグインのREADME.mdの「Check compatibility between elixir and erlang:」セクションに記載されている以下のリンク先から、インストールしたいElixirのバージョンとそれに対応したErlangのバージョンを確認する:
今回は、以下のバージョンの組み合わせでインストールすることにする:
- Elixir:1.18.3(1.18系の最新;2025年04月27日現在)
- Erlang:27.3.3(27系の最新;2025年04月27日現在)
Erlangのインストール
Elixirより先に、Erlang 27.3.3をインストールする。
「asdf-erlang」プラグインのインストール
asdf plugin add erlang https://github.com/asdf-vm/asdf-erlang.git
Erlangインストールに必要なライブラリのインストール
sudo apt install -y build-essential autoconf m4 libwxgtk3.2-dev libwxgtk-webview3.2-dev libgl1-mesa-dev libglu1-mesa-dev libpng-dev libssh-dev unixodbc-dev xsltproc fop libxml2-utils libncurses-dev openjdk-11-jdk
Erlangのインストール
asdf list all erlang 27
~$ asdf list all erlang 27
27.0-rc1
27.0-rc2
27.0-rc3
27.0
27.0.1
27.1
27.1.1
27.1.2
27.1.3
27.2
27.2.1
27.2.2
27.2.3
27.2.4
27.3
27.3.1
27.3.2
27.3.3 # ←これをインストールする!
asdf install erlang 27.3.3
asdf set -u erlang 27.3.3
asdf current
~$ asdf current
Name Version Source Installed
erlang 27.3.3 /home/shuichi/.tool-versions true

Elixirのインストール
次に、Elixir 1.18.3をインストールする。
「asdf-elixir」プラグインのインストール
asdf plugin add elixir https://github.com/asdf-vm/asdf-elixir.git
Elixirインストールに必要なライブラリのインストール
「asdf-elixir」のGitHubリポジトリのREADME.md(前節のリンク)を見るに、特にライブラリのインストールは必要ない。
Elixirのインストール
asdf list all elixir 1.18
~$ asdf list all elixir 1.18
1.18.0
1.18.0-otp-25
1.18.0-otp-26
1.18.0-otp-27
1.18.0-rc.0
1.18.0-rc.0-otp-25
1.18.0-rc.0-otp-26
1.18.0-rc.0-otp-27
1.18.1
1.18.1-otp-25
1.18.1-otp-26
1.18.1-otp-27
1.18.2
1.18.2-otp-25
1.18.2-otp-26
1.18.2-otp-27
1.18.3
1.18.3-otp-25
1.18.3-otp-26
1.18.3-otp-27 # ←これをインストールする!
asdf install elixir 1.18.3-otp-27
asdf set -u elixir 1.18.3-otp-27
asdf current
~$ asdf current
Name Version Source Installed
elixir 1.18.3-otp-27 /home/shuichi/.tool-versions true
erlang 27.3.3 /home/shuichi/.tool-versions true
elixir --version
~$ elixir --version
Erlang/OTP 27 [erts-15.2.6] [source] [64-bit] [smp:24:24] [ds:24:24:10] [async-threads:1] [jit:ns]
Elixir 1.18.3 (compiled with Erlang/OTP 27)

cat ~/.tool-versions
~$ cat ~/.tool-versions
erlang 27.3.3
elixir 1.18.3-otp-27