ターミナル出力の可視化技法:CLI 環境での ASCII グラフとプログレスバー活用

コマンドラインにおけるデータ表現の革新

シェルプロンプト上のテキストストリームは、多くの場合、生の数値情報に限定されます。しかし、システム監視や自動化スクリプトの実行において、データの趨勢や進捗状況を視覚的に把握することは不可欠です。このセクションでは、標準的な出力フローを変更することなく、リアルタイムな折れ線グラフや動作中のプログレスバーを生成するための具体的な実装手法を提示します。

1. リアルタイムモニタリングの実装

システムの負荷状態を追跡する場合、定点観測よりも連続的なデータ収集が有効です。ttyplotのようなツールを活用することで、標準入力からのデータを動的なグラフに変換可能です。

# システム平均ロードを表示して ttyplot に渡すループ構造
while :; do
  uptime | awk -F'load average:' '{print $2}' | awk '{print $1}'
  sleep 1
done | ttyplot -t "System Load" -u "min"

この構成により、特定の秒間隔で読み取ったメトリクスが画面に継続的に描画されます。軸のスケールやタイトルは引数によって柔軟に定義可能です。

2. ファイル操作の進捗追跡

大量データの移動やバックアップ処理中、作業が終了したかどうかを確認するために progress ユーティリティを使用します。これにより、通常の cp や mv コマンドを改造せずとも、プロセスIDに対して進行度を表示できます。

# バックアップ処理実行後に別のターミナルで進捗確認
cp -r /source/directory /backup/directory &
sleep 2
progress -c $!

# または watch と組み合わせて定期的に表示
watch -n 2 'progress -w'

コピー対象ファイルのサイズに応じたパーセンテージと残り時間を見積もることが可能です。

3. スクリプト内へのグラフ埋め込み

Bash スクリプト内で簡易的な統計データを出力したい場合は、依存関係を持たない asciichart.sh が適しています。配列データを標準出力へ流し込むことで、コンソール上に棒グラフまたは折れ線を描画します。

# ランダムな数値シークエンスを生成し描画
count=0
while [ $count -lt 30 ]; do
  value=$((RANDOM % 50))
  echo "$value"
  ((count++))
  sleep 0.2
done | bash asciichart.sh --height 15 --width 120

これにより、スクリプトの実行結果をレポート形式で出力する際の見栄えが向上します。

4. 定量的データの比較表示

複数のカテゴリ間での値を対比させる必要がある場合、棒グラフ形式の termgraph が有用です。ディスク使用率などのステータスを色付きで出力します。

# ルートパーティションの使用状況を取得してグラフ化
df -h / 2>/dev/null | tail -n 1 | awk '{printf "%.2f\n%s\n", $5, $1}' | termgraph --color yellow,green --title "Filesystem Usage"

各カラムに対応する値とラベルを指定することで、一目で比率関係を理解できます。

5. パイプラインのスループット計測

データ変換処理や圧縮作業において、転送速度を制御・監視するには pv(Pipe Viewer)が最適です。ストリーミング中のデータ量と時間を正確に計測します。

# メモリ確保テストを行いながら転送速度を制限して表示
dd if=/dev/zero of=filler.tmp bs=1M count=500 | \
pv -s 500M -l -f -r -t -b > /tmp/null_sink.bin
rm filler.tmp

-s オプションで全容量を事前指定すると、残存時間の見積もり精度が向上します。また、通信帯域を制限しながら処理を行うことも可能です。

ツール群の統合運用

これらの個々のツールを組み合わせて、複雑なダッシュボードを作成することもできます。例えば、プロセスリストからメモリ消費量を抽出し、それを bar chart で出力するパイプライン構築が可能です。

# トップ 5 のメモリ使用プロセスを特定し可視化
ps aux --sort=-%mem | awk 'NR>1{print NR": "int($6/1024)"MB"}' | head -n 5 | termgraph --unit "MB" --color red,cyan,magenta

このような組み合わせにより、ワンライナーであっても直感的なフィードバックを得られるようになります。

タグ: bash linux command-line-interface ascii-art system-monitoring

8月3日 01:18 投稿