🐹

Rustで🐹のプログレスバーを作る

2024/03/13に公開

はじめに

この記事ではRustを使ってプログレスバーを自作します。

今回Rustの公式ドキュメントを参考にしながら実装しました。
https://rust-cli.github.io/book/index.html

どんな人に向け?

Rustを始めたばかりで何したらいいか分からない。CLIって殺伐しているからもっと可愛くしたい🐹
🐹に埋もれたい。ひまわりの種美味しい(もぐもぐ)🐹

プログレスバーを作っていく

  1. プロジェクトのセットアップ

一緒にプロジェクトのセットアップをしていきましょう。
Rustのインストールがまだの方はこちらの記事を参考にインストールしてください。
https://doc.rust-jp.rs/book-ja/ch01-01-installation.html

次のコマンドを実行して新しいプロジェクトを作成します。
cargo new 好きなフォルダ名 で作成していただいても構いません。

cargo new progress-bar
cd progress-bar 

ファイルの中身は下記になります。

.
├── Cargo.toml
└── src
    └── main.rs
  1. 実装コード

main.rsとCargo.tomlを書いていきます。

progress-bar/src/main.rs
use anyhow::Result;
use indicatif::{ProgressBar, ProgressStyle};
use std::{thread, time::Duration};

fn main() -> Result<()> {
    let pb = ProgressBar::new(100);
    pb.set_style(ProgressStyle::default_bar()
        .template("{spinner:.green} [{bar:40.cyan/blue}] {msg}")//記号や文字の色を変えるよ!
        .progress_chars("🐹🌻"));//好みに変更してね!2つ以上の文字を入れてね
    pb.set_message("てちてち...");

    let delay = Duration::from_millis(30); // 約3秒間でプロセスが完了します

    for _ in 0..100 {
        pb.inc(1); // プログレスバーを1つ進めるよ
        thread::sleep(delay); // 指定されたミリ秒数だけプログラムを停止
    }

    pb.finish_with_message("完了なのだ!!!🐹");

    Ok(())
}

Cargo.toml

[package]
name = "progress-bar"
version = "0.1.0"
edition = "2021"

[dependencies]
anyhow = "1.0"
indicatif = "0.16.2"

[dev-dependencies]
assert_cmd = "2.0"
predicates = "2.1"
assert_fs = "1.0"
  1. 実行

現在のディレクトリにCargo.tomlがあることを確認したあと下記のコマンドを入力し実行します。

ls
src
target
Cargo.toml
Cargo.lock
cargo run

実行結果

たくさんの🐹が表示され殺伐としたCLIが癒しになりましたね!もふもふしたくなります。
ただこのままだと仕事に集中できないのでシンプルな例も合わせてご紹介します。

.progress_chars("🐹🌻"));の部分を.progress_chars("█▓▒░"));に変えます。

progress-bar/src/main.rs
fn main() -> Result<()> {
    let pb = ProgressBar::new(100);
    pb.set_style(ProgressStyle::default_bar()
        .template("{spinner:.green} [{bar:40.cyan/blue}] {msg}")//記号や文字の色を変えるよ!
        .progress_chars("█▓▒░"));//好みに変更してね!2つ以上の文字を入れてね
    pb.set_message("進行中...");

グラデーションのようになり実用的になりましたね。

終わりに

実装してみてRustの基本が分かりとてもいい勉強になりました。絵文字や記号でもプログレスバーが作れて楽しかったです。皆さんも遊んでみてください。🐹けへっ!

参考にした記事/コード
https://rust-cli.github.io/book/index.html
https://zenn.dev/kou_pg_0131/articles/slp-introduction
https://github.com/console-rs/indicatif/tree/main

Discussion