KerlとKiexを使ってErlangとElixirの環境構築とバージョン管理の方法
今回はErlangとElixirのバージョン管理ツールであるKerlとKiexを使用しての、ErlangとElixirの環境構築方法について記事でまとめました。
最近はElixirの特徴やおもしろさなどを紹介されたこともあり、Elixirを少しだけ勉強していますが、ある程度落ち着いたら本格的に第二言語?として始めたいと考えています。
Elixirはpiacereさんのコミニティ活動のこともあり、特に福岡で盛り上がりを見せているそうです。piacereさんが作った以下の資料も読んでElixirについて勉強しています。
Elixirとは?
この記事を見に来た方には不要かもしれませんが、一応Elixirとは何かについて説明します。
ElixirはErlangのVM上で動作する関数型のプログラミング言語です。特徴としては、Erlang VM(仮想環境上)で動作することで、大量の並行処理を行うアプリケーションなどを実現できます。
構文としてはRubyに近く、近年ではほぼ当たり前となったプログラミング言語のモダンな機能の一つであるパッケージマネージャやビルドツールなども含まれています。
定番のElixirの環境構築の方法
Elixirを動作させるには、当然ですがErlangも必要になります。インストール方法に関しては、各OSがパッケージを配布しているのもあり、パッケージマネージャなどを使ってインストールは可能です。
各OSでのインストール方法はElixirの公式が載せています。
しかし、どの言語でもそうですが、パッケージマネージャなどで配布しているのは安定版などで、若干バージョンが古かったりすることもあります。Python辺りに関してはパッケージマネージャで配布しているのは結構古いバージョンです。
そこで、Pythonでいうpyenv、Rubyでいうrbenvのような、気軽にバージョンを変更できるバージョン管理ツールが無いかと探していたら、kerlとkiexというバージョン管理ツールについての資料を見かけました。
Erlangのバージョン管理ツールであるkerlと、Elixirのバージョン管理ツールであるkiexでの環境構築方法が日本語での資料があまり無かったため、実際に英語の記事などを見ながら試してみました。
インストールに必要なパッケージを整える
自分の環境はUbuntuなので、Ubuntuに必要なパッケージを入れます。各自で自分のOSで必要なパッケージを入れてください。
$ cat /etc/os-release
VERSION="18.04.2 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.2 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
以下のコマンドでUbuntuで必要なパッケージを入れます。CentOSやArchなどで必要なパッケージをこちらに載っています。
$ sudo apt-get update
$ sudo apt-get install build-essential libncurses5-dev openssl libssl-dev
$ sudo apt-get install curl git-core
Kerlのインストール
まずはErlangの環境を整えるためにも、Erlangのversion管理ツールであるKerlをインストールします。以下のコマンドでKerlをインストールして、/usr/local/binに入れます。
$ sudo curl https://raw.githubusercontent.com/kerl/kerl/master/kerl --output /usr/local/bin/kerl
$ sudo chmod a+x /usr/local/bin/kerl
$ kerl
kerl: build and install Erlang/OTP
usage: /usr/local/bin/kerl <command> [options ...]
<command> Command to be executed
Valid commands are:
build Build specified release or git repository
install Install the specified release at the given location
deploy Deploy the specified installation to the given host and location
update Update the list of available releases from your source provider
list List releases, builds and installations
delete Delete builds and installations
install-docsh Install erl shell documentation access extension - docsh
path Print the path of a given installation
active Print the path of the active installation
plt Print Dialyzer PLT path for the active installation
status Print available builds and installations
prompt Print a string suitable for insertion in prompt
cleanup Remove compilation artifacts (use after installation)
version Print current version (current: 1.8.5)
以下でインストールできるErlangのバージョンが確認できます。
$ kerl list releases
R10B-0
R10B-10
.
.
.
.
.
21.0
21.1
21.2
21.3
22.0-rc1
22.0-rc2
22.0-rc3
22.0
Run '/usr/local/bin/kerl update releases' to update this list from erlang.org
2019/05/29では最新のバージョンは22.0ですので、バージョン22.0のErlangを導入します。
まずは以下のコマンドのようにビルドをする必要があります。二番目の引数でビルド名を付けることができますが、省略すると自動で一番目の引数であるバージョン名と同じになります。ちなみにビルドなのでそれなりの時間を要します。
$ kerl build 22.0 22.0
Verifying archive checksum...
.
.
.
.
* xsltproc is missing.
* fop is missing.
* xmllint is missing.
* The documentation can not be built.
Erlang/OTP 22.0 (22.0) has been successfully built
successfully builtと出れば成功です。ちなみに冒頭で説明したように、ビルドに必要なパッケージ類を導入していなければ途中でエラーを起こすため、エラーが出た場合は必要なパッケージ類などを整えてから再度ビルドをしてください。
ちなみに以下のコマンドでビルド済みのバージョンが表示されます。
$ kerl list builds
22.0,22.0
ビルドが済んだので、Erlang本体をインストールします。二番目の引数は必須で、Erlangのインストール先のディレクトリを指定します。「~/kerl/22.0」と指定しているため、「$HOME/kerl/22.0」にErlangがインストールされます。
こちらの公式のGitHubでも、インストール方法の解説部分で、インストール先に~/kerl/{version}と表記しているため、指定先はこれで問題ないと思います。各自でインストールしたい先のディレクトリがある場合はそちらを指定してください。
$ kerl install 22.0 ~/kerl/22.0
Installing Erlang/OTP R15B03-1 (r15b03-1) in ~/kerl/22.0...
You can activate this installation running the following command:
. ~/kerl/22.0/activate
Later on, you can leave the installation typing:
kerl_deactivate
インストールが終了したら、以下のコマンドでインストール済みのErlangが表示されます。
$ kerl list installations
22.0 ~/kerl/22.0
Erlangのインストールが終了したら、Erlangをどこでも呼び出せるようにします。以下のコマンドでErlangを呼び出せます。
$ cd ~/workspace
$ . ~/kerl/22.0/activate
erlコマンドでErlangのインタラクティブシェルが立ち上がります。
$ erl
Erlang/OTP 22 [erts-10.4] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]
Eshell V10.4 (abort with ^G)
1>
ただし、上記のやり方ではシェルを閉じると、再度「. ~/kerl/22.0/activate」などを叩く必要があるため、「.bashrc」などに記述してシェルの起動時と同時にErlangを立ち上げられるようにしておきます。
source $HOME/kerl/22.0/activate
ちなみにcshやfish用も用意されています。自分はfishを使用しているため、「~/.config/fish/config.fish」に以下を記述しています。
# ~/.config/fish/config.fish
source $HOME/kerl/22.0/activate.fish
Kiexのインストール
次にElixirの環境を整えます。Elixirのversion管理ツールであるKiexをインストールします。以下を実行してください。
curl -sSL https://raw.githubusercontent.com/taylor/kiex/master/install | bash -s
.bashrcなどに以下を記述してください。これでkiexをコマンドから呼び出せるようになります。
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
.
.
.
test -s "$HOME/.kiex/scripts/kiex" && source "$HOME/.kiex/scripts/kiex"
自分のようなfish環境下では~/.config/fish/config.fishに以下を記述します。
test -s "$HOME/.kiex/scripts/kiex.fish"; and source "$HOME/.kiex/scripts/kiex.fish"
以下のように表示されればkiexの導入は成功です。
$ kiex
kiex commands:
list - shows currently installed Elixirs
list known - shows available Elixir releases
list branches - shows available Elixir branches
install <version> - installs the given release version
uninstall <version> - uninstalls the given release version
alias <version> <alias> - creates an alias for the given version
unalias <alias> - removes an alias
use <version> [--default] - uses the given version for this shell
shell <version> - uses the given version for this shell
default <version> - sets the default version to be used
selfupdate - updates kiex itself
implode - removes kiex and all installed Elixirs
reset - resets default Elixir version to null
以下でインストール可能なバージョンの一覧が表示できます。2019/5/29の段階では最新版は1.8.2なので、最新版の1.8.2をインストールします。
$ kiex list known
Getting the available releases from https://github.com/elixir-lang/elixir/releases
Known Elixir releases:
0.7.2
0.8.0
0.8.1
0.8.2
0.8.3
.
.
.
.
.
.
1.8.0
1.8.0-rc.0
1.8.0-rc.1
1.8.1
1.8.2
以下のコマンドでElixirのバージョンを指定してのインストールが始まります。
$ kiex install 1.8.2
Downloading elixir version 1.8.2
Installing elixir version 1.8.2
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
以下のコマンドでインストールされたelixirの一覧が見れます。elixir-1.8.2がインストールされていれば成功です。
「kiex use <version>」で使用するElixirのバージョンを指定することができます。
$ kiex list
kiex elixirs
elixir-1.8.2
# Default elixir not set. Try 'kiex default <version>'.
# => - current
# =* - current && default
# * - default
$ kiex use 1.8.2
To switch elixir versions for your current shell run:
source $HOME/.kiex/elixirs/.elixir-1.8.2.env.fish
「To switch elixir versions for your current shell run」と表示されている通り、一度下に表示されているコマンドを叩く必要があるみたいです。
$ source $HOME/.kiex/elixirs/.elixir-1.8.2.env.fish
以下の表示されればElixirのインストールが成功です。iexコマンドでelixirのインタラクティブシェルが立ち上げられます。
$ elixir --version
Erlang/OTP 22 [erts-10.4] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]
Elixir 1.8.2 (compiled with Erlang/OTP 22)
$ iex
Erlang/OTP 22 [erts-10.4] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]
Interactive Elixir (1.8.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)>
これでErlangとElixirの両方の環境が揃いました。試しにインタラクティブシェルで簡単な操作を試せます。
$ iex
Erlang/OTP 22 [erts-10.4] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]
Interactive Elixir (1.8.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> 1+1
2
iex(2)> 3-1
2
iex(3)>
まとめ
通常のやり方以外のElixirの環境構築方法についてまとめました。QiitaにはKerlとKiexの両方を載せた環境構築方法が無かったのと、日本語の記事はあまり出回っていませんでした。
自分もまだまだElixir初心者なので以下を進めていく予定です。ご指摘などがあれば是非コメントなどで教えて頂けると幸いです。
参考資料
この記事が気に入ったらサポートをしてみませんか?