はじめに
この投稿は普段Rubyを使っているエンジニアがサクッと環境を作ってElixirに触ってみたというものになります。
RubyKaigi2019でRubyの今後追加されるシンタックスがElixirから影響を受けている旨の発表がありましたが、本稿が気軽にElixirを試すきっかけになれば幸いです。
前提
手順① 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
以下のコマンドでシェルを再起動します。
$ 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を試す
Rubyのirbと同じような機能が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
最後に
とりあえずコレで一旦コンソールで試す環境は出来たのでちょこちょこ触ってみるぞ!