見出し画像

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初心者なので以下を進めていく予定です。ご指摘などがあれば是非コメントなどで教えて頂けると幸いです。

参考資料


この記事が気に入ったらサポートをしてみませんか?