この記事はElixir Advent Calendar 2016の10日目の記事です。
Elixirをこれから始めたいという方に自分がやったこと、感じたことを残します。
少しでも参考になればと思います。
時代背景
Elixir自体は、mizchi氏のリアルタイムウェブな観点からElixir / Phoenix についてあたりから興味を持ち始めました。
この記事を見て、Elixirを始めた人も多いのではないでしょうか。
http://elixir-ja.sena-net.works/
当時Elixirの情報で簡単にヒットするのは上記のサイトくらいだったと思います。
とはいえ、すでにある程度は日本語化されていて、(翻訳状況は今も昔も変わってなかった。)
こちらのサイトを見て、Elixirの基本的な言語仕様を学びました。
キャッチアップが早い人は翻訳がない状態で元サイトを翻訳しながら取り組んでいました。
当時は、ver1.1 でした。
GETTING STARTEDの次
GETTING STARTEDではElixirの構文が学べました。(後半はプロセス、OTPもあるけど)
その状態で書いたコードがたぶん以下のあたりです。
phoenixとRedisでAPI作成
ElixirでSlackBotを簡単に作れるライブラリを作ったよ
ここらへんで、ErlangプロセスやOTPに関する知識が必要だなと感じ、そちらをやることにしました。
slackbotでマクロでDSLを作っているものの、マクロはソースが読めるくらいに書ければいいのかなって思います。(いまのところ)
Erlangをやる
learn you some Erlang
のサイトをところどころ読みました。
このサイトは、すごいErlangゆかいに学ぼうという本の元になったサイトの翻訳です。
ところどころ翻訳がわからなかったところもあるので、ちゃんとやる場合は本を買ったほうがいいと思いました。
OTPの使い方ではなく、OTPの成り立ちというか、
内部的にはこんな事をしているけど、これを毎回書くのは大変だから、OTPがあるんだよ。
的なことが書いてあるのが良いです。
プログラミングErlang
をやりました。
いまのErlang/OTPのversion(OTP18でやった)だと動かないところもあり、
修正しつつやるのはつらめでしたが、良い本でした。
Erlangの強みである、ErlangNodeでクラスタを組んで分散処理を行う点や、
バイナリをパターンマッチで扱える点などが学べます。
Erlangを使う気はありませんが、Elixirのコードを読んでいるとたいていはErlangのライブラリに行き着きます。
自分でErlangを書くことによって、Erlangライブラリのコードを読めるようになったことがとても有益でした。
またElixirのGETTING STARTEDではあまり触れられていませんが、
ElixirからErlangの標準ライブラリを利用できるので(というか、GETTINGSTARTEDでも使われてるけど)、
Erlangの標準ライブラリに何があるか、どう使うか的なところは割りと重要だと思います。
Elixirの入門的な話しにはErlangのことをスルーすることが多いと思うのですが、
Elixirの標準ライブラリは、多くないです。
なぜ多くないかというと足りない部分はErlangの標準ライブラリを使う前提だからです。
Phoenixのソースを読む
Phoenixを使うにあたり、内部で何をしているのかがわからなかったので、結構ソースを読んでました。
特にChannel周りで何を自分で気にする必要があるのか、
何をフレームワークが吸収してくれているのかがわからなくて調べてました。
結果的にcowboyのソースの一部まで追っていましたが、勉強になりました。
Erlangのドキュメントを読む
主に、分散Erlangについて読んでいたと思います。
また、Phoenix内で使用されているErlangのライブラリのドキュメントも読んでいました。
やった感想
Elixirは、従来の人気がある言語(Ruby,PHP,Java)とは、感覚が違うところも多く
簡単なスクリプトとして使えるようになる。
と
プロジェクトとして使用できるようになる。
では大きく差があるように感じました。
特にローカルで開発している分には問題ないですが、
プロダクションで使うことを想定すると、ErlangVMの世界になるので、
1.5言語(Erlang + Elixirで1.5と考える)分くらいやることがあるかもしれません。
とはいえ、
言語としては魅力的な部分が多いので、
たとえ、この先、業務で使うことがあるかないかわからない状況だったとしても、
従来の言語(Ruby,PHP,Javaなど)の経験しかない場合であれば、
違うパラダイムであるErlang(Elixir)を学ぶのは、良いことだと思います。