Erlang 〜kerl,Rebar3,IntelliJ IDEAによる開発環境の構築〜

「[すごいErlangゆかいに学ぼう!](http://amzn.to/2sBUZA4)」を読み始めた。
タイトルの通り面白そうな本なのだが、環境構築があまり書いてなかったので、自分なりにまとめてみた。

ご指摘どんどんしていただけると助かりますm(_ _)m

# 環境

* Mac OS X EI Capitan
* IntelliJ IDEA 2017.1.4

# Erlang

まずは何はなくともErlangをインストールしないことには始まらない。
ただ、Rubyであれば[rbenv](https://github.com/rbenv/rbenv),Nodeでいえば[nvm](https://github.com/creationix/nvm)のようにErlangの複数バージョンを管理するためのツールが存在するはず。
自分が調べた限りだが、[erln8](http://erln8.github.io/erln8/)、[kerl](https://github.com/kerl/kerl)があるようで、前者は`No Maintenance Intended`となっていて、kerlのほうが良さそう。

## [kerl](https://github.com/kerl/kerl)

### kerlインストール
`homebrew`でインストールできる。

```bash
$ brew install kerl
```

### Erlang configオプションのデフォルト指定
Erlang OTPのビルドに使うデフォルトのconfigオプションは ~/.kerlrc に書いておくことができる。

```bash
$ echo 'KERL_CONFIGURE_OPTIONS="--disable-hipe --enable-smp-support --enable-threads --enable-kernel-poll" ' > ~/.kerlrc
```

（上記のパラメータがどんな意味を持つかは今後、勉強を進めて理解を深めていこうと思う。）

## kerlによる[Erlang](https://www.erlang.org/)インストール
リリースされているErlangのバージョンは以下のコマンドで確認することができる。

```bash
$ kerl list releases
R10B-0 R10B-10 R10B-1a R10B-2 R10B-3 R10B-4 R10B-5 R10B-6 R10B-7 R10B-8 R10B-9 R11B-0 R11B-1 R11B-2 R11B-3 R11B-4 R11B-5 R12B-0 R12B-1 R12B-2 R12B-3 R12B-4 R12B-5 R13A R13B01 R13B02-1 R13B02 R13B03 R13B04 R13B R14A R14B01 R14B02 R14B03 R14B04 R14B R14B_erts-5.8.1.1 R15B01 R15B02 R15B02_with_MSVCR100_installer_fix R15B03-1 R15B03 R15B R16A_RELEASE_CANDIDATE R16B01 R16B02 R16B03-1 R16B03 R16B 17.0-rc1 17.0-rc2 17.0 17.1 17.3 17.4 17.5 18.0 18.1 18.2 18.2.1 18.3 19.0 19.1 19.2 19.3 20.0
```
`R16`までと`17.0`以降でバージョンの形式が変わっているのが面白い。（何があったのか気になるが…）
ついでに、[すごいErlangゆかいに学ぼう!](http://amzn.to/2sBUZA4)は2014/7/4発売で`R15B`なので、そこからメジャーバージョンが５つも上がっていることになる。
Erlangの開発スピードは非常に早い！

その中からバージョンを選び、ビルドする。
このビルドにはけっこう時間がかかる（たぶん１０分〜１５分ぐらい）ので、ご注意を。

```bash
$ kerl build 19.3 19.3
```

つぎにインストールと有効化を実施する。

```bash
$ kerl install 19.3 ~/erlang/19.3
$ . ~/erlang/19.3/activate
```

これでErlangが使えるようになったと思うので、試しに`erl`と打ってみれば有効になっているか、指定したバージョンで動いているか確認することができる。

```bash
$ erl
Erlang/OTP 19 [erts-8.3] [source] [64-bit] [smp:4:4] [async-threads:10] [kernel-poll:false]

Eshell V8.3  (abort with ^G)
1> 
```

# [Rebar3](https://github.com/erlang/rebar3)

「[すごいErlangゆかいに学ぼう!](http://amzn.to/2sBUZA4)」では、rebarが紹介されている。
またIntelliJの[Erlangセットアップページ](https://www.jetbrains.com/help/idea/getting-started-with-erlang.html)でもrebarによる設定が解説されている。

しかしながら、[RebarのGitHub](https://github.com/rebar/rebar)では、rebar自体はDeprecatedっていること、そして[Rebar3](https://github.com/erlang/rebar3)を推奨することが書かれている。

なぜRebar3が必要になったか、についてはRebar3の[ReadMe](https://github.com/erlang/rebar3/blob/master/README.md)にはこのように書かれている。

> Rebar3 is the spiritual successor to rebar 2.x, which was the first usable build tool for Erlang that ended up seeing widespread community adoption. It however had several shortcomings that made it difficult to use with larger projects or with teams with users new to Erlang.

自分のあっさり解釈では、rebarは限界がきており、rebarの後継のRebar3を新しく作った、ということだと思う。

そのため、ここではRebar3のインストール方法についてまとめる。

## Rebar3インストール

```bash
$ wget https://s3.amazonaws.com/rebar3/rebar3 && chmod +x rebar3
$ ./rebar3 local install
$ echo 'export PATH=$PATH:~/.cache/rebar3/bin' >> ~/.bash_profile
$ source ~/.bash_profile
```

インストールが完了したらコマンドが正しく表示されるか確認する。

```bash
$ rebar3 --version
rebar 3.4.1 on Erlang/OTP 19 Erts 8.3
```

# [IntelliJ IDEA Erlang Plugin](https://github.com/ignatov/intellij-erlang)設定

自分はIntelliJユーザなので、ErlangについてもIntelliJで動くように設定してみた。
IntelliJの[Erlangセットアップページ](https://www.jetbrains.com/help/idea/getting-started-with-erlang.html)を参考にした。

まずはIntelliJのErlangプラグインのインストール。
Preferences -> Plugin で*Erlang*と入力すればプラグインを探すことができる。あとはそのプラグインをインストールすればよい。

デフォルトのプロジェクト構成を設定する必要がある。
File -> Other Settings -> Default Project Structure を開き、Erlang SKDを追加する。

<img src="https://qiita-image-store.s3.amazonaws.com/0/110216/c0f494e3-66f0-7ad5-085d-9a824b175597.png" width=60%>

Preferences -> Other Settings → Erlang External Toolsを開き、Rebar3の設定を行う。

<img src="https://qiita-image-store.s3.amazonaws.com/0/110216/cfd0374e-6e7d-ac92-5fd8-2435816c48ad.png" width=60%>

問題なければ新規プロジェクトでErlangを選択でき、Erlangの開発ができるようになっている。

# 所感

「[すごいErlangゆかいに学ぼう!](http://amzn.to/2sBUZA4)」からけっこうErlangがバージョンアップしていること、
そしてrebar -> Rebar3に移り変わっていること、
などから、Erlangはコミュニティが活発な言語という印象を受けた。

最新にキャッチアップしていくためにも、本を読み終わっても引き続き、
公式ページやコミュニティに参加して、最新の情報を勉強していく必要があると感じた。

Erlangの勉強は始まったばかりで、まだまだ終わらない！