elixir を Mac で使うなら asdf でバージョン管理しよう!


## 概要

先日参加させていただきました、Elixirのもくもく会で教わった内容となりますが、Macでの環境構築時のメモです。

現在のところ、Elixir　を使うのであれば、asdf を使うか DockerHub を使うかの２択のようです。他のインストール方法だと、バージョン等の問題でおすすめ出来ないようなお話でした。

ここでは、asdf を使った構築を書いていきます。

#### Homebrewとgitは入っている事が前提です。

- Mac 10.14.6 Mojave
- Homebrew 2.1.11
- git version 2.21.0 (Apple Git-122.2)
- bash, version 3.2.57(1)-release

#### 参考にしたサイト

https://asdf-vm.com/#/core-manage-asdf-vm

https://qiita.com/nishiuchikazuma/items/b9d319732ddb540fd990


## asdf のインストール

まず、asdf に必要なライブラリを入れていきます。

```
$ brew install coreutils automake autoconf openssl libyaml readline libxslt libtool unixodbc
```

asdf を Github より clone します。

```
$ git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.6.0
```

そして、パスを通しましょう。

```
$ echo -e '\n. $HOME/.asdf/asdf.sh' >> ~/.bash_profile
$ echo -e '\n. $HOME/.asdf/completions/asdf.bash' >> ~/.bash_profile
```

ここで忘れないように、`.bash_profile` の読み直しをして、通したパスを有効にします。

```
$ source .bash_profile
```

※上記のコマンドを忘れていると、つぎのコマンドが動きませんので、様子がおかしい場合は、ターミナルの再起動を行いましょう。

必要なasdfプラグインも入れておきます

```
$ asdf plugin-add erlang https://github.com/asdf-vm/asdf-erlang.git
$ asdf plugin-add elixir https://github.com/asdf-vm/asdf-elixir.git
```

ここまでで asdf の準備は整いました。

## Erlang のインストール

つぎは、 Elixir の母体となる Erlang を入れましょう。これがないと Elixir が動きません。

```
$ asdf list-all erlang
```
 でインストール可能なバージョンを確認します。

```
・
・
22.1.3
22.1.4
22.1.5
22.1.6
22.1.7
22.1.8
$ 
```

このような感じでざっと表示されます。

大体一番下の新しいバージョンを入れておけば良いようですので、

```
$ asdf install erlang [バージョン番号の新しいの]
```

上の結果の場合、

```
$ asdf install erlang 22.1.8
```

と書けば良い事になります。

ここで、JDK がインストールされていないと、

![](https://gyazo.com/7bbf3c0d8b2a432ecaf3f991607b1567.png)

このようなダイアログが出現します。

この時に反射的にOKを押さずに、「詳しい情報」をクリックして、JDKをインストールしましょう。

![](https://gyazo.com/20249bd65a028494f4c9183d6e773d1b.png)

ぽちっとボタンを押してインストールしましょう。

JAVAのインストールが終わると自動的に Erlang のインストールは再開されます。

結構時間が掛かる場合がありますが慌てず待ちます。

インストール出来たら確認しましょう。

```
$ asdf list erlang
```

このように打つと、インストール出来ているバージョンが全て表示されます。

上記の例でいうと、

```
$ asdf list erlang
  22.1.8
```

このようになります。


次に、asdf に 普段使う erlang のバージョンを指定します。

```
$ asdf global erlang [入れたバージョン]
```

となりますので、今回は

```
$ asdf global erlang 22.1.8
```

ですね。

## Elixir のインストール


全く同じ手順となりますが、続いて Elixir も入れていきます。

```
$ asdf list-all elixir
```

このとき、私の実行環境では、

```
・
・
1.9.3
1.9.3-otp-20
1.9.3-otp-21
1.9.3-otp-22
1.9.4
1.9.4-otp-20
1.9.4-otp-21
1.9.4-otp-22
master
master-otp-21
master-otp-22
16:44:~$ 
```

このように表示されました。

```
$ asdf install elixir [バージョン番号の新しいの]
```

先程と同様、このように書けますが、今回は、

```
1.9.4-otp-22
```

を入れます。どうやら、otp-22 というのが、Erlang とのマッチングに関わるのだと思います。結果、

```
$ asdf install elixir 1.9.4-otp-22
```

このようになります。今度はインストールに時間がほぼ掛かりません。

終わったら、インストール出来た確認です。

```
$ asdf list elixir
  1.9.2-otp-22
```

このように入れたバージョンが返ってくればOKです。

最後に、通常使う Elixir のバージョン指定をします。

```
$ asdf global elixir [入れたバージョン]
```

ですので、

```
$ asdf global elixir 1.9.2-otp-22
```

 このように指定すれば良いですね。

では、一応確認。

```
$ elixir -v
Erlang/OTP 22 [erts-10.5.6] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]

Elixir 1.9.4 (compiled with Erlang/OTP 22)
```

 そして、ここまで出来ると、 iex という対話型のプログラミングツールを使う事が出来ます。


```
$ iex
Erlang/OTP 22 [erts-10.5.6] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]

Interactive Elixir (1.9.4) - press Ctrl+C to exit (type h() ENTER for help)
 iex(1)> "hello"         
"hello"
iex(2)> 1 + 2
3
iex(3)> ["hello", "world"]
["hello", "world"]
```

 完了です。では楽しんでください！ 
気がつく事などございましたらご指摘いただけると幸いです。