はじめに
第1章 Elixirを体験する
第2章 Mixを体験する
第3章 Phoenixを体験する
第4章 Phoenix LiveViewを体験する
第5章 Nervesを体験する
あとがき
本書を手にとっていただき、ありがとうございます。
本書の目的は、関数型プログラミング言語Elixirに興味を持ってもらうことです。Elixirは聞いたことあるけど、まだ始められていない/どんなことができるようになるんだろう、と考えている方に向けた内容となっています。
本書では、Elixirの特徴である動的な関数型や並行性については極力触れません。筆者自身が人に伝えるほど咀嚼できていない点もありますが、始めるときに関数型や並行性を学んで「難しい」となってしまうと、Elixirの楽しみに出会う前に終わってしまう可能性があると思っているからです。
では、どんなことについて触れるのかと言うと、大きく「Phoenix LiveView」と「Nerves」について紹介したいと考えています。
なぜこのふたつの紹介なのか。それは、筆者がこれからに期待できると感じたからです。
前者のPhoenix LiveViewは、JavaScriptを記述しなくても、サーバーサイド側のElixirだけでSPA(シングルページアプリケーション)を作成できます。近年のJavaScriptは種類がありすぎて追いつけない、という人でもは興味が湧いてくるではないでしょうか。
後者のNervesは、組込機器に対しての操作をElixirでできるようになります。これは、組込はC言語と言う考えしかなかった自分には衝撃でした。そして、組込機器にElixirが使えることに胸がワクワクしました。
残念ながら、このふたつのフレームワークにはまだ実績と言える実績はありません。しかし、だからこそ、これからが期待できると思いました。もし、この内容を読んでワクワクした方がいれば、ぜひ触り始めてみませんか?実は筆者自身もまだ触り始めたばかりなのです。ともにElixirの道を歩いていきましょう。
本書を読んで、あなたのプログラミング活動のひとつにElixirが加わってくれると幸いです。
本書の対象読者は、以下の方を想定しています。
・Elixirって何?と興味を持った方
・Elixirをこれから始めようと考えている方
・Elixirではどんなことができるんだろうと思っている方
・Phoenix Frameworkに興味を持っている方
・JavaScriptはいまいち好みではないけどSPAを体験してみたい方
・IoT機器の操作でC言語を触りたくない方
・難しい話は置いといて、雰囲気で新しい言語を体験してみたい方
一方で、これらの方には物足りない可能性が高いです。
・Elixirの関数型としての特徴や並行性について知りたい方
・業務でバリバリElixirを利用されている方
・本家サイトのドキュメントを読んで、一人でバリバリ進められる方
本書では、たびたび「執筆時点」と出てきます。
その際の執筆時点は、2020年4月30日を指します。
本書で扱う言語/フレームワーク/ライブラリーのバージョンは以下のとおりです。
・Elixir : 1.10.3
・Erlang : 22.3.2
・Node.js : 12.16.2
・Phoenix Framework : 1.5.1
・Phoenix LiveView : 0.12.1
・Nerves : 1.6.1
・本書の内容は、情報提供のみを目的としております。正確性には留意しておりますが、正確性を保証するものではありません。
・本書の記載内容に基づく一切の結果について、一切の責任を負いません。
・特定の会社、製品、案件について、不当に貶める意図はありません。
本書に記載されている会社名、製品名などは、一般に各社の登録商標または商標、商品名です。会社名、製品名については、本文中では©︎、®︎、™️マークなどは表示していません。
本書籍は、技術系同人誌即売会「技術書典7」で頒布されたものを底本としています。
Elixirとは、並行処理や動的な関数型の特徴を持つ、Erlangの仮想マシン(BEAM)上で動作するプログラム言語です。ベースとなるErlangの長所をそのままに、Rubyライクな文法で記述できます。
なお、本書で利用するElixirのバージョンは1.10系(Erlangのバージョンは22系)を前提としています。古いバージョンを利用している場合は、この章で紹介する方法でバージョンを合わせておいてください。
本書では、以下のOSで環境構築することをオススメします。
・macOS
・Linux
Linuxについては、可能であればUbuntu等のDebian系としてください。これは、ElixirのDocker ImageがDebian系で用意されているので、参考にしやすいためです。RedHat系列(CentOSなど)でも問題はありませんが、ライブラリーのインストール等については記載しませんので、適宜読み替えてください。
また、Windowsについては、本書で説明するNervesのサポート対象外となっています。1Windows PCをご利用の場合、VirtualBoxやVMware Player等を利用して、Linux環境を用意してください。
まずは、ご自身の環境にElixirをインストールします。筆者のオススメは以下のふたつです。
・asdfを利用する
・Dockerを利用する
その理由としては、Elixirのバージョン管理がしやすいからです。ツールによっては特定のバージョンでしか動かない場合もあります。ですので、任意のバージョンを指定できる環境を構築することをオススメします。
Dockerを利用できる方は、まずはDockerを利用してみましょう。手っ取り早くElixirを体験できます。
なお、本書ではバージョン管理ツール「asdf」を利用したElixirのインストールを推奨します。これは、バージョンを自由に変更できることに加えて、Nervesを利用する際にも推奨されている環境だからです。
asdfとは、CLIベースのバージョン管理ツールです。特定言語に対して複数のランタイムバージョンを管理できます。
・公式ページ: https://asdf-vm.com/#/
ここでは、asdfを利用してElixirをインストールする手順を説明します。asdfのインストール手順については、後述の「asdfをインストールする」で確認してください。
以下、asdfにパスが通っている前提とします。また、ElixirとErlangのバージョンは、Nervesを利用する際に重要になってきます。執筆時点の最新版であるNerves 1.6.1ではElixirのバージョン1.10系がサポートされています。今回はそれにしたがって、Elixir 1.10系をインストールします。
「asdf plugin-add <言語名>」を実行後、「asdf install <言語名> <バージョン>」を入力すると、当該バージョンのインストールが始まります。
Elixirのインストールには、事前にErlangのインストールが必要です。なお、Erlangのインストールには時間がかかります。著者の環境では、体感で10~15分程度でしたが、マシンスペックによっても変わってくると思います。終わるまでのんびりと待っていてください。
一方で、Elixirのインストールはすぐに完了します。
インストール完了後は、「asdf global <言語名> <バージョン>」で利用するバージョンを指定します。
$ asdf plugin-add erlang
$ asdf plugin-add elixir
$ asdf install erlang 22.3.2
$ asdf install elixir 1.10.3-otp-22
$ asdf global erlang 22.3.2
$ asdf global elixir 1.10.3-otp-22
上記では、Elixirのバージョンを1.10.3としていますが、1.10系であれば問題ありません。
本書では、公式のElixirのDockerfileを利用します。バージョンとしては、執筆時点での最新版である1.10.3を利用しています。
なお、Imageファイルのファイルサイズは1.23GBあります。通信量や利用するマシンのディスクサイズにはご注意ください。
$ docker run -it --rm elixir
もし、特定のバージョンものを利用したい場合には、「elixir:<タグ名>」で指定してください。たとえば、明示的に「Elixirのバージョン1.10.3」を利用したい場合には、以下のように実施します。
$ docker run -it --rm elixir:1.10.3
なお、上記の2パターンでは、docker run実行後にiexが起動します。iexについては後ほど説明します。いったんコンテナのOSを起動しておきたい場合には、引数にbashなどのシェルコマンドを渡してください。
$ docker run -it --rm elixir bash