この記事は、「fukuoka.ex Elixir/Phoenix Advent Calendar 2018」の20日目になります。
昨日は、@piacere_exさんのBASIC以来、35年間プログラミングしてないIT企業社長が、ElixirでWebアプリを作ったでした。
本日は、ElixirとErlangバージョン管理の話しです。
この記事の構成
- 記事を書いた動機という名のポエム
- 記事の対象OS
- asdfのインストール
- asdf Erlang & Elixir のプラグインをインストール
- バージョン違いの環境の準備
- ① Phoenix v1.3の環境準備
- HEXのインストール
- Phoenix Frameworkをインストール
- ② Phoenix v1.4の環境準備
- 最後に
記事を書いた動機という名のポエム
以下、しばらくはポエムになりますので、本題を早く見たい方は飛ばしてください。w
最近、ElixirにハマってるYOSUKENAKA.meです。
という事で、最近は知り合いのママさんや高校生にElixir良いぜ!一緒に学ぼうぜ!と焚き付けて、Elixirすげーとか興奮しながら勉強会してますw
そんな事を、Twitterで興奮気味につぶやいていたら、ご縁あって、fukuoka.exに参加させて頂いてます。来年は、Elixirの修行をしに、福岡行こうと思います。
そして、先日のfukuoka.ex#17:Elixir実践テクニック公開します② のトラックAで紹介されたWebサービスバックエンドライブラリー Materiaというライブラリーが、今ちょうど作っていた認証系を既に簡単に揃えているというので、これは開発の短縮化できるじゃない!
ゲームで言うなら、チートですね。では、早速導入しようと思いましたが、僕の環境では使えませんでした。(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を使って作った
そのため、解説は上記の記事を参考にください。
ここでは、簡単に手順だけ、記載したいと思います。
- 既にElixirをインストールして環境構築済みの方は、一度削除します。これから始める方は、この作業は不要になります。
$ brew uninstall --force erlang elixir
- ここからは、asdfの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の2つの環境を準備したいと思います。
今回は、Materiaを導入できるバージョンの環境(Phoenix v1.3)と、新しいPhoenix v1.4が動く環境を2つ準備したいと思います。
Materiaの環境はこちらの記事を見ると以下のバージョンが前提のようですので、その構成を準備します。
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の解決方法に記載したので、コチラを確認ください。
最後に
Elixirで開発を楽しみたい仲間募集してます。また、毎週火曜日にオンラインやオフライン混在で勉強会してるので、
参加したい方、気軽にご連絡ください。