ubuntu初心者によるasdf0.16.0導入方法

最近ちゃんと環境構築をしようと思ったのでasdfを使い始めた、pythonやjavaなど複数の言語のバージョン等を一括で管理できる便利な奴だ
asdf updateが使えなくなったので、ここではwsl(2.3.26.0)のubuntu(24.04.1)における0.16.0へのアップデート方法を書き残しておく(導入方法もあるよ)、ついでにasdfの使用方法と補足も載せておく

:::note warn
asdf0.15.0と0.16.0で導入方法がまるっきり違ったため、この記事が古くなったら[公式リファレンス](https://asdf-vm.com/guide/getting-started.html)を参照することお勧めします
:::


## asdf0.16.0の導入方法(アップデート方法)
### asdfのアンインストール
手順は公式リファレンスと同様の内容、すでにasdf(私の環境はおそらく0.15.0だった)がインストールされている場合はこの操作が必要
1. ~/.bashrc内の
    ```bash
    . "$HOME/.asdf/asdf.sh"
    . "$HOME/.asdf/completions/asdf.bash"
   ```
   を削除
2. 
    ```bash
    rm -rf "${ASDF_DATA_DIR:-$HOME/.asdf}"
    rm -rf "$HOME/.tool-versions" "$HOME/.asdfrc"
    ```
    で/.asdfファイルとコンフィグを削除

### asdf0.16.0の(再)インストール
これは公式リファレンスとは少し違うやり方をしている<br>
1. 　
    ```bash
    git clone https://github.com/asdf-vm/asdf.git --branch v0.16.0
    ```
    でソースコードをクローン
2. <br>ビルドにGo言語を使用するため、Goをインストールしていない場合は
    ```bash
    sudo apt install golang
    ```
    でインストールする <br> ~~バージョン管理をするために別な環境を適当に突っ込むの気持ち悪いな~~
3.  　
    ```bash
    cd asdf
    make
    ```
    として、クローンしたリポジトリに移動して、makeコマンドでビルドする
4. <br>3でビルドしたファイルを
    ```bash
    sudo cp asdf /usr/bin
    ```
    としてコマンド置き場にコピーする
5. <br>ここまで完了したら
    ```bash
    asdf
    ```
    とasdfを実行して、asdfのバージョン、オプション情報等が出てきたら成功
6. <br>さいごに、~/.profileを開いて
   ```bash
   export PATH="${ASDF_DATA_DIR:-$HOME/.asdf}/shims:$PATH"
   ```
   を書き加える、これをすることで ~/.asdf/shims 内にあるコマンドを使用することができるようになる
:::note warn
~/.bash_profileではないことに注意
理由は[bash_profilebashrcprofileについて](#bash_profilebashrcprofileについて)を参照
:::
:::note info
ファイルの編集方法がわからない方は[vimについて](#vimについて)のvimを参照
:::
    
## 使い方
### asdfで初めて使用する言語の場合(プラグインの導入方法)
```bash
>>> asdf plugin list all | grep python
python                        https://github.com/danhper/asdf-python.git
```
のように任意の言語のプラグインが存在しているか検索した後<br>
```bash
asdf plugin add python
```
としてプラグインを追加する<br>


### バージョンをインストールする場合
pythonを例にとると
```bash
asdf list all python 3
```
として、インストール可能なバージョンを検索し
```bash
asdf install python 3.9.18
```
としてインストールする<br>
anacondaなどのすでにパッケージ化された環境もasdfで管理できる(インストールできる)<br>

### バージョン管理の方法
:::note warn
~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というエディタは癖が強いため、初心者向けに今回のケースでの使用例を載せておく

1. まず、以下のコマンドでvimで.profileファイルを開く
    ```bash
    vim ~/.profile
    ```

2. 次に大文字の G を入力して(以下vimエディタの中では操作を行う際、断りがなければ(=コマンドの実行でなければ)エンターキーを押す必要はない)ファイルの一番下に移動する
3.  o を入力し新しい行を挿入してインサートモードに入る
4. ここまでくれば入力したい文字を書き込めるようになっているので、普通のエディタの感覚で必要なもの、今回なら<br>
    ```bash
    export PATH="${ASDF_DATA_DIR:-$HOME/.asdf}/shims:$PATH"
    ```
    を書き加える
4. 必要な変更が終わったらescキーを押してインサートモードから通常モードに切り替える
4. :wq と入力し(コロンも必要)エンターキーを押すことで変更を保存しvim終了できる





### 変数展開について
  - 所々出てきた　${ASDF_DATA_DIR:-$HOME/.asdf}　などの表記、これは変数展開というものらしい
    - ${parameter:-word}
      - paramaterが未定義かnullならその値はwordに置換される、ただしparameterへの代入は起こらない
    -  ${parameter:=word}
       -  上の代入有りバージョン
    -  ほかにもたくさん存在しており、bash(1)に記述があるそうだ
###  環境変数$PATHについて
   -  PATHに登録されているパスはコマンドが実行されたとき、そのコマンドを検索する際に使用される
   -  今回はPATHの先頭にasdfのパスを通したが、これはPATHは先頭から順に検索されるため、ほかの場所にすでにコマンドが存在していてもasdfで規定して環境のコマンドが優先されるようにするためだと思われる

## 蛇足
### ubuntuでmakepkgを使おうとした間抜けな話
#### ubuntuだとmakepkgを使用できない
  -  結論としてはmakepkgはpacmanに依存しており、ubuntuだとpacmanがおそらくパッケージマネージャー同士が干渉しないように使用できないようになっているため、makepkg自体使用できないということらしい
 - ubuntuでmakepkgを使おうとする間抜けはそうそう居ないだろうが、エラーの原因究明に丸1日以上かけたので第二の間抜けが生まれないようにエラー分含めここに書き残しておく、リファレンスのわからんところは読み飛ばすなよ…<br><br>
 - 以下経緯
     1.  Install asdfのrecommendedの欄のHomebrewはmacのパッケージマネージャーのことらしいな、まあこれは使えないな
     2. まあゆうてrecommendedって書いてあるし、もう一つのコマンドでいけるやろ
     3. 　　
          ```bash
          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
           ```

   は？？？？？？？？？     <br>
     4. 試行錯誤の結果makepkgはPacmanに依存していて、それが見つからなかったからエラーになったらしいということが分かった
     5. えっ、aptでpacman入れられるの…？？？？？ なら今度こそ行けるやろ！！！！
     6.  
     ```bash
    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):
     ```
    は？？？？？？？？？？？？？？？？？？？？       <br>
     調べた結果、pacmanはArch Linuxのパッケージマネージャーで～すubuntuだと使えませぇんwwww、ということらしい<br>
      そ　り　ゃ　そ　う　だ <br>　
### 最後に
何か訂正があればコメントしてくださると大変ありがたいです
またもし上手くいったら、いいねしていってくださるとうれしいです
途中何か躓いたらコメントしてくだされば私が暇なときに対応します

## 参考させていただいたサイト

https://asdf-vm.com/

https://zenn.dev/kyuki/articles/fee5ca53ee2d64

https://wiki.archlinux.jp/index.php/Makepkg#.E3.83.88.E3.83.A9.E3.83.96.E3.83.AB.E3.82.B7.E3.83.A5.E3.83.BC.E3.83.86.E3.82.A3.E3.83.B3.E3.82.B0

https://blog.desdelinux.net/ja/debianubuntu%E3%81%BE%E3%81%9F%E3%81%AFfedora%E3%81%AEpacman/

https://itiut.hatenablog.com/entry/2013/07/07/114143

https://qiita.com/t_nakayama0714/items/80b4c94de43643f4be51

https://qiita.com/Naggi-Goishi/items/2c49ea50602ea80bf015

https://www.tohoho-web.com/vim/index.html