13章はまだまだ続く。13.11から。全開までで、GitHubから取得したIssueのデータは、マップの形にまでなった。
今度はこれをテーブルの形に整形する。
文字列の表にしたいから、まず、各列の文字列の最長幅を知る必要がある。
そのために、データをいったん列のリストに組み替えて、
列の最長幅のリストに変換し、さらにそれを使って:io.format
のフォーマット文字列を作っている。
これはErlangのライブラリなので、参照するのはここ。
フォーマットの説明がよくわからない・・・ElixirとErlangの両方のライブラリを見なければいけないのはなかなか面倒くさい。
その後、出力はまた行ごとのデータにしなければならないので、List.zipで戻してる。
・・・というような処理の流れをP.160のコードから読み取るのはなかなか面倒くさかった。 テストがなかったら、わからなかったかも。
というわけで、なんとか写経完了。iex上から、Issues.CLI.runを実行するとちゃんと動いている。
これをちゃんとコマンドラインのアプリにする。escriptというツールを使うんだそうな。 mix.exsにmain関数を持つモジュールを指定すればOK。 あとは、mix escript.buildを実行すると、実行ファイルが出来る。便利だ。
> ls -l total 3488 -rw-r--r-- 1 tambara staff 492 Jan 2 18:41 README.md drwxr-xr-x 4 tambara staff 128 Jan 2 23:13 _build/ drwxr-xr-x 3 tambara staff 96 Jan 3 12:19 config/ drwxr-xr-x 12 tambara staff 384 Jan 3 10:31 deps/ -rwxr-xr-x 1 tambara staff 1772174 Jan 4 14:57 issues* drwxr-xr-x 4 tambara staff 128 Jan 2 20:10 lib/ -rw-r--r-- 1 tambara staff 733 Jan 4 14:57 mix.exs -rw-r--r-- 1 tambara staff 2827 Jan 3 10:31 mix.lock drwxr-xr-x 6 tambara staff 192 Jan 3 22:47 test/
ライブラリを持っていくからだと思うけど、そこそこ大きい。 これはErlangがインストールされていれば、コンピュータのアーキテクチャを問わず、どこでも実行出来る。 Javaっぽいね。
> ./issues elixir-lang elixir numbe | created_at | title ------+----------------------+--------------------------------------------------------------------------------- 10609 | 2020-12-30T10:48:11Z | Missing keys in type inference for keyword lists 10611 | 2020-12-31T01:05:09Z | "Incompatible types in guard" warning 10617 | 2021-01-02T04:48:59Z | Correct protocol error, when @fallback_to_any true and no implementation for Any 10620 | 2021-01-03T01:01:34Z | Fix cryptic error when defimpl is defined without :for option
13章はこの後、ロガーの説明と、ExDoc(JavaDocみたいなもの)の説明がある。 必要だね。というわけで、長かった13章はおしまい。
13章で出てきたmixのコマンドをまとめておく。
- mix new (プロジェクト名)
- mix run -e '(Elixirのコード)'
- mix test
- mix deps
- mix deps.get
- mix escript.build
- mix docs
- iex -S mix ←オマケ