Node.jsのANSIカラー - Console.logでカラーコードを使用

ANSIエスケープコードを使用してNode.jsのconsole.log出力にカラーを追加。生の\x1bシーケンス、chalkライブラリ、組み込みutil.inspect.colorsによるスタイル付きCLI出力をカバー。

Language Examples

詳細な説明

Node.jsでのカラーコンソール出力

Node.jsはANSIシーケンスのエスケープ文字として\x1bを使用します。このガイドではネイティブとライブラリベースの両方のアプローチをカバーします。

生のANSIシーケンス

// 基本色
console.log("\x1b[31m赤いテキスト\x1b[0m");
console.log("\x1b[1;32m太字緑\x1b[0m");

// 256色
console.log("\x1b[38;5;208mオレンジ\x1b[0m");

// トゥルーカラー
console.log("\x1b[38;2;255;165;0mトゥルーオレンジ\x1b[0m");

カラーユーティリティモジュール

const colors = {
  reset: "\x1b[0m",
  bold: "\x1b[1m",
  dim: "\x1b[2m",
  red: "\x1b[31m",
  green: "\x1b[32m",
  yellow: "\x1b[33m",
  blue: "\x1b[34m",
  magenta: "\x1b[35m",
  cyan: "\x1b[36m",
  white: "\x1b[37m",
  bgRed: "\x1b[41m",
  bgGreen: "\x1b[42m",
};

const colorize = (text, color) =>
  `${colors[color]}${text}${colors.reset}`;

// 使い方
console.log(colorize("エラー!", "red"));
console.log(colorize("成功!", "green"));

カラーサポートの検出

const supportsColor = process.stdout.isTTY
  && !process.env.NO_COLOR
  && process.env.TERM !== "dumb";

function maybeColor(text, code) {
  if (supportsColor) {
    return `\x1b[${code}m${text}\x1b[0m`;
  }
  return text;
}

ストリームでの使用

// より詳細な制御のためにstdoutに直接書き込み
process.stdout.write("\x1b[33m処理中... \x1b[0m");
// ... 作業実行 ...
process.stdout.write("\x1b[32m完了\x1b[0m\n");

ESMとTypeScript

// color.ts
export const ANSI = {
  red: (s: string) => `\x1b[31m${s}\x1b[0m`,
  green: (s: string) => `\x1b[32m${s}\x1b[0m`,
  bold: (s: string) => `\x1b[1m${s}\x1b[0m`,
  rgb: (r: number, g: number, b: number, s: string) =>
    `\x1b[38;2;${r};${g};${b}m${s}\x1b[0m`,
} as const;

console.log(ANSI.red("エラー"));
console.log(ANSI.rgb(255, 165, 0, "オレンジ"));

ユースケース

Node.js開発者はcommanderやyargsで構築されたCLIツール、カスタムビルドスクリプト、テストレポーター、ロギングユーティリティ、npmライフサイクルスクリプトでANSIカラーを使用します。生のエスケープコードによる軽量なアプローチは依存関係の追加を避けられ、chalkのようなライブラリは複雑なアプリケーション向けにリッチなAPIを提供します。ESLint、Prettier、Webpackなどの人気ツールはカラー出力を広範に使用しています。

試してみる — ANSI Color Code Reference

フルツールを開く