🌀

Deno で CLI ローディング インディケーターを作って公開した

2022/06/15に公開

こちらができたものです 🍳

https://github.com/takaodaze/loading_spinner_deno

使用したイメージ

loading...finish!の部分の文字列は任意のものに設定可能です

使い方

import {
  loading,
  clearLoading,
} from "https://deno.land/x/loading_spinner@v1.0.2/mod.ts";

const loadingId = loading("loading...");

await new Promise<void>((res, _rej) => {
  setTimeout(() => res(), 3000);
});

clearLoading(loadingId, "finish!!!");

技術的なトピック

Terminal などで一度出力した文字列を変更したり、消したり
画面全体の文字を消したりするのってどうやるんだろう?」

と、思いながら調査をしてたのですが
ANSI escape sequence(以下、ansi)というのを使えば、結構手軽にコンソールアプリの画面をいじることができました

以下は、参考にしたチートシートです
https://gist.github.com/fnky/458719343aabd01cfb17a3a4f7296797

今後も、CLI実装する際にはお世話になりそうです。

ただ、実装されているansiもまちまちだと思うので、使えるansiとそうでないものがあると思います。

ご自身で使われているコンソールアプリとご相談ください

今回の動機

Denoは何よりTSを設定なしにバニラで使えちゃうのがとても気持ちが良いです。
外部ライブラリを管理するパッケージマネージャーがなくて、
URLから直接インポートする方式も好きです。
愛着が湧いてます。

DenoでCLIを書いている時、重い処理や通信処理が走るときなどに、その状態がCLIだと知るよしがないので
「ローディングのアレ」 を作りたいなと思いました。
github などにフィードバック等もらえると嬉しいです😊

Discussion