dlang

D言語でプログレスバーを表示するためのライブラリを作ったよ

More than 3 years have passed since last update.

はじめに

こんにちは。皆さんD言語使っていますか?
コンソールに簡単にプログレスバーを表示する progress-d を作ったので紹介します。

追記: dubにも progress-d で登録してあります

どんな感じなの

こんな感じ。終わりまでの予想時間 (ETA: Estimated Time of Arrival) も表示されて便利。

progress-d_screenshot.png

なんで作ったの

機械学習系ではたくさんのファイルに対して重い処理を行ったりするので、今どれくらい終わったのか、どれくらい待てば終わるのかがわかりません。
いままでは「42/10000」のように割合は表示していたのですが、これだと終わりまでどれくらい時間がかかるのかわからないし、表示方法も味気ないのでプログレスバーが表示できるようにしました。

使いかた

使い方は簡単で、Progress のインスタンスを作って、あとは next() を呼ぶたびにプログレスバーが表示されます(100% になるまでの予想時間も表示されます)。

title プロパティをいじるとヘッダ部分に表示する文字列を変えられます。

import std.stdio;
import std.datetime;
import core.thread;
import progress;

void main(string[] args) {
  size_t iteration = 100;
  Progress p = new Progress(iteration);
  p.title = "Downloading";

  for(int i = 0; i < iteration; i++) {
    p.next();
    Thread.sleep(dur!("msecs")(80));
  }
  writeln();
}

今後

コンソールの幅を簡単に取る方法がわからなかったので、今はLinux専用です。
近いうちにOSXやその他のプラットフォームにも対応させるかもしれません。
まあ、うまく取得できない環境では固定幅表示でも良いのですが。