(この記事は、「Elixir or Phoenix Advent Calendar 2017」の3日目です)
piacereと申します
私は普段、福岡のスタートアップ企業のCTOとして、「ビッグデータ分析+AI・ML開発」を行うElixir/Phoenix/Kerasリードプログラマをしながら、福岡Elixirコミュニティ「fukuoka.ex」のMeetUp(偶数月定期開催)やプログラミング入門ハンズオン、もくもく会を主催しています
先日、「fukuoka.ex #8 ~2018年 春のElixir入学式~」というMeetUpを開催し、その中で、Elixir入門者向けのセッションの登壇しましたので、その一部をコラム化してみようと思います
Excelを使う位カンタンな関数型プログラミング言語「Elixir」
「関数型言語」の習得が、なかなか進まない、といったことをよく聞きます
特に、「オブジェクト指向言語」に慣れ親しんだ方ほど、苦しんでいるようです
Elixirは、「Excel使う位、簡単」なので、「関数型言語」の習得が進まない方には、オススメの言語です
また、プログラミングが初めての方でも、Excelでできることが、Elixirも同じようにできると分かれば、習得しやすいでしょう
この「ExcelからElixirをマスター」シリーズでは、Excelと同じ機能を、Elixirでも実現できる、というところからスタートし、その延長で、Elixir/Phoenixによる「Web+DB開発」や「Web+外部API開発」、「Web上でのグラフ描画」まで作れる、ということを実感していただこうと思います
事前準備:Elixirのインストール
まず、Elixirを使い始めるのに、3種類の方法があります
- インストーラ/Homebrewを使う
- ソースコードからビルドする
- DockerでElixirイメージをインスト―ル (pull) する
Windows/macOSは1.、Linux含むUNIX系は2.、普段Dockerを使い慣れている方は3.がオススメです
1. インストーラ/Homebrewを使う
下記URLの手順に沿って、Elixirをインストールします
https://elixir-lang.org/install.html
Windowsはインストーラをダウンロードしてインストール、macOSはHomebrewでインストールと、簡単です
なお、Linux含むUNIX系の手順も記載されていますが、手順通りにすると、古いバージョンがインストールされるため、2. の方が良いです
2. ソースコードからビルドする
以下の手順通り、まずErlangをソースコードからビルドして、インストールします
なお、実施するタイミング次第では、新しいものがリリースされているかも知れないので、気になる方は、下記URLをチェックして、適宜、変更してください
http://erlang.org/download
wget http://erlang.org/download/otp_src_20.3.tar.gz
tar vzfx otp_src_20.3.tar.gz
cd otp_src_20.3/
./configure --enable-hipe
make && make install
次に、Elixirをソースコードからビルドして、インストールします
こちらも、Elixirのメジャーバージョンが新しくなっている場合は適宜、バージョンを変更してください
git clone https://github.com/elixir-lang/elixir/
cd elixir
git checkout v1.6
git pull
export PATH="${PATH}:/usr/local/bin"
make && make install
elixir -v
3. DockerでElixirイメージをインスト―ル (pull) する
下記URLを、「Docker Community Edition (CE)」までスクロールし、利用OS毎のDockerをインストールします
https://www.docker.com/get-docker
その後、以下コマンドでElixirイメージを入れます
docker pull trenpixster/elixir
以下コマンドで、Elixirイメージのコンテナを起動します
docker run -p 4000:4000 -i -t trenpixster/elixir /bin/bash
Excelの「並べ替え」をElixirで書いてみる
さて、Elixirのインストールが完了したので、Excelの「並べ替え」をElixirで書いてみましょう
Elixirのコードをインタラクティブに実行できる「iex」コマンドを起動します
iex
Interactive Elixir (1.6.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)>
データの「並べ替え」は、Elixirでは、Enum.sort()を使います
iex内で、実際にコードを打って、試してみてください
パイプ「|>」により「データ→並べ替え」という流れの順で書くこともできます
Excelの「フィルタ」をElixirで書いてみる
次は、Excelの「フィルタ」をElixirで書いてみます
データの「フィルタ」は、Elixirでは、Enum.filter()を使います
Enum.filter()内のfn( n )は、データの1つ1つの値を変数n※として、後ろの処理 (青枠) に渡す、という意味で、青枠の処理では、1つ1つの値が「999」で無いことをチェックしています
※この「n」は、fn()で指定した変数と、後ろの処理で同一であれば、どんな変数名でも構いません
なお「fn」は、関数 (function) を意味しており、その後の「->」から「end」までの間が、関数の処理を意味しています
つまり、データの1つ1つの値が、「999で無いことをチェック」するという関数に順に渡され、 「999で無い値」だけが残るようフィルタされている、というのが、Enum.filter()で行われている処理です
終わり
いかがでしたでしょうか?
Excelと同じ機能が、割とカンタンにElixirでも実現できる、と感じていただけたのでは無いでしょうか?
次回は、「列の抽出とWeb表示」を行います
明日は、@wataridori999 さんの「ElixirでSI開発入門 #1 Ectoで悲観的ロック」です
p.s.
先日、fukuoka.exコアメンバーのインタビュー記事を公開しました
昔やっていた、超大規模案件で苦しんでいたところから、Elixirを始めたきっかけが取材されています
http://dame.engineer/archives/391#post-391