ネット上のドキュメントが色々と古くて苦労させられたので、まとめておきます。
前提:Debian 12 (bookworm) の公式で提供されているElixirは古い
ちょっと古いんです。公式では1.14系のElixirが提供されています。
現在の安定リリースはv1.18系なので、この手の言語で4世代前は、やっぱりちょっと古いよねって感じがします。
これから新しくElixirを触ろうと思ったときに、「パッチバージョンが一個前です」とかだったら公式リポジトリにあるものを使う気になると思いますが、流石にマイナーバージョンで4つ前のものは使う気になれません。
Elixirの公式サイトで提供されいてる方法は通用しない
日本語に訳されているサイトで提供されている方法はとても古く、もう使えるものではありません。
では本家の方はどうかというと、Ubuntu向けの方法しか提供されていません。
多くの場合、Ubuntu向けの方法を応用すればDebianにも適用できるんですが、こればっかりはうまくいきません。(うまくいかなかったので、やっぱりUbuntu向けの方法なんだなという事で深追いはしていません)
ネット上を彷徨う
久しぶりに環境構築で困ってネット上を彷徨うというのをやりました。
いろいろキーワードを変えながら検索した結果、Elixirのフォーラムで「Debian 12にElixir 1.16を入れる方法」という記事を見つけました。
動画で色々語られているんですが、この動画の内容はどうもイマイチです。
それよりは、コメント欄で言及されている asdf
というツールを使うのが良さそうだという事がわかったので、さっそくそれで入れる方法を試すことにしました。
asdf に関するネット上の情報が古い
またか…という感じですが、古いんです。
現行の asdf
は v0.18
ですが、ネット上の解説記事で主流なのは v0.16
で、コマンドのシンタックスが結構違います。それはもう、困っちゃうぐらいに。
Geminiに頼って結論に達する
という訳で本題です。
Geminiに頼りながら進めていったところ、Geminiが教えてくれた答えそのものでは全然ダメだったんですが、Geminiが教えてくれた内容を整理した結果、こういう結論に至りました。
$ wget https://github.com/asdf-vm/asdf/releases/download/v0.18.0/asdf-v0.18.0-linux-amd64.tar.gz . # asdfをダウンロード
$ tar xf asdf-v0.18.0-linux-amd64.tar.gz # asdf のパッケージを展開(シングルバイナリが出てきます)
$ cp -p asdf ~/bin # asdfコマンドを、適当にパスの通ったディレクトリにコピーする(今回は~/binとしました)
$ echo 'export PATH="${ASDF_DATA_DIR:-$HOME/.asdf}/shims:$PATH"' >> ~/.bash_profile # asdf で導入されたツール類のパスを環境変数に追加
$ source ~/.bash_profile # 設定した環境変数を読み出す
$ sudo apt install -y curl git build-essential autoconf m4 libncurses5-dev libwxgtk3.2-dev libgl1-mesa-dev l
ibglu1-mesa-dev libpng-dev libssh-dev unixodbc-dev xsltproc fop libxml2-utils libssl-dev # erlangのビルドに必要なパッケージ類をインストール
$ asdf plugin add erlang # Erlang をインストール対象に追加
$ asdf install erlang 28.0 # Erlang をインストール(今回は 28.0 を入れました)
$ asdf set --home erlang 28.0 # global な(homeディレクトリ配下の) Erlangバージョンを設定
$ asdf plugin add elixir # Elixir をインストール対象に追加
$ asdf install elixir 1.18.4 # Elixir 1.18.4 をインストール
$ elixir -v # バージョンを確認
Erlang/OTP 28 [erts-16.0] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [jit:ns]
Elixir 1.18.4 (compiled with Erlang/OTP 25)
今回インストールした pre-build
バイナリは Erlang/OTP 25 だったので、インストールするErlangは25.0でも良かったかもしれません。
とりあえず、これで elixir
も iex
も mix
も動くようになったので、ぼちぼち触っていこうと思います。