カクカクしかじか

技術的なアレコレ

Elixir環境構築~コンソールでの実行確認まで~

はじめに

この投稿は普段Rubyを使っているエンジニアがサクッと環境を作ってElixirに触ってみたというものになります。
RubyKaigi2019でRubyの今後追加されるシンタックスがElixirから影響を受けている旨の発表がありましたが、本稿が気軽にElixirを試すきっかけになれば幸いです。

前提

  • Macを使っていること
  • Homebrewがすでにインストール済みであること
  • インストールコマンドを実行しているのは、基本ホームディレクトリで実行(任意のディレクトリで可)

手順① MacにElixirをインストールする環境を作る

まずbrewをアップデート

$ brew update

Elixirとそれを動かすために必要なErlangのインストール

$ brew install erlang
$ brew install elixir

Rubyのrbenv的な複数バージョンのElixirを使うためのパッケージ管理ツールであるexenvをinstallします。

$ brew install elixir-build
$ brew install exenv

続いてパスを通します。

$ echo 'export PATH="$HOME/.exenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(exenv init -)"' >> ~/.bash_profile

以下のコマンドでシェルを再起動します。

qiita.com

$ exec $SHELL -l

これでElixirの個別バージョンをインストールする準備とパスの設定が完了しました。

手順② Elixirの個別バージョン毎のインストール

インストール可能なElixirのバージョンを確認します。

$ exenv install -l
Available versions:
  1.8.1/Docs.zip
  1.8.1
  1.8.0/Docs.zip
  1.8.0-rc.1/Docs.zip
  1.8.0-rc.1
  1.8.0-rc.0/Docs.zip
  1.8.0-rc.0
  1.8.0
  1.7.4/Docs.zip
  1.7.4
  1.7.3/Docs.zip
  1.7.3
  1.7.2/Docs.zip
  1.7.2
  1.7.1/Docs.zip
  1.7.1
  1.7.0/Docs.zip
  1.7.0-rc.1/Docs.zip
  1.7.0-rc.1
  1.7.0-rc.0/Docs.zip
  1.7.0-rc.0
  1.7.0
  1.6.6/Docs.zip
  1.6.6
  1.6.5/Docs.zip
  1.6.5
  1.6.4/Docs.zip
  1.6.4
  1.6.3/Docs.zip
  1.6.3
  1.6.2/Docs.zip
  1.6.2
  1.6.1/Docs.zip
  1.6.1
  1.6.0/Docs.zip
  1.6.0-rc.1/Docs.zip
  1.6.0-rc.1
  1.6.0-rc.0/Docs.zip
  1.6.0-rc.0
  1.6.0
  1.5.3/Docs.zip
  1.5.3
  1.5.2/Docs.zip
  1.5.2
  1.5.1/Docs.zip
  1.5.1
  1.5.0/Docs.zip
  1.5.0-rc.2/Docs.zip
  1.5.0-rc.2
  1.5.0-rc.1/Docs.zip
  1.5.0-rc.1
  1.5.0-rc.0/Docs.zip
  1.5.0-rc.0
  1.5.0
  1.4.5/Docs.zip
  1.4.5
  1.4.4/Docs.zip
  1.4.4
  1.4.3/Docs.zip
  1.4.3
  dev
  master

とりあえず、バグfixがある程度されてそう & 安定してそうな最新(1.8系)の一つ手前の1.7系をインストールしてみます。

$ exenv install 1.7.4
Downloading https://api.github.com/repos/elixir-lang/elixir/tarball/v1.7.4...
Installing elixir-1.7.4...
Installed elixir-1.7.4 to /Users/shigeyukifukuda/.exenv/versions/1.7.4

1.7.4をグローバルに設定します。

$ exenv global 1.7.4
$ elixir -v
Erlang/OTP 21 [erts-10.3.4] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe] [dtrace]

Elixir 1.7.4 (compiled with Erlang/OTP 21)

iexコンソールでElixirを試す

Rubyirbと同じような機能がElixirにもあり、それがiexです。

$ iex
Erlang/OTP 21 [erts-10.3.4] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe] [dtrace]

Interactive Elixir (1.7.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)>

試しにパターンマッチというElixirの機能を動かしてみます。
Elixirの=は単なる代入ではなく、等号は右辺と左辺をマッチさせるマッチ演算子と呼ばれているようです。
とにかく試してみる!

# aを2とマッチさせる
iex(1)> a = 2
2
iex(2)> 2 = a
2

# 別の値とマッチを図るとエラーになる
iex(3)> 3 = a
** (MatchError) no match of right hand side value: 2
    (stdlib) erl_eval.erl:453: :erl_eval.expr/5
    (iex) lib/iex/evaluator.ex:249: IEx.Evaluator.handle_eval/5
    (iex) lib/iex/evaluator.ex:229: IEx.Evaluator.do_eval/3
    (iex) lib/iex/evaluator.ex:207: IEx.Evaluator.eval/3
    (iex) lib/iex/evaluator.ex:94: IEx.Evaluator.loop/1
    (iex) lib/iex/evaluator.ex:24: IEx.Evaluator.init/4

ちなみにコンソールを抜けるときは ctr + \ で抜けられます。

参考サイト

MacにElixir開発環境を構築する | DevelopersIO

参考図書

https://www.amazon.co.jp/gp/product/4274219151/ref=ppx_yo_dt_b_asin_title_o05_s00?ie=UTF8&psc=1

最後に

とりあえずコレで一旦コンソールで試す環境は出来たのでちょこちょこ触ってみるぞ!