PowerShellでANSIエスケープシーケンスを有効にする方法:カラー表示で作業効率アップ!

Windows

Windows PowerShellでプログラムを実行するとき、「文字に色をつけたい」「太字や下線を使いたい」と感じたことはありませんか?

これはANSI(アンシー)エスケープシーケンスを利用することで実現できます。

ただし、Windowsのバージョンや設定によっては、そのままでは使えない場合があります

。今回はPowerShellでANSIエスケープシーケンスを有効にして、カラー出力を実現する方法をわかりやすく説明します。

スポンサーリンク

ANSIエスケープシーケンスってなに?

ANSIエスケープシーケンスとは?

ANSIエスケープシーケンスとは、コンピューターの画面に色やスタイル(太字、下線など)を指示する特殊なコードのことです。

LinuxやmacOSでは昔から使われていて、最近ではWindowsでも対応が進んでいます。

何ができるの?

ANSIエスケープシーケンスでできることは、主に以下のようなものです:

  • テキストの色分け:文字を赤や青などの色で表示
  • 背景色の変更:文字の後ろの色を変える
  • スタイルの付与:太字、下線、点滅などの装飾

なぜ便利なの?

色分けができると、以下のような利点があります:

  • エラーメッセージを赤で表示して、すぐに気づける
  • 成功メッセージを緑で表示して、安心感を与える
  • 重要な情報を目立たせて、見落としを防ぐ

実際の見た目の違い

色なしの場合

情報: ファイルの処理が完了しました
警告: メモリが不足しています
エラー: ファイルが見つかりません

色ありの場合

情報: ファイルの処理が完了しました (青色で表示)
警告: メモリが不足しています (黄色で表示)
エラー: ファイルが見つかりません (赤色で表示)

色があると、ぱっと見てどんなメッセージかがすぐにわかります。

PowerShellでANSIを使う前提条件

PowerShellでANSIシーケンスを使うには、いくつかの条件を満たす必要があります。

対応バージョン

以下のバージョンが必要です:

  • Windows 10 バージョン1511以降
  • Windows Terminal または PowerShell 7以降(推奨)

自分のバージョンを確認する方法

Windowsのバージョン確認

# Windowsのバージョンを確認
Get-ComputerInfo | Select-Object WindowsVersion

PowerShellのバージョン確認

# PowerShellのバージョンを確認
$PSVersionTable.PSVersion

Windows Console Hostの設定

デフォルトでは無効になっていることがあるため、設定の変更が必要な場合があります。

具体的な方法は次の章で詳しく説明します。

有効化の手順

手順1:Windows Terminalの使用(おすすめ)

PowerShell 7以降をWindows Terminalで使用すれば、ほとんどのANSIエスケープシーケンスがそのまま使えます。

Windows Terminalのインストール方法

  1. Microsoft Storeを開く
  2. 「Windows Terminal」を検索
  3. インストールする
  4. PowerShell 7もインストール(Microsoft Storeで「PowerShell」を検索)

使用例

# 赤色で文字を表示
Write-Host "`e[31mこれは赤色の文字です`e[0m"

# 緑色で文字を表示
Write-Host "`e[32mこれは緑色の文字です`e[0m"

# 青色で文字を表示
Write-Host "`e[34mこれは青色の文字です`e[0m"

手順2:レガシーコンソールの無効化

古いコンソールモードではANSIが使えないため、次の手順でレガシーモードを無効にします。

設定手順

  1. PowerShellのウィンドウを右クリック
  2. 「プロパティ」を選択
  3. 「オプション」タブを開く
  4. 「レガシ コンソールを使用する」のチェックを外す
  5. 「OK」をクリック
  6. PowerShellを再起動

手順3:環境変数の設定(かんたんな方法)

環境変数を設定することで、ANSIエスケープシーケンスを有効にできます。

# 現在のセッションで有効化
$env:TERM = "xterm-256color"

# PowerShellプロファイルに追加(永続化)
Add-Content $PROFILE "`$env:TERM = 'xterm-256color'"

手順4:レジストリ編集(上級者向け)

より確実に有効化したい場合は、レジストリを編集します。

注意:レジストリの変更は慎重に行ってください

# レジストリキーを設定
Set-ItemProperty -Path "HKCU:\Console" -Name "VirtualTerminalLevel" -Value 1 -Type DWord

手動でレジストリを編集する場合

  1. Windows + R キーを押す
  2. 「regedit」と入力してEnter
  3. HKEY_CURRENT_USER\Console に移動
  4. 新しいDWORD値「VirtualTerminalLevel」を作成
  5. 値を「1」に設定

基本的なANSIエスケープシーケンス

色の指定方法

文字色

