プログラミングをしていると、ターミナル(コマンドプロンプト)に表示される文字に、赤や緑の色が付いていることがありますよね。
エラーメッセージは赤、成功メッセージは緑、警告は黄色。こんな風に色分けされていると、一目で状況が分かって便利です。
この色付き文字を実現しているのが、ANSIカラーコード(ANSIエスケープシーケンス)なんです。
ANSIカラーコードは、文字に色を付けたり、太字にしたり、下線を引いたりするための「特殊なコード」。
例えるなら、テキストに「ここから赤で表示して」という指示を埋め込むようなものです。
元々は1970年代に、コンピュータの端末を制御するために作られた規格ですが、現在でも多くのターミナルやコンソールで使われています。
この記事では、ANSIカラーコードの基礎から、実際の使い方、様々なプログラミング言語での実装例まで、初心者の方にも分かりやすく解説していきます。
ANSIカラーコードの基礎知識

ANSIとは
ANSIは「American National Standards Institute(米国規格協会)」の略称です。
様々な技術規格を標準化する団体で、ANSIカラーコードもその一つの標準規格なんです。
正式名称:
ANSI X3.64 または ISO/IEC 6429(後に国際標準化)
エスケープシーケンスとは
エスケープシーケンスは、通常の文字とは異なる特殊な処理を指示するためのコードです。
基本構造:
ESC + [ + パラメータ + コマンド文字
ESC(エスケープ文字):
- ASCII コード:27(10進数)、1B(16進数)、033(8進数)
- プログラムでは
\x1bや\033で表現される
実例:
\x1b[31m ← 赤色に変更
\x1b[0m ← リセット(元に戻す)
どこで使える?
ANSIカラーコードは、多くのターミナル・コンソールで使用できます。
対応環境:
- Linux/Unix:ほとんどのターミナル(bash、zsh、fishなど)
- macOS:Terminal、iTerm2など
- Windows:
- Windows 10以降のコマンドプロンプト
- PowerShell
- Windows Terminal
- Git Bash
- エディタ/IDE:VS Code、PyCharm、IntelliJ IDEAのターミナル
対応していない環境:
- 古いWindowsのコマンドプロンプト(Windows 10より前)
- 一部の組み込み環境
- テキストファイル(エディタで開くと、コードがそのまま表示される)
基本的な色とスタイル
ANSIカラーコードでできることを見ていきましょう。
前景色(文字の色)
基本8色:
| 色 | コード | 表示例 |
|---|---|---|
| 黒 | \x1b[30m | 黒色の文字 |
| 赤 | \x1b[31m | 赤色の文字 |
| 緑 | \x1b[32m | 緑色の文字 |
| 黄 | \x1b[33m | 黄色の文字 |
| 青 | \x1b[34m | 青色の文字 |
| マゼンタ | \x1b[35m | マゼンタの文字 |
| シアン | \x1b[36m | シアンの文字 |
| 白 | \x1b[37m | 白色の文字 |
明るい色(高輝度):
90番台を使うと、より明るい色になります。
| 色 | コード |
|---|---|
| 明るい黒(灰色) | \x1b[90m |
| 明るい赤 | \x1b[91m |
| 明るい緑 | \x1b[92m |
| 明るい黄 | \x1b[93m |
| 明るい青 | \x1b[94m |
| 明るいマゼンタ | \x1b[95m |
| 明るいシアン | \x1b[96m |
| 明るい白 | \x1b[97m |
背景色
基本8色:
| 色 | コード |
|---|---|
| 黒背景 | \x1b[40m |
| 赤背景 | \x1b[41m |
| 緑背景 | \x1b[42m |
| 黄背景 | \x1b[43m |
| 青背景 | \x1b[44m |
| マゼンタ背景 | \x1b[45m |
| シアン背景 | \x1b[46m |
| 白背景 | \x1b[47m |
明るい背景色:
100番台で明るい背景色になります。
| 色 | コード |
|---|---|
| 明るい黒背景(灰色) | \x1b[100m |
| 明るい赤背景 | \x1b[101m |
| 明るい緑背景 | \x1b[102m |
| 明るい黄背景 | \x1b[103m |
| 明るい青背景 | \x1b[104m |
| 明るいマゼンタ背景 | \x1b[105m |
| 明るいシアン背景 | \x1b[106m |
| 明るい白背景 | \x1b[107m |
テキストスタイル
色以外にも、様々な装飾ができます。
| スタイル | コード | 効果 |
|---|---|---|
| リセット | \x1b[0m | すべての装飾を解除 |
| 太字 | \x1b[1m | 文字を太くする |
| 薄い | \x1b[2m | 文字を薄くする |
| イタリック | \x1b[3m | 斜体にする |
| 下線 | \x1b[4m | 下線を引く |
| 点滅 | \x1b[5m | 点滅させる(多くの環境で無効) |
| 反転 | \x1b[7m | 前景色と背景色を反転 |
| 取り消し線 | \x1b[9m | 取り消し線を引く |
組み合わせの例
複数のスタイルを組み合わせることもできます。
太字の赤文字:
\x1b[1;31m太字の赤文字\x1b[0m
下線付きの青文字に黄色背景:
\x1b[4;34;43m下線青文字黄背景\x1b[0m
重要: 必ず最後に \x1b[0m でリセットしましょう。リセットしないと、その後の文字もすべて同じスタイルになってしまいます。
256色とRGBカラー
基本の16色だけでなく、より多くの色を表現できます。
256色モード
前景色(文字色):
\x1b[38;5;{色番号}m
背景色:
\x1b[48;5;{色番号}m
色番号の範囲:
- 0〜15:標準16色(基本8色 + 明るい8色)
- 16〜231:216色のカラーパレット(6×6×6のRGBキューブ)
- 232〜255:24段階のグレースケール
計算方法(16〜231):
色番号 = 16 + (36 × R) + (6 × G) + B
R、G、Bはそれぞれ0〜5の値
実例:
# オレンジ色(R=5, G=3, B=0)
色番号 = 16 + (36 × 5) + (6 × 3) + 0 = 214
# コード
\x1b[38;5;214m
RGB(True Color)
24ビットカラーをサポートするターミナルでは、1677万色を使えます。
前景色:
\x1b[38;2;{R};{G};{B}m
背景色:
\x1b[48;2;{R};{G};{B}m
R、G、Bは0〜255の値です。
実例:
# オレンジ色(RGB: 255, 165, 0)
\x1b[38;2;255;165;0m
# 水色の背景(RGB: 173, 216, 230)
\x1b[48;2;173;216;230m
対応環境:
最近のターミナル(iTerm2、Windows Terminal、最新のLinuxターミナルなど)の多くが対応しています。
プログラミング言語での実装
実際のコードでANSIカラーコードを使ってみましょう。
Pythonでの実装
基本的な使い方:
# 直接コードを使う
print("\x1b[31mこれは赤色\x1b[0m")
print("\x1b[32mこれは緑色\x1b[0m")
print("\x1b[1;34m太字の青色\x1b[0m")
# 複数行にまたがる場合
print("\x1b[33m")
print("この行は黄色")
print("この行も黄色")
print("\x1b[0m")
print("この行は通常の色")
関数化して使いやすくする:
class Colors:
# リセット
RESET = "\x1b[0m"
# 基本色
BLACK = "\x1b[30m"
RED = "\x1b[31m"
GREEN = "\x1b[32m"
YELLOW = "\x1b[33m"
BLUE = "\x1b[34m"
MAGENTA = "\x1b[35m"
CYAN = "\x1b[36m"
WHITE = "\x1b[37m"
# スタイル
BOLD = "\x1b[1m"
UNDERLINE = "\x1b[4m"
def colored(text, color):
return f"{color}{text}{Colors.RESET}"
# 使用例
print(colored("エラーメッセージ", Colors.RED))
print(colored("成功メッセージ", Colors.GREEN))
print(f"{Colors.BOLD}{Colors.BLUE}太字の青文字{Colors.RESET}")
coloramaライブラリ(推奨):
Windows対応も含めて、より簡単に色を使えます。
from colorama import init, Fore, Back, Style
# 初期化(Windowsで必要)
init()
# 使用例
print(Fore.RED + "赤色の文字")
print(Fore.GREEN + "緑色の文字")
print(Fore.BLUE + Back.YELLOW + "青文字に黄色背景")
print(Style.RESET_ALL + "通常に戻る")
# 自動リセット
print(Fore.RED + "赤色" + Style.RESET_ALL)
Bashでの実装
基本的な使い方:
#!/bin/bash
# 色の定義
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
RESET='\033[0m'
# 使用例
echo -e "${RED}これは赤色${RESET}"
echo -e "${GREEN}これは緑色${RESET}"
echo -e "${YELLOW}これは黄色${RESET}"
# 関数化
print_error() {
echo -e "${RED}ERROR: $1${RESET}"
}
print_success() {
echo -e "${GREEN}SUCCESS: $1${RESET}"
}
# 使用例
print_error "ファイルが見つかりません"
print_success "処理が完了しました"
実用的なスクリプト例:
#!/bin/bash
# 色定義
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
RESET='\033[0m'
echo -e "${BLUE}=== システムチェック開始 ===${RESET}"
# ディスク使用量チェック
DISK_USAGE=$(df -h / | tail -1 | awk '{print $5}' | sed 's/%//')
if [ $DISK_USAGE -gt 90 ]; then
echo -e "${RED}[ERROR] ディスク使用率が高すぎます: ${DISK_USAGE}%${RESET}"
elif [ $DISK_USAGE -gt 70 ]; then
echo -e "${YELLOW}[WARN] ディスク使用率: ${DISK_USAGE}%${RESET}"
else
echo -e "${GREEN}[OK] ディスク使用率: ${DISK_USAGE}%${RESET}"
fi
JavaScriptでの実装
Node.js環境:
// 色の定義
const colors = {
reset: "\x1b[0m",
red: "\x1b[31m",
green: "\x1b[32m",
yellow: "\x1b[33m",
blue: "\x1b[34m",
magenta: "\x1b[35m",
cyan: "\x1b[36m",
bold: "\x1b[1m"
};
// ヘルパー関数
function colored(text, color) {
return `${color}${text}${colors.reset}`;
}
// 使用例
console.log(colored("エラーメッセージ", colors.red));
console.log(colored("成功メッセージ", colors.green));
console.log(`${colors.bold}${colors.blue}太字の青${colors.reset}`);
chalkライブラリ(推奨):
const chalk = require('chalk');
// 使用例
console.log(chalk.red('エラーメッセージ'));
console.log(chalk.green('成功メッセージ'));
console.log(chalk.blue.bold('太字の青文字'));
console.log(chalk.bgYellow.black('黄色背景に黒文字'));
// RGBカラー
console.log(chalk.rgb(255, 136, 0)('オレンジ色'));
console.log(chalk.hex('#FF8800')('16進数カラー'));
その他の言語
Java:
public class AnsiColors {
public static final String RESET = "\u001B[0m";
public static final String RED = "\u001B[31m";
public static final String GREEN = "\u001B[32m";
public static void main(String[] args) {
System.out.println(RED + "赤色の文字" + RESET);
System.out.println(GREEN + "緑色の文字" + RESET);
}
}
C言語:
#include <stdio.h>
#define RESET "\x1b[0m"
#define RED "\x1b[31m"
#define GREEN "\x1b[32m"
int main() {
printf(RED "赤色の文字\n" RESET);
printf(GREEN "緑色の文字\n" RESET);
return 0;
}
Ruby:
# 色の定義
RED = "\e[31m"
GREEN = "\e[32m"
RESET = "\e[0m"
# 使用例
puts "#{RED}赤色の文字#{RESET}"
puts "#{GREEN}緑色の文字#{RESET}"
実用例:ログ出力やUI表示

実際の開発でどう活用するか見てみましょう。
ログレベルの色分け
Pythonでのロガー実装:
import logging
class ColoredFormatter(logging.Formatter):
COLORS = {
'DEBUG': '\x1b[36m', # シアン
'INFO': '\x1b[32m', # 緑
'WARNING': '\x1b[33m', # 黄
'ERROR': '\x1b[31m', # 赤
'CRITICAL': '\x1b[1;31m' # 太字の赤
}
RESET = '\x1b[0m'
def format(self, record):
log_color = self.COLORS.get(record.levelname, self.RESET)
record.levelname = f"{log_color}{record.levelname}{self.RESET}"
record.msg = f"{log_color}{record.msg}{self.RESET}"
return super().format(record)
# ロガーの設定
logger = logging.getLogger(__name__)
handler = logging.StreamHandler()
handler.setFormatter(ColoredFormatter('%(levelname)s: %(message)s'))
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
# 使用例
logger.debug("デバッグメッセージ")
logger.info("情報メッセージ")
logger.warning("警告メッセージ")
logger.error("エラーメッセージ")
logger.critical("重大なエラー")
進捗バーの表示
import time
import sys
def progress_bar(current, total, bar_length=50):
percent = current / total
filled = int(bar_length * percent)
# バーの作成
bar = '█' * filled + '░' * (bar_length - filled)
# 色の選択
if percent < 0.5:
color = '\x1b[31m' # 赤
elif percent < 0.8:
color = '\x1b[33m' # 黄
else:
color = '\x1b[32m' # 緑
# 表示
sys.stdout.write(f'\r{color}[{bar}] {percent*100:.1f}%\x1b[0m')
sys.stdout.flush()
# 使用例
total = 100
for i in range(total + 1):
progress_bar(i, total)
time.sleep(0.05)
print() # 改行
コマンドラインツールのUI
def print_header(text):
print(f"\n\x1b[1;34m{'=' * 50}")
print(f"{text:^50}")
print(f"{'=' * 50}\x1b[0m\n")
def print_success(text):
print(f"\x1b[32m✓ {text}\x1b[0m")
def print_error(text):
print(f"\x1b[31m✗ {text}\x1b[0m")
def print_warning(text):
print(f"\x1b[33m⚠ {text}\x1b[0m")
def print_info(text):
print(f"\x1b[36mℹ {text}\x1b[0m")
# 使用例
print_header("システムチェック")
print_info("チェックを開始しています...")
print_success("ディスク容量: OK")
print_warning("メモリ使用率が高めです")
print_error("ネットワーク接続に失敗しました")
Git風のステータス表示
def git_status():
print("\x1b[1mOn branch\x1b[0m \x1b[32mmain\x1b[0m")
print("\x1b[1mChanges to be committed:\x1b[0m")
print(" \x1b[32mnew file: file1.txt\x1b[0m")
print(" \x1b[32mmodified: file2.txt\x1b[0m")
print()
print("\x1b[1mChanges not staged for commit:\x1b[0m")
print(" \x1b[31mmodified: file3.txt\x1b[0m")
print(" \x1b[31mdeleted: file4.txt\x1b[0m")
git_status()
よくある問題と対策
実際に使う際の注意点を見ていきましょう。
問題1:Windowsで色が表示されない
原因:
古いWindowsのコマンドプロンプトは、ANSIカラーコードに対応していません。
対策:
方法1:Windows 10以降の機能を有効化(Python)
import sys
import os
# Windows 10以降でANSIを有効化
if sys.platform == "win32":
os.system("") # この行でANSI対応が有効になる
# これで色が使える
print("\x1b[31m赤色\x1b[0m")
方法2:coloramaライブラリを使う
from colorama import init, Fore, Style
# Windowsでも自動的に動作
init()
print(Fore.RED + "赤色" + Style.RESET_ALL)
方法3:Windows Terminalを使う
最新のWindows Terminalは、標準でANSIカラーコードに対応しています。
問題2:ファイルに出力すると文字化けする
原因:
ANSIカラーコードは、ターミナル表示用です。ファイルに保存すると、エスケープシーケンスがそのまま書き込まれます。
対策:
出力先がターミナルかファイルかを判定します。
import sys
def colored(text, color):
# 出力先がターミナルの場合のみ色を付ける
if sys.stdout.isatty():
return f"{color}{text}\x1b[0m"
else:
return text
# 使用例
print(colored("赤色", "\x1b[31m"))
問題3:リセットし忘れて色が残る
原因:
\x1b[0m を付け忘れると、その後の出力もすべて同じ色になります。
対策:
必ずリセットを付けるか、コンテキストマネージャーを使います。
from contextlib import contextmanager
@contextmanager
def colored_output(color):
print(color, end='')
try:
yield
finally:
print('\x1b[0m', end='')
# 使用例(自動的にリセットされる)
with colored_output('\x1b[31m'):
print("この部分は赤色")
print("この行も赤色")
# ここからは通常の色
問題4:環境によって見え方が違う
原因:
ターミナルの背景色やカラースキームによって、色の見え方が変わります。
対策:
明確なコントラストを確保:
- エラー:赤(または明るい赤)
- 成功:緑(または明るい緑)
- 警告:黄色
- 情報:青またはシアン
環境変数でチェック:
import os
# NO_COLORが設定されていたら色を無効化
USE_COLOR = os.environ.get('NO_COLOR') is None
def colored(text, color):
if USE_COLOR:
return f"{color}{text}\x1b[0m"
return text
問題5:パイプやリダイレクトで色が邪魔
状況:
python script.py | grep "エラー"
このように、他のコマンドにパイプすると、ANSIコードが邪魔になることがあります。
対策:
出力先がターミナルかどうかを判定します(問題2と同じ)。
import sys
USE_COLOR = sys.stdout.isatty()
便利なライブラリとツール
実用的なライブラリを紹介します。
Python
colorama:
- クロスプラットフォーム対応
- シンプルなAPI
termcolor:
- より多くのスタイルオプション
rich:
- 高機能なターミナル出力ライブラリ
- テーブル、進捗バー、構文ハイライトなど
from rich.console import Console
from rich.table import Table
console = Console()
# カラフルな出力
console.print("Success!", style="bold green")
console.print("Error!", style="bold red")
# テーブル
table = Table(title="ユーザー一覧")
table.add_column("名前", style="cyan")
table.add_column("年齢", style="magenta")
table.add_row("田中", "25")
table.add_row("佐藤", "30")
console.print(table)
JavaScript/Node.js
chalk:
- 最も人気のあるカラー表示ライブラリ
colors:
- シンプルなAPI
cli-color:
- より多機能
その他の言語
Ruby: colorize gem
Go: fatih/color パッケージ
Rust: colored クレート
よくある疑問:ANSIカラーコードについて
Q1:ANSIカラーコードはすべての環境で使える?
A:ほとんどの現代的な環境で使えますが、例外もあります
使える環境:
- Linux/Unixのターミナル
- macOSのターミナル
- Windows 10以降のコマンドプロンプト
- 最近のIDE/エディタ
使えない環境:
- 古いWindows(10より前)のコマンドプロンプト
- プレーンテキストファイル
- 一部のログビューアー
Q2:256色とRGBカラー、どちらを使うべき?
A:互換性を優先するなら256色、見た目を優先するならRGBです
256色モード:
- ほとんどのターミナルで対応
- 十分な色数
RGBカラー:
- 最新のターミナルで対応
- より正確な色表現
実用上は、基本16色で十分な場合が多いです。
Q3:パフォーマンスへの影響は?
A:ほとんど無視できるレベルです
ANSIコードは単純な文字列なので、処理コストは非常に低いです。
ただし、大量の出力(数百万行)をする場合は、色を無効化するオプションを用意すると良いでしょう。
Q4:Webブラウザで使える?
A:直接は使えませんが、変換ライブラリがあります
ブラウザのコンソールでは、独自のカラー表示方法があります:
// ブラウザのコンソール
console.log('%c赤色', 'color: red; font-weight: bold;');
ANSIコードをHTML/CSSに変換するライブラリ(ansi-to-htmlなど)もあります。
Q5:色以外に何ができる?
A:カーソル移動やテキストクリアもできます
ANSIエスケープシーケンスでは、色以外にも:
- カーソル位置の移動
- 画面のクリア
- 行の削除
- スクロール
などが可能です。
例:
# カーソルを上に1行移動
print('\x1b[1A', end='')
# 行をクリア
print('\x1b[2K', end='')
# 画面全体をクリア
print('\x1b[2J\x1b[H', end='')
まとめ:ANSIカラーコードでターミナルを見やすく
ANSIカラーコードは、ターミナル出力を見やすく、分かりやすくする強力なツールです。
この記事のポイント:
✅ ANSIカラーコードとは
ターミナルで文字に色やスタイルを付けるエスケープシーケンス
✅ 基本構造
ESC + [ + パラメータ + コマンド文字
✅ 使える色
基本16色、256色モード、RGBカラー(1677万色)
✅ スタイル
太字、下線、イタリック、反転など
✅ 対応環境
Linux、macOS、Windows 10以降、最近のIDE
✅ 実装方法
Python、Bash、JavaScript、Java、Cなど多くの言語で使用可能
✅ 便利なライブラリ
colorama(Python)、chalk(JavaScript)、rich(Python)
✅ 注意点
必ずリセット、環境判定、ファイル出力時の考慮
ANSIカラーコードを使うと、ログメッセージ、エラー表示、進捗バーなどが格段に見やすくなります。
実用的なアドバイス:
- まず基本16色から始める:十分実用的
- ライブラリを活用:coloramaやchalkが便利
- 必ずリセット:
\x1b[0mを忘れずに - 環境を判定:ターミナルかファイルかをチェック
- 無効化オプション:
--no-colorなどのオプションを用意
シンプルながら効果的なANSIカラーコード。コマンドラインツールやスクリプトの出力を、ぜひ色鮮やかに、そして分かりやすくしてみてください!


コメント