4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Node.jsのCLIでローディングを実装する

Posted at

はじめに

とある情報をエクスポートするプログラムを作成していた時に、情報量が多くエクスポートに時間が少しかかるとプログラムが動作しているのかどうか不安になるときがありました。
そんなとき、よく見る、ローディング表示をすれば動作しているのかハングしてしまっているのかがわかるので、実装したいと思いました。

#環境

  • Node v10.16.3
  • Typescript 4.0.2
  • npm 6.14.9
  • git version 2.23.0.windows.1
  • Windows 10 Pro

参考サイト

【Node.js】CLIでロード中にクルクル回るアレ(スピナー)を作る

コード

  • Loading.tsローディングスタート及びエンドの関数を提供
Loading.ts
import rl from 'readline'

const spin_char = ["", "", "", "", "", "", "", "", "", ""]

let spin_count = 0;
const spin = (message: string) => {
  process.stdout.write('\x1B[?25l') //カーソルを消す
  rl.clearLine(process.stdout, 0) //行をすべて削除
  rl.moveCursor(process.stdout, -9999, 0) //一番左側に戻る
  process.stdout.write(`${spin_char[spin_count]} ${message}`) //spin_charの配列で描画
  spin_count++ //要素番号計算
  spin_count >= spin_char.length ? spin_count = 0 : null //要素番号のリセット
}

export const loading = (msg: string) => setInterval(() => {
  spin(msg);
}, 200);

export const endloading = (loading: NodeJS.Timeout, msg: string) => {
  clearInterval(loading)
  rl.clearLine(process.stdout, 0) // 行をすべて削除
  process.stdout.write(`\n${msg}`)//end Message
  process.stderr.write('\x1B[?25h') //ローディングで消したカーソルを戻す
}

使用例

loading('ローディング中に表示したい文字列')
endLoading(loadingの返り値 ,'終了時に表示したい文字列')
上記をそれぞれローディングスタート、ローディングエンドのタイミングで呼ぶ

QueryCollection.ts
//start Loading
const loadingstart = loading('Query a collection')
//Discovery query
const resquery = await queryCollection(url, apikey, environmentid, collectionid, version)
//end Loading
endloading(loadingstart, 'Query a collection Finished!!')

使用イメージ

cliLoading (1).gif

最後に

Loading.tsのspin_charや表示速度等をカスタマイズしていけば自分好みのローディングアニメーションを作ることもできますので是非活用ください。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?