最近ちゃんと環境構築をしようと思ったのでasdfを使い始めた、pythonやjavaなど複数の言語のバージョン等を一括で管理できる便利な奴だ
asdf updateが使えなくなったので、ここではwsl(2.3.26.0)のubuntu(24.04.1)における0.16.0へのアップデート方法を書き残しておく(導入方法もあるよ)、ついでにasdfの使用方法と補足も載せておく
asdf0.15.0と0.16.0で導入方法がまるっきり違ったため、この記事が古くなったら公式リファレンスを参照することお勧めします
asdf0.16.0の導入方法(アップデート方法)
asdfのアンインストール
手順は公式リファレンスと同様の内容、すでにasdf(私の環境はおそらく0.15.0だった)がインストールされている場合はこの操作が必要
- ~/.bashrc内の
を削除
. "$HOME/.asdf/asdf.sh" . "$HOME/.asdf/completions/asdf.bash"
-
で/.asdfファイルとコンフィグを削除
rm -rf "${ASDF_DATA_DIR:-$HOME/.asdf}" rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
asdf0.16.0の(再)インストール
これは公式リファレンスとは少し違うやり方をしている
-
でソースコードをクローン
git clone https://github.com/asdf-vm/asdf.git --branch v0.16.0
-
ビルドにGo言語を使用するため、Goをインストールしていない場合はでインストールするsudo apt install golang
バージョン管理をするために別な環境を適当に突っ込むの気持ち悪いな -
として、クローンしたリポジトリに移動して、makeコマンドでビルドする
cd asdf make
-
3でビルドしたファイルをとしてコマンド置き場にコピーするsudo cp asdf /usr/bin
-
ここまで完了したらとasdfを実行して、asdfのバージョン、オプション情報等が出てきたら成功asdf
-
さいごに、~/.profileを開いてを書き加える、これをすることで ~/.asdf/shims 内にあるコマンドを使用することができるようになるexport PATH="${ASDF_DATA_DIR:-$HOME/.asdf}/shims:$PATH"
~/.bash_profileではないことに注意
理由はbash_profilebashrcprofileについてを参照
ファイルの編集方法がわからない方はvimについてのvimを参照
使い方
asdfで初めて使用する言語の場合(プラグインの導入方法)
>>> asdf plugin list all | grep python
python https://github.com/danhper/asdf-python.git
のように任意の言語のプラグインが存在しているか検索した後
asdf plugin add python
としてプラグインを追加する
バージョンをインストールする場合
pythonを例にとると
asdf list all python 3
として、インストール可能なバージョンを検索し
asdf install python 3.9.18
としてインストールする
anacondaなどのすでにパッケージ化された環境もasdfで管理できる(インストールできる)
バージョン管理の方法
~v0.15.0と方法が異なります
以下のコマンドを実行すると、先ほどインストールしたバージョンを全体(おそらくホームディレクトリ配下)で利用するように設定出来る
asdf set -u <plugin> <version>
python3.9.18を例にとると
asdf set -u python 3.9.18
となる
補足
以下は初心者向けの補足となります
.bash_profile、.bashrc、.profileについて
この欄はいろんな記事の寄せ集めです…私も一部理解できたない…
- .bashrc
- シェルログイン時に読み込まれるファイル
- exportしない変数、シェル関数等々はここで設定する必要がある
- bashでしか使わないものを記述する
- .bash_profile
- ログイン時にそのセッション全体に適用するものを記述する
- ここでは何も出力してはならない
- シェルの種類に依存しないものを記述する
- 環境変数としてexportするものの設定を各場所
- exportしたシェル変数は環境変数となる、値を入れる前にexportしてもよい
- .plofile
- .bash_profileが存在していない場合、次にこれが読み込まれるが、その場合でもこのファイルは存在していなくても問題ない
- .bash_profileを作成した場合、これが読み込まれなくなるので通常は非推奨
- ただし、ubuntuを使用する場合デフォルトだと.bash_profileが存在せず.plofileのみ存在するため、安易に.bash_profileを作成することはお勧めしない
- リファレンスに.bash_profileに書き込めと書いてあるものは、.plofileに書くことをお勧めする
vimについて
linuxでよく使われているvimというエディタは癖が強いため、初心者向けに今回のケースでの使用例を載せておく
-
まず、以下のコマンドでvimで.profileファイルを開く
vim ~/.profile
-
次に大文字の G を入力して(以下vimエディタの中では操作を行う際、断りがなければ(=コマンドの実行でなければ)エンターキーを押す必要はない)ファイルの一番下に移動する
-
o を入力し新しい行を挿入してインサートモードに入る
-
ここまでくれば入力したい文字を書き込めるようになっているので、普通のエディタの感覚で必要なもの、今回なら
export PATH="${ASDF_DATA_DIR:-$HOME/.asdf}/shims:$PATH"
を書き加える
-
必要な変更が終わったらescキーを押してインサートモードから通常モードに切り替える
-
:wq と入力し(コロンも必要)エンターキーを押すことで変更を保存しvim終了できる
変数展開について
- 所々出てきた ${ASDF_DATA_DIR:-$HOME/.asdf} などの表記、これは変数展開というものらしい
- ${parameter:-word}
- paramaterが未定義かnullならその値はwordに置換される、ただしparameterへの代入は起こらない
- ${parameter:=word}
- 上の代入有りバージョン
- ほかにもたくさん存在しており、bash(1)に記述があるそうだ
- ${parameter:-word}
環境変数$PATHについて
- PATHに登録されているパスはコマンドが実行されたとき、そのコマンドを検索する際に使用される
- 今回はPATHの先頭にasdfのパスを通したが、これはPATHは先頭から順に検索されるため、ほかの場所にすでにコマンドが存在していてもasdfで規定して環境のコマンドが優先されるようにするためだと思われる
蛇足
ubuntuでmakepkgを使おうとした間抜けな話
ubuntuだとmakepkgを使用できない
-
結論としてはmakepkgはpacmanに依存しており、ubuntuだとpacmanがおそらくパッケージマネージャー同士が干渉しないように使用できないようになっているため、makepkg自体使用できないということらしい
-
ubuntuでmakepkgを使おうとする間抜けはそうそう居ないだろうが、エラーの原因究明に丸1日以上かけたので第二の間抜けが生まれないようにエラー分含めここに書き残しておく、リファレンスのわからんところは読み飛ばすなよ…
-
以下経緯
- Install asdfのrecommendedの欄のHomebrewはmacのパッケージマネージャーのことらしいな、まあこれは使えないな
- まあゆうてrecommendedって書いてあるし、もう一つのコマンドでいけるやろ
-
git clone https://aur.archlinux.org/asdf-vm.git && cd asdf-vm && makepkg -si ==> ERROR: An unknown error has occurred. Exiting... User defined signal 1
は?????????
4. 試行錯誤の結果makepkgはPacmanに依存していて、それが見つからなかったからエラーになったらしいということが分かった
5. えっ、aptでpacman入れられるの…????? なら今度こそ行けるやろ!!!!
6.makepkg -si ==> Making package: asdf-vm 0.16.0-1 (Tue Feb 4 15:05:19 2025) ==> Checking runtime dependencies... X Error of failed request: BadName (named color or font does not exist) Major opcode of failed request: 45 (X_OpenFont) Serial number of failed request: 21 Current serial number in output stream: 25 ==> ERROR: 'pacman' returned a fatal error (1):
は????????????????????
調べた結果、pacmanはArch Linuxのパッケージマネージャーで~すubuntuだと使えませぇんwwww、ということらしい
そ り ゃ そ う だ
最後に
何か訂正があればコメントしてくださると大変ありがたいです
またもし上手くいったら、いいねしていってくださるとうれしいです
途中何か躓いたらコメントしてくだされば私が暇なときに対応します
参考させていただいたサイト