[Elixir]をこれから学ぶ人に向けてPhoenix v1.3とv1.4を同時並行で触れる環境構築

この記事は、[「fukuoka.ex Elixir／Phoenix Advent Calendar 2018」](https://qiita.com/advent-calendar/2018/fukuokaex)の20日目になります。

昨日は、[@piacere_ex](https://qiita.com/piacere_ex)さんの[BASIC以来、35年間プログラミングしてないIT企業社長が、ElixirでWebアプリを作った](https://qiita.com/piacere_ex/items/59bf9cb86d77a8857672)でした。
本日は、ElixirとErlangバージョン管理の話しです。

## この記事の構成
1. 記事を書いた動機という名のポエム
2. 記事の対象OS
3. asdfのインストール
4. asdf Erlang & Elixir のプラグインをインストール
5. バージョン違いの環境の準備
6. ①　Phoenix v1.3の環境準備
7. HEXのインストール
8. Phoenix Frameworkをインストール
9. ② Phoenix v1.4の環境準備
10. 最後に

## 記事を書いた動機という名のポエム
以下、しばらくはポエムになりますので、本題を早く見たい方は飛ばしてください。w

最近、Elixirにハマってる[YOSUKENAKA.me](https://www.yosukenakao.me)です。

という事で、最近は知り合いのママさんや高校生にElixir良いぜ！一緒に学ぼうぜ！と焚き付けて、Elixirすげーとか興奮しながら勉強会してますw

そんな事を、Twitterで興奮気味につぶやいていたら、ご縁あって、fukuoka.exに参加させて頂いてます。来年は、Elixirの修行をしに、福岡行こうと思います。

そして、先日の[fukuoka.ex#17：Elixir実践テクニック公開します② ](https://fukuokaex.connpass.com/event/112371/)のトラックAで紹介された[Webサービスバックエンドライブラリー　Materia](https://qiita.com/tuchiro/items/eb0c5e9a7a1ce67cf1e3)というライブラリーが、今ちょうど作っていた認証系を既に簡単に揃えているというので、これは開発の短縮化できるじゃない！

ゲームで言うなら、チートですね。では、早速導入しようと思いましたが、僕の環境では使えませんでした。（T T)どうやら、以下の環境ではまだ対応してないようです。

```
Hex:    0.18.2
Elixir: 1.7.4
OTP:    21.1.4
```
上記に加えて、Phoenixフレームワークもv1.4の状態
かといって、v1.4もbrunchからWebpackに変更という事もあって、こっちも学習したいしなぁ。

という状況です。そこで、バージョン違いを混在させて、Phoenix Framework　v1.3とv1.4をPCに混在した形で準備したいと思います。

## 記事の対象OS
mac OSX環境での構築について書いてます。

## asdfのインストール

asdfの初期導入は、こちらの記事が参考になりました。
[Elixirのバージョン管理環境をasdfを使って作った](https://qiita.com/nishiuchikazuma/items/b9d319732ddb540fd990)

そのため、解説は上記の記事を参考にください。
ここでは、簡単に手順だけ、記載したいと思います。

1. 既にElixirをインストールして環境構築済みの方は、一度削除します。これから始める方は、この作業は不要になります。

```
$ brew uninstall --force erlang elixir
```

2. ここからは、[asdf](https://github.com/asdf-vm/asdf/blob/master/README.md)のgithubのREADME通りに進めます。

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

$ git clone https://github.com/asdf-vm/asdf.git ~/.asdf

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

## asdf Erlang & Elixir のプラグインをインストール

ターミナルを再起動して、次のコマンドを打ちます。

```
$ asdf plugin-add erlang
$ asdf plugin-add elixir
```

```asdf plugin-list```と打って、elixirやerlangが表示されれば成功です。

```
$ asdf plugin-list
elixir
erlang
```

## バージョン違いの環境の準備
さて、いよいよ、erlangとelixirの２つの環境を準備したいと思います。
今回は、Materiaを導入できるバージョンの環境(Phoenix v1.3）と、新しいPhoenix v1.4が動く環境を２つ準備したいと思います。

Materiaの環境は[こちら](https://qiita.com/tuchiro/items/ee6fdf487665b9789540)の記事を見ると以下のバージョンが前提のようですので、その構成を準備します。

```
Hex:    0.18.2
Elixir: 1.6.1
OTP:    20.2.4
```
まず、初めにフォルダ別で管理したいので、次のフォルダを作成しました。
※フォルダ名は、自分の管理しやすい名前で準備して大丈夫です。僕は以下のようにしました。

```
$ mkdir v1.6.1elixir
$ mkdir v1.7.4elixir
```

## ①　Phoenix v1.3の環境準備
まず始めに、```v1.6.1elixir```フォルダから環境を作ります。

```
$ cd v1.6.1elixir
$ asdf list-all erlang
... 略
20.2.2
20.2.3
20.2.4
20.3
20.3.1
20.3.2
... 略
```
 ```asdf list-all [名称]```で　バージョンの情報が列挙されます。
今回は、OTPが20.2.4のバージョンとなっているので、erlangは20.2.4をインストールします。

Elixirも同じようにlist-allで調べる事ができます。今回は、Materiaの環境に合わせて```elixir 1.6.1```にします。

```
asdf install erlang 20.2.4
asdf install elixir 1.6.1
```

インストールしたerlangとelixirはこのフォルダ内で有効にしたいので、次のコマンドを打ちます。

```
asdf local erlang 20.2.4
asdf local elixir 1.6.1
```
インストール状況を確認して見ましょう。```asdf current```を入れて、set by ~となる.tool-versionsファイルがちゃんと、```v1.6.1elixir```にできてる事を確認しましょう。

```
$ asdf current
elixir         1.6.1   (set by /Users/username/v1.6.1elixir/.tool-versions)
erlang         20.2.4  (set by /Users/username/v1.6.1elixir/.tool-versions)
```

## HEXのインストール
Elixir,Erlangのパッケージ管理ツールHexをインストールします。フォルダは```v1.6.1elixir```のままです。

```
$ mix local.hex
```
## PhoenixFrameworkをインストール
HEXをインストールしたら、次にPhoenixFrameworkをインストールしましょう。

```
mix archive.install https://github.com/phoenixframework/archives/raw/master/phx_new.ez
```

ここまで出来れば、Phoenix v1.3の環境構築は無事終了です。
最後に環境がちゃんとできてるか確認します。``` mix hex.info```のコマンドで以下が表示される事を確認してください。

```
$ mix hex.info
Hex:    0.18.2
Elixir: 1.6.1
OTP:    20.2.4
```

##② Phoenix v1.4の環境準備

基本的に①　Phoenix v1.3の環境準備と同じ手順で進めます。が、最後にちょっと付け足しの作業があります。
フォルダは```v1.7.4elixir```に移動し、下記のバージョンでインストールしました。

```
Hex:    0.18.2
Elixir: 1.7.4
OTP:    21.1.4
```
Phoenixフレームワークのインストール手順まで進めた後、追加で以下の事を行います。

```asdf current```で```.tool-versions```が```v1.7.4elixir/```のフォルダにできてる事を確認します。

問題なければ、最後に以下のコマンドを実行します。

```
mix archive.install hex phx_new 1.4.0
```

これで、無事にPhoenix v1.3と v1.4の環境が作れました。

早速、それぞれのフォルダ内でプロジェクトを作って確認して見てください。

```
$ mix phx.new hello
$ cd hello
$ mix ecto.create
$ mix phx.server
```
無事にlocalhost:4000でサーバーが起動して入れば成功です。
※　ちなみに、Phoenix v1.3では少し、作業をしないとサーバーが起動せずにエラーになります。
解決方法は[Phoenix 最初の第一歩 Mix phx.serverでerrorの解決方法](https://qiita.com/Yoosuke/items/91ef4ce0ba8cf6dcb2a9)に記載したので、コチラを確認ください。

## 最後に
Elixirで開発を楽しみたい仲間募集してます。また、毎週火曜日にオンラインやオフライン混在で勉強会してるので、
参加したい方、気軽にご連絡ください。