Write-Host "`e[30m黒色`e[0m"      # 黒
Write-Host "`e[31m赤色`e[0m"      # 赤
Write-Host "`e[32m緑色`e[0m"      # 緑
Write-Host "`e[33m黄色`e[0m"      # 黄
Write-Host "`e[34m青色`e[0m"      # 青
Write-Host "`e[35m紫色`e[0m"      # 紫
Write-Host "`e[36m水色`e[0m"      # 水色
Write-Host "`e[37m白色`e[0m"      # 白

背景色

Write-Host "`e[41m赤背景`e[0m"    # 赤背景
Write-Host "`e[42m緑背景`e[0m"    # 緑背景
Write-Host "`e[43m黄背景`e[0m"    # 黄背景
Write-Host "`e[44m青背景`e[0m"    # 青背景

文字スタイル

Write-Host "`e[1m太字`e[0m"       # 太字
Write-Host "`e[4m下線`e[0m"       # 下線
Write-Host "`e[7m反転`e[0m"       # 文字と背景の色を反転

コードの説明

  • `e :エスケープ文字(PowerShell 6以降)
  • [31m :赤色の指定
  • [0m :スタイルのリセット(元の色に戻す)

古いPowerShellでは `e の代わりに $([char]27) を使います。

# 古いPowerShellでの書き方
Write-Host "$([char]27)[31m赤色の文字$([char]27)[0m"

実用的な使用例

ログレベル別の表示

function Write-Log {
    param(
        [string]$Message,
        [string]$Level = "INFO"
    )
    
    $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
    
    switch ($Level) {
        "INFO" {
            Write-Host "`e[36m[$timestamp] [INFO] $Message`e[0m"
        }
        "WARNING" {
            Write-Host "`e[33m[$timestamp] [WARNING] $Message`e[0m"
        }
        "ERROR" {
            Write-Host "`e[31m[$timestamp] [ERROR] $Message`e[0m"
        }
        "SUCCESS" {
            Write-Host "`e[32m[$timestamp] [SUCCESS] $Message`e[0m"
        }
    }
}

# 使用例
Write-Log "アプリケーションが開始されました" "INFO"
Write-Log "設定ファイルが見つかりません" "WARNING"
Write-Log "データベースに接続できません" "ERROR"
Write-Log "処理が正常に完了しました" "SUCCESS"

プログレスバーの表示

function Show-Progress {
    param(
        [int]$Current,
        [int]$Total,
        [string]$Activity = "処理中"
    )
    
    $percent = [math]::Round(($Current / $Total) * 100)
    $completed = [math]::Round(($percent / 100) * 20)
    $remaining = 20 - $completed
    
    $bar = "`e[32m" + ("█" * $completed) + "`e[37m" + ("░" * $remaining) + "`e[0m"
    
    Write-Host "`r$Activity [$bar] $percent% ($Current/$Total)" -NoNewline
}

# 使用例
for ($i = 0; $i -le 100; $i += 5) {
    Show-Progress -Current $i -Total 100 -Activity "ファイル処理"
    Start-Sleep -Milliseconds 200
}
Write-Host ""  # 改行

システム情報の見やすい表示

function Show-SystemInfo {
    Write-Host "`e[1m`e[36m=== システム情報 ===`e[0m"
    
    $computerInfo = Get-ComputerInfo
    $cpu = Get-WmiObject -Class Win32_Processor | Select-Object -First 1
    $memory = Get-WmiObject -Class Win32_PhysicalMemory | Measure-Object -Property Capacity -Sum
    
    Write-Host "`e[33mコンピューター名:`e[0m $($computerInfo.CsName)"
    Write-Host "`e[33mOS:`e[0m $($computerInfo.WindowsProductName)"
    Write-Host "`e[33mCPU:`e[0m $($cpu.Name)"
    Write-Host "`e[33mメモリ:`e[0m $([math]::Round($memory.Sum / 1GB, 2)) GB"
    
    # ディスク使用量
    $disks = Get-WmiObject -Class Win32_LogicalDisk | Where-Object { $_.DriveType -eq 3 }
    Write-Host "`e[33mディスク使用量:`e[0m"
    
    foreach ($disk in $disks) {
        $used = $disk.Size - $disk.FreeSpace
        $usedPercent = [math]::Round(($used / $disk.Size) * 100, 1)
        
        if ($usedPercent -gt 80) {
            $color = "`e[31m"  # 赤色(警告)
        } elseif ($usedPercent -gt 60) {
            $color = "`e[33m"  # 黄色(注意)
        } else {
            $color = "`e[32m"  # 緑色(正常)
        }
        
        Write-Host "  $($disk.DeviceID) ${color}${usedPercent}%`e[0m ($([math]::Round($used / 1GB, 1)) GB / $([math]::Round($disk.Size / 1GB, 1)) GB)"
    }
}

# 実行
Show-SystemInfo

よくあるトラブルと対策

問題1:色が表示されない

