Arch Linux のマシンにプログラミング言語 Elixir をインストールします。
Elixir をインストールする色んな方法
色んなやり方があります。
ここではバージョン管理ツール asdf を使用して Elixir をインストールします。
asdf のインストール
基本的に asdf の Getting Started ドキュメントの通りです。
curl
と git
がまだインストールされてない場合は、それらをインストールします。
sudo pacman -S curl git
--branch
オプションでバージョンを指定してインストールします。
執筆時点の最新版は v0.13.1
でした。
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.13.1
実はバージョンはあまり気にしなくても大丈夫です。以下のコマンドでいつでもアップデートできます。
asdf update
あと、ターミナルの起動時に asdf のスクリプトが実行されるようにしたいのですが、これはお使いのシェルにより異なりますので、ドキュメントをご参照ください。以下は bash の一例です。
. "$HOME/.asdf/asdf.sh"
Erlang のインストール
Elixir は Erlang VM 上で動作するので Elixir をインストールする前に Erlang がインストールされている必要があります。
まず必要なパッケージをインストールします。
sudo pacman -S base-devel ncurses glu mesa wxwidgets-gtk3 libpng libssh unixodbc libxslt fop
asdf に Erlang プラグイン を追加。
asdf plugin add erlang
erlang の最新版をインストール。
asdf install erlang latest
erlang の最新版を使うように設定。
asdf global erlang latest
Elixir のインストール
erlang のインストールと同様の手順です。 Elixir プラグインを利用します。
sudo pacman -S unzip
asdf plugin add elixir
asdf install elixir latest
asdf global elixir latest
余談ですが、Elixir 言語を使ってサーバーの費用を $2 Million/年 節約できたというウワサがあります。
インストールされた内容を確認
asdf list
asdf current
対話シェル(IEx)を試してみる
iex
コマンドで Elixir 対話シェル(IEx)を起動します。
iex
適当に Elixir を楽しみます。
Mix.install([{:progress_bar, "~> 3.0"}])
my_life = fn ->
Enum.each Enum.concat([99..44, 44..77, 77..0]), fn i ->
format = [
bar: " ",
bar_color: [IO.ANSI.yellow_background],
blank_color: [IO.ANSI.red_background],
]
ProgressBar.render(i, 100, format)
Process.sleep(20)
end
IO.puts("")
:ko
end
my_life.()
全部一氣にインストールしてみる
sudo pacman -S curl git
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.13.1
asdf update
sudo pacman -S base-devel ncurses glu mesa wxwidgets-gtk3 libpng libssh unixodbc libxslt fop unzip
plugin_names=(erlang elixir)
for plugin_name in "${plugin_names[@]}"; do
asdf plugin add "$plugin_name"
asdf install "$plugin_name" latest
asdf global "$plugin_name" latest
done
インストールに失敗した場合
正しい手順でやっていてうまくいかないときは、インストールし直すとうまく行くことが多いです。
その場合、順番が大事です。システムで必要なパッケージ、Erlang、Elixirの順にインストールするのがコツです。