概要
Elixirの学習を始めるにあたり、同様な人のために参考になればと残しておくことにしました。
最下部にある参考記事を読んでざっくりメモしたものですので、ぶっちゃけリンク先を読めばいいですw
2018/12/10時点での記事になります。
なぜElixir?
並列処理が得意
- ElixirはErlangという言語のVM上で動作する
- Erlangは並列処理が得意(Ericssonの電話交換機で利用されている話がよく引用される)
耐障害性が高い
- プロセス単位での動作ができる。プロセスの取り扱いやすい。プロセス終了でメモリ解放でコスト低い。
こちらでわかりやすく解説しています
効率良い
- CPUの複数コアをあまさず使える(昨今のCPUの処理速度対応はコア数を増やして対応する傾向)
- 1コアあたりの処理速度も良い(Go並み)
やってみる
Elixirの環境構築
こちらで丁寧に詳しく解説されていますが、私はDockerでためしました。
理由
* Dockerの環境が既に構築済み
* 元の環境に影響をあたえずにスクラップ&リビルドできる
docker run --rm -v ~/Documents/develop/docker/elixir:/code -p 4000:4000 -i -t trenpixster/elixir /bin/bash
「~/Documents/develop/docker/elixir」の部分は自分の環境にあわせてください。
Phoenixの構築
ElixirでWebフレームワークといえば、今の所これ一択。
mix archive.install https://github.com/phoenixframework/archives/raw/master/phx_new.ez
mix phx.new web --no-brunch --no-ecto
cd web
iex -S mix phx.server
すると下記のようなエラーが表示されます(実はここがメモしたかっただけかも)
(省略)
warning: please add the following dependency to your mix.exs:
{:plug_cowboy, "~> 1.0"}
This dependency is required by Plug.Adapters.Cowboy
which you may be using directly or indirectly.
Note you no longer need to depend on :cowboy directly.
(省略)
** (Mix) Could not start application web_nodb: WebNodb.Application.start(:normal, []) returned an error: shutdown: failed to start child: WebNodbWeb.Endpoint
** (EXIT) shutdown: failed to start child: Phoenix.Endpoint.Handler
** (EXIT) "plug_cowboy dependency missing"
問題も解決方法も読めばわかるのですが、依存関係です。
Plug.Adapters.Cowboyが必要としているとのこと。
なので、素直に依存関係のファイル(mix.exs)に追記してください。
(省略)
defp deps do
[
{:phoenix, "~> 1.3.4"},
{:phoenix_pubsub, "~> 1.0"},
{:phoenix_html, "~> 2.10"},
{:phoenix_live_reload, "~> 1.0", only: :dev},
{:gettext, "~> 0.11"},
{:cowboy, "~> 1.0"},
{:plug_cowboy, "~> 1.0"} ←ここ!!!
]
end
(省略)
Phoenixにアクセス
まとめ
とりあえず今日はこんなところ。
高負荷なシステムには使うことが増えていくんじゃないかと思うので
覚えて損はないはず、継続していこうと思います。
参考
[翻訳] Elixir - 次に来る大物Web言語
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
Excelから関数型言語マスター1回目:行の「並べ替え」と「絞り込み」
Phoenix 最初の第一歩 Mix phx.serverでerrorの解決方法
最速で知る! ElixirプログラミングとErlang/OTPの始め方【第二言語としてのElixir】