Tambourine作業メモ

主にスキル習得のためにやった作業のメモ。他人には基本的に無用のものです。

Elixirで遊んでみる(11)

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 ←オマケ