asdf でよく使うコマンド ── それは asdf

https://qiita.com/advent-calendar/2021/nervesjp

2021/12/19(日)の回です。

# サマリ

::: note
使い方を忘れたときは、とにかく asdf とだけ実行してみるとよいです。
:::

これがこの記事のハイライトです。

# はじめに

世俗派関数型言語[^1] [Elixir](https://elixir-lang.org/)を楽しんでいますか:bangbang::bangbang::bangbang:
[Nerves](https://www.nerves-project.org/)を楽しんでいますか:bangbang::bangbang::bangbang:

[^1]: @kikuyuta 先生の「[世俗派関数型言語 Elixir を関数型言語風に使ってみたらやっぱり関数型言語みたいだった](https://qiita.com/kikuyuta/items/afa4c264720eb29d9760)」より。世間一般の普通の人でも難なく、ふんわりと知らない間に「ワタシ、関数型言語でプログラミングしちゃってました」そんな意味だとおもっています。[Elixir](https://elixir-lang.org/)はコワくないですよ〜。

[Nerves](https://www.nerves-project.org/)の環境構築では、[asdf](https://asdf-vm.com/)を使ってバージョン管理することがオススメされています。

https://hexdocs.pm/nerves/installation.html#all-platforms

ところで、`asdf`の使い方をみなさんは覚えていますか。
<font color="purple">$\huge{私は覚えていません!!!}$</font>

しっかり覚えていらっしゃる方は、「何をいまさら？」感満載でしょうが、私と同じように忘れッぽい人には「わかる〜」と響くのではないかとおもっています。



# まとめ

具体的にコマンド例つきでまとめます。

|No| 使用する場面 | コマンド例 | 説明 |
|:-|:-|:-|:-|
|1| 使い方を忘れたよ  | asdf  | ヘルプがみれる  |
|2| **いま**私は一体、どのバージョンを使っているのさ？| asdf current | Display current version set or being used for all packages|
|3| プラグインをアップデートする  | asdf plugin update --all  | Update all plugins to latest commit on default branch 全部やっときゃいいよ、きっと。 |
|4| インストールできるバージョンを知りたい  | asdf list all erlang   | `erlang`のところは`elixir`や`gleam`でもよいですよ。List all versions of a package and optionally filter the returned versions |
|5| インストール | asdf install elixir 1.13.1-otp-24 | Install a specific version of a package |
|6| プロジェクト内のバージョンを固定する |asdf local elixir 1.13.1-otp-24 | Set the package local version `./.tool-versions`に記録されます。ディレクトリを上にあがっていって一番最初にみつかった`.tool-versions`に従います。|
|7| 俺のマシン全体のデフォルトバージョンを固定する | asdf global elixir 1.13.1-otp-24 |Set the package global version `~/.tool-versions`に記録されます。|
|8| asdf自体をアップデートしたい(git cloneした) | asdf update | Update asdf to the latest stable release|
|9| asdf自体をアップデートしたい([Homebrew](https://brew.sh/index_ja)でインストールした) | brew upgrade asdf |Update asdf to the latest stable release |

# うしろに置いた「前置き」

はじめは「はじめに」のところに書いていたのですが、グダグダ長くなったので後ろに移動しました。

---

ところで、`asdf`の使い方をみなさんは覚えていますか。
<font color="purple">$\huge{私は覚えていません!!!}$</font>

しっかり覚えていらっしゃる方は、「何をいまさら？」感満載でしょうが、私と同じように忘れッぽい人には「わかる〜」と響くのではないかとおもっています。



この記事は、自分のために書いています。
すでにおまとめされている方もいらっしゃってN番煎じなのだとおもいます。
人類の歴史という長い年月を川の流れにたとえられることがあります。
その河畔に佇んでいると想像してみてください。
そもそも全く０からのオリジナルを作った、書くことができるなんて人はごく一握りもいないはずです。
N番煎じこそが人類の歴史そのものであり、発展への礎です。

そして、きっと誰かの役に立つと信じています。
でもその「誰かの役に立つであろう」というところは、私の中ではあまり大きなウエイトは占めていません。
自分のために書いています。
私の心情を吐露するとだいたいどの記事も上記のような気持ちで書いております。

ただここはQiitaですので、『[コミュニティガイドライン](https://help.qiita.com/ja/articles/qiita-community-guideline)』の「**一般的な名詞や用語、表現を用いて、自分以外の人が読んでも理解できる記事を書くことを心がけましょう**」には沿っているつもりです。
[Elixir](https://elixir-lang.org/)界隈では、[asdf](https://asdf-vm.com/)を使うことは一般的です。
この記事にオリジナリティがあるとすれば、コマンド例にて、[Elixir](https://elixir-lang.org/)、Erlangを例に使っていることです。
前置きが長くなりました。

---

**以上を後ろにもってきました。**

# そもそも What is [asdf](https://asdf-vm.com/)?

> Manage multiple runtime versions with a single CLI tool

https://github.com/asdf-vm/asdf/blob/aafe1e5304c2d2a026831976c18faa6fb48d25bc/ballad-of-asdf.md

バラードがGitHubに掲載されています。

```
Ballad of asdf

Once upon a time there was a programming language
There were many versions of it
So people wrote a version manager for it
To switch between versions for projects
Different, old, new.

Then there came more programming languages
So there came more version managers
And many commands for them

I installed a lot of them
I learnt a lot of commands

Then I said, just one more version manager
Which I will write instead

So, there came another version manager
asdf version manager - https://github.com/HashNuke/asdf

A version manager so extendable
for which anyone can create a plugin
To support their favourite language
No more installing more version managers
Or learning more commands
```

## 超意訳

プログラミング言語がたくさんありまして、プログラミング言語にはたくさんのバージョンがあって、プログラミング言語ごとにバージョン管理ツールがあって、そのどれもがちょっとずつ使い方が違うから覚えるのがたいへんだ〜　みたいなことを嘆き、**嘆くだけではなく**[asdf](https://asdf-vm.com/)というツールが統一するのだ〜　ということを力強く宣言されているのだとおもっています。

たぶん、ジョン・レノンのImagineの世界観なのだとおもいます。

> above us only sky
> the world will be as one



# Wrapping up :lgtm::lgtm::lgtm::lgtm::lgtm: 




::: note
使い方を忘れたときは、とにかく asdf とだけ実行してみるとよいです。
:::

あれこれ書きましたが、結局、畢竟、詰まるところ、これが一丁目一番地です。

**asdf でよく使うコマンド ── それは asdf**