**症状:**文字に色がつかず、普通の文字で表示される

原因と対策:

  • コンソールが古い、またはレガシーモードになっている
  • **対策:**Windows Terminalを使用するか、レガシーモードを無効にする
# 設定確認
Get-ItemProperty -Path "HKCU:\Console" -Name "VirtualTerminalLevel" -ErrorAction SilentlyContinue

問題2:エスケープシーケンスがそのまま表示される

症状:[31m文字[0m のように、コードがそのまま表示される

原因と対策:

  • ANSIエスケープシーケンスが有効になっていない
  • **対策:**環境変数を設定するか、レジストリを変更する
# 環境変数の設定
$env:TERM = "xterm-256color"
[Environment]::SetEnvironmentVariable("TERM", "xterm-256color", "User")

問題3:PowerShell ISEで動作しない

**症状:**PowerShell ISEでANSIエスケープシーケンスが表示されない

原因と対策:

  • PowerShell ISEはANSIエスケープシーケンスに対応していない
  • **対策:**Windows TerminalやPowerShell 7を使用する

問題4:一部の文字が文字化けする

**症状:**特殊な文字や記号が正しく表示されない

原因と対策:

  • フォントがUnicodeに対応していない
  • **対策:**対応フォント(Cascadia Code、Consolas等)を使用する

さらに便利な活用方法

関数化して再利用

# カラー出力用の関数を作成
function Write-ColorText {
    param(
        [string]$Text,
        [string]$ForegroundColor = "White",
        [string]$BackgroundColor = $null,
        [switch]$Bold,
        [switch]$Underline
    )
    
    $colorCode = ""
    
    # 文字色の設定
    switch ($ForegroundColor) {
        "Black"   { $colorCode += "`e[30m" }
        "Red"     { $colorCode += "`e[31m" }
        "Green"   { $colorCode += "`e[32m" }
        "Yellow"  { $colorCode += "`e[33m" }
        "Blue"    { $colorCode += "`e[34m" }
        "Magenta" { $colorCode += "`e[35m" }
        "Cyan"    { $colorCode += "`e[36m" }
        "White"   { $colorCode += "`e[37m" }
    }
    
    # 背景色の設定
    if ($BackgroundColor) {
        switch ($BackgroundColor) {
            "Black"   { $colorCode += "`e[40m" }
            "Red"     { $colorCode += "`e[41m" }
            "Green"   { $colorCode += "`e[42m" }
            "Yellow"  { $colorCode += "`e[43m" }
            "Blue"    { $colorCode += "`e[44m" }
            "Magenta" { $colorCode += "`e[45m" }
            "Cyan"    { $colorCode += "`e[46m" }
            "White"   { $colorCode += "`e[47m" }
        }
    }
    
    # スタイルの設定
    if ($Bold) { $colorCode += "`e[1m" }
    if ($Underline) { $colorCode += "`e[4m" }
    
    Write-Host "$colorCode$Text`e[0m"
}

# 使用例
Write-ColorText "成功しました!" -ForegroundColor "Green" -Bold
Write-ColorText "警告:設定を確認してください" -ForegroundColor "Yellow" -BackgroundColor "Black"
Write-ColorText "エラーが発生しました" -ForegroundColor "Red" -Underline

設定ファイルでの管理

# 設定を JSON ファイルで管理
$colorConfig = @{
    "Info"    = @{ "Color" = "Cyan"; "Prefix" = "[INFO]" }
    "Warning" = @{ "Color" = "Yellow"; "Prefix" = "[WARN]" }
    "Error"   = @{ "Color" = "Red"; "Prefix" = "[ERROR]" }
    "Success" = @{ "Color" = "Green"; "Prefix" = "[OK]" }
} | ConvertTo-Json

# 設定ファイルに保存
$colorConfig | Out-File "color-config.json"

# 使用時に設定を読み込み
$config = Get-Content "color-config.json" | ConvertFrom-Json

まとめ

PowerShellでANSIエスケープシーケンスを有効にすることで、プログラムの出力を視覚的にわかりやすく整理できます。これによって作業効率の向上やトラブルの早期発見にもつながります。

この記事で学んだポイント

  • ANSIエスケープシーケンスは文字に色やスタイルを付ける仕組み
  • Windows Terminal + PowerShell 7の組み合わせが最も簡単
  • レガシーモードの無効化や環境変数の設定が必要な場合がある
  • 実用的な関数を作って再利用すると便利
  • ログレベル別の色分けで、問題の早期発見ができる

おすすめの活用方法

  1. まずはWindows TerminalとPowerShell 7をインストール
  2. 簡単な色付きメッセージから試してみる
  3. ログ出力関数を作って、プロジェクトで活用
  4. システム監視やデバッグ作業に応用

コメント

タイトルとURLをコピーしました