Node.jsを使用してコマンドラインに出力する

consoleモジュールを使用した基本的な出力

Node.jsは、コマンドラインと対話するための非常に便利な方法を多数提供するconsoleモジュールを提供します。

これは基本的に、ブラウザにあるconsoleオブジェクトと同じです。

最も基本的で最もよく使用されるメソッドは、渡された文字列をコンソールに出力するconsole.log()です。

オブジェクトを渡すと、文字列としてレンダリングされます。

console.logには複数の変数を渡すことができます。例えば、

const x = 'x';
const y = 'y';
console.log(x, y);

とすると、Node.jsは両方を印刷します。

変数とフォーマット指定子を渡すことで、きれいなフレーズをフォーマットすることもできます。

例えば

console.log('My %s has %d ears', 'cat', 2);
  • %sは変数を文字列としてフォーマットします
  • %dは変数を数値としてフォーマットします
  • %iは変数を整数部分のみにフォーマットします
  • %oは変数をオブジェクトとしてフォーマットします

console.log('%o', Number);

コンソールのクリア

console.clear()はコンソールをクリアします(動作は使用されるコンソールに依存する場合があります)

要素のカウント

console.count()は便利なメソッドです。

このコードを見てください

const x = 1;
const y = 2;
const z = 3;

console.count(
  'The value of x is ' + x + ' and has been checked .. how many times?'
);

console.count(
  'The value of x is ' + x + ' and has been checked .. how many times?'
);

console.count(
  'The value of y is ' + y + ' and has been checked .. how many times?'
);

console.count()は、文字列が出力された回数をカウントし、その横にカウントを出力します

りんごとりんごを数えることができます

const oranges = ['orange', 'orange'];
const apples = ['just one apple'];

oranges.forEach(fruit => {
  console.count(fruit);
});
apples.forEach(fruit => {
  console.count(fruit);
});

カウントのリセット

console.countReset()メソッドは、console.count()で使用されるカウンタをリセットします。

これを説明するために、りんごとりんごの例を使用します。

const oranges = ['orange', 'orange'];
const apples = ['just one apple'];

oranges.forEach(fruit => {
  console.count(fruit);
});
apples.forEach(fruit => {
  console.count(fruit);
});

console.countReset('orange');

oranges.forEach(fruit => {
  console.count(fruit);
});

console.countReset('orange')の呼び出しが値カウンタをゼロにリセットする方法に注目してください。

関数の呼び出しスタックトレースを出力すると便利な場合があります。たとえば、「どのようにしてコードのその部分に到達しましたか?」という質問に答えるためです。

console.trace()を使用してこれを行うことができます

const function2 = () => console.trace();
const function1 = () => function2();
function1();

これにより、スタックトレースが出力されます。これは、Node.js REPLでこれを試すと出力されるものです

Trace
    at function2 (repl:1:33)
    at function1 (repl:1:25)
    at repl:1:1
    at ContextifyScript.Script.runInThisContext (vm.js:44:33)
    at REPLServer.defaultEval (repl.js:239:29)
    at bound (domain.js:301:14)
    at REPLServer.runBound [as eval] (domain.js:314:12)
    at REPLServer.onLine (repl.js:440:10)
    at emitOne (events.js:120:20)
    at REPLServer.emit (events.js:210:7)

経過時間の計算

time()timeEnd()を使用して、関数が実行に要する時間を簡単に計算できます

const doSomething = () => console.log('test');
const measureDoingSomething = () => {
  console.time('doSomething()');
  // do something, and measure the time it takes
  doSomething();
  console.timeEnd('doSomething()');
};
measureDoingSomething();

stdoutとstderr

見てきたように、console.logはコンソールにメッセージを出力するのに最適です。これは、標準出力、つまりstdoutと呼ばれます。

console.errorstderrストリームに出力します。

コンソールには表示されませんが、エラーログに表示されます。

出力の色付け

エスケープシーケンスを使用して、コンソールでのテキストの出力を色付けできます。エスケープシーケンスは、色を識別する一連の文字です。

console.log('\x1b[33m%s\x1b[0m', 'hi!');

Node.js REPLで試してみると、hi!が黄色で出力されます。

ただし、これはこれを行うための低レベルな方法です。コンソール出力を色付けする最も簡単な方法は、ライブラリを使用することです。Chalkはそのようなライブラリの1つであり、色付けに加えて、テキストを太字、斜体、または下線にするなどの他のスタイル設定機能も支援します。

npm install chalkでインストールすると、使用できます

const chalk = require('chalk');

console.log(chalk.yellow('hi!'));

chalk.yellowを使用する方が、エスケープコードを覚えるよりもはるかに便利であり、コードははるかに読みやすくなります。

上記のプロジェクトリンクで、その他の使用例を確認してください。

プログレスバーの作成

Progressは、コンソールにプログレスバーを作成するための素晴らしいパッケージです。npm install progressを使用してインストールします

このスニペットは、10ステップのプログレスバーを作成し、100ミリ秒ごとに1ステップが完了します。バーが完了すると、間隔をクリアします

const ProgressBar = require('progress');

const bar = new ProgressBar(':bar', { total: 10 });
const timer = setInterval(() => {
  bar.tick();
  if (bar.complete) {
    clearInterval(timer);
  }
}, 100);