週刊Elixirライブラリ2015-17
Elixirのライブラリの解説を週ごとにお届けする記事です。
解説が間違っていた場合には、コメントか@hayabusa333にご連絡くださると嬉しいです。
今回はProgressBarについて
# ProgressBar is 何?
ProgressBarは、Elixirにてターミナル上にプログレスバーを表示できるようにするライブラリです。
# 実行環境
OS:OS X Yosemite
Erlang:Eshell V6.5, OTP-Version 18
Elixir:v1.0.4
# ProgressBarの実行を行うための新規プロジェクトの作成
$ mix new my_progress_bar $ cd my_progress_bar
# HexにてProgressBarをインストールするために設定ファイルの記載を行う
$ vim mix.exs
mix.exsの内容は下記となります。
defmodule MyProgressBar.Mixfile do use Mix.Project def project do [app: :my_progress_bar, version: "0.0.1", elixir: "~> 1.0", build_embedded: Mix.env == :prod, start_permanent: Mix.env == :prod, deps: deps] end # Configuration for the OTP application # # Type `mix help compile.app` for more information def application do [applications: [:logger]] end # Dependencies can be Hex packages: # # {:mydep, "~> 0.3.0"} # # Or git/path repositories: # # {:mydep, git: "https://github.com/elixir-lang/mydep.git", tag: "0.1.0"} # # Type `mix help deps` for more examples and options defp deps do [{:progress_bar, "~> 1.2.1"}] end end
# 依存関係の解決を行います。
$ mix deps.get $ mix deps.compile
# ProgressBar を実行してみる
$ iex -S mix # 2/3の状態のプログレスバーを表示する iex(1)> ProgressBar.render(2, 3) |================================================= | 67%:ok # 3/3の状態のプログレスバーを表示する iex(2)> ProgressBar.render(3, 3) |=========================================================================| 100% :ok # Enumにてプログレスバーを自動的に数値が増えていくように表示する iex(3)> Enum.each 1..100, fn (i) -> ...(3)> ProgressBar.render(i, 100) ...(3)> :timer.sleep 25 ...(3)> end |= | 1%|= | 2%|== | 3%|=== | 4%|==== | 5%|==== | 6%|===== | 7%|====== | 8%|======= | 9%|======= | 10%|======== | 11%|========= | 12%|========= | 13%|========== | 14%|=========== | 15%|============ | 16%|============ | 17%|============= | 18%|============== | 19%|=============== | 20%|=============== | 21%|================ | 22%|================= | 23%|================== | 24%|================== | 25%|=================== | 26%|==================== | 27%|==================== | 28%|===================== | 29%|====================== | 30%|======================= | 31%|======================= | 32%|======================== | 33%|========================= | 34%|========================== | 35%|========================== | 36%|=========================== | 37%|============================ | 38%|============================ | 39%|============================= | 40%|============================== | 41%|=============================== | 42%|=============================== | 43%|================================ | 44%|================================= | 45%|================================== | 46%|================================== | 47%|=================================== | 48%|==================================== | 49%|===================================== | 50%|===================================== | 51%|====================================== | 52%|======================================= | 53%|======================================= | 54%|======================================== | 55%|========================================= | 56%|========================================== | 57%|========================================== | 58%|=========================================== | 59%|============================================ | 60%|============================================= | 61%|============================================= | 62%|============================================== | 63%|=============================================== | 64%|=============================================== | 65%|================================================ | 66%|================================================= | 67%|================================================== | 68%|================================================== | 69%|=================================================== | 70%|==================================================== | 71%|===================================================== | 72%|===================================================== | 73%|====================================================== | 74%|======================================================= | 75%|======================================================= | 76%|======================================================== | 77%|========================================================= | 78%|========================================================== | 79%|========================================================== | 80%|=========================================================== | 81%|============================================================ | 82%|============================================================= | 83%|============================================================= | 84%|============================================================== | 85%|=============================================================== | 86%|================================================================ | 87%|================================================================ | 88%|================================================================= | 89%|================================================================== | 90%|================================================================== | 91%|=================================================================== | 92%|==================================================================== | 93%|===================================================================== | 94%|===================================================================== | 95%|====================================================================== | 96%|======================================================================= | 97%|======================================================================== | 98%|======================================================================== | 99%|=========================================================================| 100% :ok # プログレスバーの横の長さを設定して表示 iex(4)> ProgressBar.render(97, 100, width: 30) |====================== | 97%:ok # プログレスバーのフォーマットを使用し、カラー表示で出るように表示 iex(5)> format = [ ...(5)> bar_color: [IO.ANSI.green_background], ...(5)> blank_color: [IO.ANSI.red_background], ...(5)> bar: " ", ...(5)> blank: " ", ...(5)> left: " ", right: " ", ...(5)> ] [bar_color: ["\e[42m"], blank_color: ["\e[41m"], bar: " ", blank: " ", left: " ", right: " "] iex(6)> Enum.each 1..100, fn (i) -> ...(6)> ProgressBar.render(i, 100, format) ...(6)> :timer.sleep 25 ...(6)> end # 赤色のバーが100%に近づくごとに緑色のバーへ切り替わっていけば成功です :ok # プログレスバーのフォーマットを使用し、カラー表示で出るように表示 iex(7)> format = [ ...(7)> bars_color: [IO.ANSI.yellow], ...(7)> done_color: [IO.ANSI.green], ...(7)> ] [bars_color: ["\e[33m"], done_color: ["\e[32m"]] iex(9)> ProgressBar.render_indeterminate(format, fn -> :timer.sleep 5000 end) |==============================================================================| :ok
# まとめ
今回はElixirにてProgressBarを表示するライブラリを紹介いたしました。
Elixirのライブラリを作った時のテストに組み込んでみたり、処理が重いものに組み込んでみてはいかがでしょうか?
それでは皆さま、良いElixirライフを