[Elixir]Excelから関数型言語マスターの1回目と2回目をやってみた

# [Elixir]Excelから関数型言語マスターの1回目と2回目をやってみた。

2018/08/16に [fukuoka.ex#12：Elixir／Phoenixもくもく会](https://fukuokaex.connpass.com/event/96725/
)に参加してきました。
Elixirを書いているのを見たことはあるけど書いたことはない、
だけど書いてるのを見ていると面白そうだし、いろいろ使えそう！と思ったので、
Elixirをゆるっと勉強することにしました。

もくもく会の紹介に、
Elixirをやったことない人は、@piacere_exさんの[「ExcelからElixirをマスターする」](https://qiita.com/piacere_ex/items/6714e1440e3f25fb46a1
)シリーズがおすすめ！
とあるので、とりあえずこのシリーズをやってみることにしました。  

※注意
この記事は[「ExcelからElixirをマスターする」](https://qiita.com/piacere_ex/items/6714e1440e3f25fb46a1
)シリーズをやってみた中で躓いたところや、試してみたことなどを書いてみたものです。

# Excelから関数型言語マスター1回目：行の「並べ替え」と「絞り込み」
https://qiita.com/piacere_ex/items/6714e1440e3f25fb46a1

## Elixirのインストール

以下の3つの方法があるそうなのですが、私は1番を選択しました。
> 1. インストーラ／Homebrewを使う
1. ソースコードからビルドする
1. DockerでElixirイメージをインスト―ル (pull) する

ただし、そもそもHomebrewが入ってなかったので(笑)
以下を参考にまずHomebrewをインストールしました。
https://brew.sh/index_ja

```sh
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew update
$ brew upgrade
$ brew install elixir
```

## Excelの「並べ替え」をElixirで書いてみる & Excelの「フィルタ」をElixirで書いてみる
これについては、特に疑問やつまづくところなく、実行することができました。
リスト内に999が複数あっても、もちろん999が取り除かれたリストが表示されましたし、
`f(n) -> n == 999` とすると、もちろん999のみが取り出されました。

```elixir
iex(1)> [323,999,54,999,6] |> Enum.filter(fn(n) -> n !=999 end)
[323, 54, 6]
iex(2)> [323,999,54,999,6] |> Enum.filter(fn(n) -> n == 999 end)
[999, 999]
```

# Excelから関数型言語マスター2回目：「列の抽出」と「Web表示」
https://qiita.com/piacere_ex/items/b7787580fce5f148242f#_reference-15d862e0dedbe9d9069e

## 複数列のデータ & 複数列データから「列の抽出」

躓くことなくできました！
iex起動中、コードの途中で改行を入力すると、命令の入力が継続されるのいいですね！
マップリストのデータも入力しやすかったです
（コピペしましたけど…ｗ)
![iex_enter.gif](https://qiita-image-store.s3.amazonaws.com/0/259668/9e6f351c-9912-679a-755b-32aed985e32d.gif)

## Phoenixのインストール、PJ作成、起動
下記の順番で行ったところ、最後の```iex -S mix phx.server```でコケてしまいました…。

```sh
$ mix archive.install  https://github.com/phoenixframework/archives/raw/master/phx_new.ez
$ mix phx.new sample --no-brunch --no-ecto
$ cd sample
$ iex -S mix phx.server
```

※途中表示される[Yn]ではすべてYを入力してました。

`iex -S mix phx.server` を行ったときに出たエラーがこちら。

```sh
$ iex -S mix phx.server
Erlang/OTP 21 [erts-10.0.5] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe] [dtrace]

Could not find Hex, which is needed to build dependency :phoenix
Shall I install Hex? (if running non-interactively, use "mix local.hex --force") [Yn] 
Y
* creating /Users/nobuhiroyoshitake/.mix/archives/hex-0.18.1
Unchecked dependencies for environment dev:
* phoenix_live_reload (Hex package)
  the dependency is not available, run "mix deps.get"
* gettext (Hex package)
  the dependency is not available, run "mix deps.get"
* cowboy (Hex package)
  the dependency is not available, run "mix deps.get"
* phoenix_html (Hex package)
  the dependency is not available, run "mix deps.get"
* phoenix_pubsub (Hex package)
  the dependency is not available, run "mix deps.get"
* phoenix (Hex package)
  the dependency is not available, run "mix deps.get"
** (Mix) Can't continue due to errors on dependencies
```

調べた結果、[こちら](https://qiita.com/K_ichi/items/230903d0868669d9deea
)の記事の通り、```mix deps.get``` を行ったあと、
```iex -S mix phx.server``` コマンドを実行すると、無事解決しました！ 
(```mix deps.get```やって的なことがエラーメッセージにも表示されてるんですけどね。。。)
・https://qiita.com/K_ichi/items/230903d0868669d9deea

```sh
$ mix deps.get
$ iex -S mix phx.server
```

## Web上での複数列データの「フィルタ」& Web上での複数列データの「並べ替え」
あとは、記事通りつつがなく実行することができました！
パイプでフィルターしたり、並べ替えたりとなんだか面白いですね。

# 1回目&2回目の感想
Elixirを動かすところは特別問題なく、わかりやすく楽しかったです！
Excelと比較してあるので、動作などイメージしやすかったですし。
ただ、それ以外の環境構築で躓いたのがちょっとつらかったです。
~~` mix deps.get`のくだりについては、聞くところによるとPhoenix側のバグとかなんとか…。~~

Elixir以外のそもそもの知識ないとちょっとつらいですが…[「ExcelからElixirをマスターする」](https://qiita.com/piacere_ex/items/6714e1440e3f25fb46a1
)シリーズ、3回目以降も頑張っていこうと思います！