kokuraexラジオhttps://fukuokaex.connpass.com/event/245562/のTwitterスペースで聴いた話。
asdfで、Stable Version を扱う「latest」コマンドが追加されているとのこと。*1
少し気になったので、ちょっと試してみた。
昨日の #kokuraex ラジオで話題に出ていた
— みずりゅ@技術書典12で「Elixirへのいざない ネイティブアプリを錬金しよう」を頒布 (@MzRyuKa) 2022年4月27日
「asdf latest」ってこの機能かな?
最新版がインストールされているかどうかが、
確かにわかる。
※rubyのバージョンがちょっと気になるが...
試しに「missing」だったgleamの最新(0.21.0)をインストールしたら、「installed」に変わった。 pic.twitter.com/POwysleGpf
備忘録として記録しておきます。
概要
「asdf latest」コマンドは、asdfのplug-inでインストールした各言語の「Latest Stable Version(最新の安定版)」がどのバージョンか確認するためのコマンドです。
https://asdf-vm.com/manage/versions.html#show-latest-stable-version
ヘルプを見ると、以下のように書かれてました。
asdf latest <name> [<version>] Show latest stable version of a package
特定の言語名(=パッケージ名)を指定すると、その言語の最新の安定版のバージョンを教えてくれます。
例えば、2022/04/29の現時点(以降、「現時点」と表記)で、「elixir」を指定してasdf latestを実行してみます。
すると、「1.13.4-otp-24」を返してきました。
$asdf latest elixir 1.13.4-otp-24
また、言語名と一緒にバージョンを指定すると、そのバージョンの最新の安定版を返してくれます。
現時点のelixirの最新の安定バージョンは1.13ですから、こちらを指定して試してみます。
すると、バージョン指定なし時と同じように、「1.13.4-otp-24」を返してきました。
では、メジャーバージョンのみでは?
こちらのケースでも、やはり「1.13.4-otp-24」を返してきました。
$asdf latest elixir 1.13 1.13.4-otp-24 $asdf latest elixir 1 1.13.4-otp-24
それでは、elixirの一つ前のバージョン「1.12」を指定して試してみます。
すると、v1.12での最新「1.12.3-otp-24」を返してくれました。
$asdf latest elixir 1.12 1.12.3-otp-24
allオプション
「asdf latest」コマンドには、「--all」オプションがあります。
「--all」をつけて実行すると、インストールされている全ての言語を対象にして、最新の安定版がインストールされているか*2がチェックされます。
ヘルプでは、以下のように書かれています。
asdf latest --all Show latest stable version of all the packages and if they are installed
私の環境では、「elixir」「erlang」「gleam」「nodejs」「rebar」「ruby」をasdfでインストールしています。そのため、以下のように各言語のバージョンが表示されていました。
gleamとrebarについては最新の安定版が、それ以外については安定版がインストールされていないと表示されました。
elixirについては、上記でみてきたバージョンとは違った名称(main-otp-24)で書かれています。
現時点では「main=1.13.4」なので、実質的に同じもののはずですが、扱いは別物のようです。(後述のインストールの項目を参照)
$asdf latest --all elixir main-otp-24 missing erlang 24.3.3 missing gleam 0.21.0 installed nodejs lts missing rebar 3.18.0 installed ruby truffleruby+graalvm-22.0.0.2 missing $
最新の安定版のインストール
asdf install時に「latest」を指定することで、「Latest Stable Version」をインストールできます。
https://asdf-vm.com/manage/versions.html#install-latest-stable-version
ヘルプには、以下のように記載されています。
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
DeepL本訳:
パッケージの最新の安定版をインストールします。
パッケージ,あるいはオプションのバージョンで始まる最新の安定版をインストールします。
では、バージョン指定して、latestをインストールしてみます。
私の環境だと、ちょうどelixirの最新安定版である「1.13.4-otp-24」がインストールされていないので、これが入るように、versionを1.13に指定して実行してみます。
まず、今の私の環境にインストールされているのは以下。
最新の「1.13.4-otp-24」はインストールされていません。
$asdf list elixir 1.13 1.13.1-otp-24 1.13.3-otp-24
「latest:1.13」を指定して、asdf installを実行。
$asdf install elixir latest:1.13 ==> Checking whether specified Elixir release exists... ==> Downloading 1.13.4-otp-24 to /Users/pathto/.asdf/downloads/elixir/1.13.4-otp-24/elixir-precompiled-1.13.4-otp-24.zip % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 6237k 100 6237k 0 0 349k 0 0:00:17 0:00:17 --:--:-- 422k ==> Copying release into place
再確認してみると、最新の「1.13.4-otp-24」が、インストールされていました。
$asdf list elixir 1.13 1.13.1-otp-24 1.13.3-otp-24 1.13.4-otp-24
ちょっと気になって、「asdf latest --all」を実行してみました。
すると...
$asdf latest --all elixir main-otp-24 missing 〜(以下略)〜
...おや?
「main-otp-24」と「1.13.4-otp-24」は違うもの扱いのようです。
まとめ
asdfでインストールする際には、原則特定のバージョンを明示してインストールすることが多いので、インストールでは使うことがなさそうだなとは思いました。
反面、バージョン指定をしたくないなら、こちらで利用するのもありかも。