Python print()関数の出力に色を付ける方法【ANSI・Colorama】

Pythonスクリプトの実行結果をターミナルに表示する際、ログレベル(エラー、警告、成功)に応じて色分けをすると、視認性が大幅に向上します。

print() 関数の出力を色付けするには、主に2つの方法があります。

  1. ANSIエスケープシーケンスを直接文字列に埋め込む
  2. Coloramaなどの専用ライブラリを使用する

この記事では、これら2つの方法について解説します。

目次

ANSIエスケープシーケンスの直接使用

多くのターミナルエミュレータ(LinuxやmacOSのターミナル、WindowsのWSLやWindows Terminalなど)は、ANSIエスケープシーケンスと呼ばれる特殊な制御コードをサポートしています。

これは \033[\x1b[ とも書きます)で始まる文字列で、その後に続くコードによって文字色、背景色、スタイル(太字など)を指定します。

基本的な使い方

色やスタイルを変更したい文字列の前に制御コードを挿入し、表示を元に戻したい場所で「リセットコード」(\033[0m) を挿入します。

# ANSIエスケープシーケンスを定数として定義
class TermColors:
    # --- 文字色 ---
    RED = '\033[31m'
    GREEN = '\033[32m'
    YELLOW = '\033[33m'
    BLUE = '\033[34m'
    
    # --- スタイル ---
    BOLD = '\033[1m'
    UNDERLINE = '\033[4m'
    
    # --- リセット ---
    RESET = '\033[0m' # 全てのリセット

# f-string を使った出力例
print(f"{TermColors.GREEN}処理成功:{TermColors.RESET} ファイル 'data.csv' は正常に処理されました。")
print(f"{TermColors.YELLOW}{TermColors.BOLD}警告:{TermColors.RESET} 設定ファイルが見つかりません。デフォルト値を使用します。")
print(f"{TermColors.RED}エラー:{TermColors.RESET} データベース接続に失敗しました。")
print(f"{TermColors.BLUE}{TermColors.UNDERLINE}参照URL:{TermColors.RESET} http://example.com/docs")

主な制御コード

以下は、よく使われるANSIエスケープシーケンスのコード一覧です。

コード意味コード意味
\033[30m黒(文字)\033[40m黒(背景)
\033[31m赤(文字)\033[41m赤(背景)
\033[32m緑(文字)\033[42m緑(背景)
\033[33m黄(文字)\033[43m黄(背景)
\033[34m青(文字)\033[44m青(背景)
\033[35mマゼンタ(文字)\033[45mマゼンタ(背景)
\033[36mシアン(文字)\033[46mシアン(背景)
\033[37m白(文字)\033[47m白(背景)
コード意味
\033[1m太字(または高輝度)
\033[4m<u>下線</u>(アンダーライン)
\033[7m色反転(文字色と背景色)
\033[0mすべての装飾をリセット

注意点: この方法は、環境(OSや使用するターミナル)に依存します。特にWindowsの古いコマンドプロンプト(cmd.exe)では、そのままでは動作しない場合があります。


Coloramaライブラリの使用(推奨)

OS間の互換性を考慮し、より安定して色付けを行うためには、Coloramaのようなサードパーティライブラリの使用が推奨されます。

Colorama は、Windows環境でもANSIエスケープシーケンスが機能するように内部で処理をラップしてくれるため、クロスプラットフォームで同じコードを使用できます。

1. インストール

まず、pipを使用して Colorama をインストールします。

pip install colorama

2. Colorama の使い方

colorama を使用するには、スクリプトの最初に init() を呼び出す必要があります。

Fore(文字色)、Back(背景色)、Style(スタイル)を使用して色を指定します。

from colorama import init, Fore, Back, Style

# Windows環境でANSIシーケンスを有効にするために init() を呼び出す
# autoreset=True にすると、print() の呼び出し後に自動でスタイルがリセットされる
init(autoreset=True) 

# Fore (文字色)
print(Fore.CYAN + "システム情報を表示します。")
print(Fore.RED + "致命的なエラーが発生しました。")

# Back (背景色)
print(Back.YELLOW + Fore.BLACK + " 注意: メンテナンスが予定されています。 ")

# Style (スタイル)
print(Style.BRIGHT + Fore.GREEN + "接続テストに成功しました。")

# autoreset=False (デフォルト) の場合は、手動でリセットが必要
init(autoreset=False)
print(Fore.MAGENTA + "このテキストはマゼンタです。")
print("このテキストはマゼンタのままです。")
print(Style.RESET_ALL + "ここでリセットしました。")

Colorama を使うことで、環境の違いを意識することなく、print() の出力に色を付けることができます。


まとめ

ターミナル出力の色付けは、スクリプトの可読性を高めるのに役立ちます。

  • ANSIエスケープシーケンス:
    • ライブラリ不要で手軽に実装できます。
    • \033[31m(赤)のように指定し、\033[0m でリセットします。
    • 環境によっては動作しない場合があります。
  • Colorama ライブラリ:
    • pip install colorama で導入できます。
    • init() を呼び出すことで、Windowsを含むクロスプラットフォームで動作します。
    • Fore.REDStyle.BRIGHT のように、より直感的に指定できます。

配布するアプリケーションや、Windowsでの動作を保証する必要がある場合は Colorama の使用を、Linux/macOS環境のみを対象とした個人用スクリプトであれば手軽なANSIシーケンスを、といった使い分けが考えられます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次