「PowerShellでANSIエスケープシーケンスを使って色を変えたいのに、全く反映されない……」そ
んな経験はありませんか?
実は、これは設定や使用環境によるもので、少しの工夫で簡単に解決できます。
この記事では、Windows PowerShellで色が変わらない原因と、その具体的な対処法をわかりやすく解説します。
エスケープシーケンスとは
エスケープシーケンスとは、文字に色をつけたり、文字を太くしたりするための特別なコードです。
プログラマーがよく使う技術で、ターミナルやコンソールの表示をきれいにしてくれます。
例えば、こんなことができます:
- 文字を赤色で表示する
- 背景色を青色にする
- 文字を太字にする
- 文字を点滅させる
それでは、なぜPowerShellで色が変わらないのか、原因を探ってみましょう。
よくある原因

原因1:PowerShellのバージョンが古い
PowerShell 5.1以前では、ANSIエスケープシーケンスが標準でサポートされていないことがあります。
解決策:PowerShell 7以降を使用すると、対応状況が大幅に改善されます。
バージョンの確認方法
$PSVersionTable.PSVersion
実行例:
Major Minor Patch PreReleaseLabel BuildRevision
----- ----- ----- --------------- -------------
7 4 0
この場合、PowerShell 7.4.0が使われているので問題ありません。
新しいPowerShellのインストール
もしバージョンが古い場合は、以下から最新版をダウンロードできます:
- Microsoft Storeで「PowerShell」を検索
- GitHubの公式ページからダウンロード
原因2:Windowsコンソールがレガシーモード
古いコンソールでは、ANSIシーケンスが無視されてしまいます。
解決策:PowerShellのプロパティから「レガシ コンソールを使用する」のチェックを外しましょう。
設定変更の手順
- PowerShellのウィンドウのタイトルバーを右クリック
- 「プロパティ」を選択
- 「オプション」タブを開く
- 「レガシ コンソールを使用する」のチェックを外す
- 「OK」をクリック
原因3:使用している端末が非対応
cmd.exeや古いPowerShellウィンドウでは、表示が制限されることがあります。
解決策:Windows Terminalの使用がおすすめです。
Windows Terminalのメリット
- 最新のエスケープシーケンスに完全対応
- 美しいフォントとカラー表示
- タブ機能で複数のコンソールを管理
- カスタマイズ性が高い
インストール方法:Microsoft Storeで「Windows Terminal」を検索してインストール
確認すべき設定

PowerShellのバージョン確認(再掲)
$PSVersionTable.PSVersion
重要:PowerShell 7.0以上であることを確認してください。
コンソールモードの確認と変更
手順1:プロパティを開く
- PowerShellのウィンドウで右クリック
- **「プロパティ」**を選択
手順2:レガシーモードを無効にする
- **「オプション」**タブを開く
- **「レガシ コンソールを使用する」**にチェックが入っていないか確認
- チェックが入っている場合は外す
レジストリ設定の確認(上級者向け)
注意:レジストリ操作は慎重に行ってください。間違えるとシステムに影響が出る可能性があります。
確認場所
HKEY_CURRENT_USER\Console
VirtualTerminalLevel = 1
設定方法
- Windowsキー + Rを押して「regedit」と入力
- HKEY_CURRENT_USER\Consoleを開く
- VirtualTerminalLevelを探す
- 存在しないか、値が0なら、新規作成または修正します
新規作成の場合:
- 右クリック → 新規 → DWORD(32ビット)値
- 名前を「VirtualTerminalLevel」にする
- 値を「1」に設定
正しい使い方の例
基本的なエスケープシーケンス
# 赤い文字を表示
Write-Host "`e[31m赤い文字です`e[0m"
# 青い文字を表示
Write-Host "`e[34m青い文字です`e[0m"
# 緑の背景で黄色い文字
Write-Host "`e[42m`e[33m緑背景で黄色い文字`e[0m"
色の番号リスト
文字色:
30
:黒31
:赤32
:緑33
:黄34
:青35
:マゼンタ36
:シアン37
:白
背景色:
40
:黒背景41
:赤背景42
:緑背景43
:黄背景44
:青背景45
:マゼンタ背景46
:シアン背景47
:白背景
実用的な例
# エラーメッセージを赤で表示
Write-Host "`e[31m[エラー]`e[0m ファイルが見つかりません"
# 成功メッセージを緑で表示
Write-Host "`e[32m[成功]`e[0m 処理が完了しました"
# 警告メッセージを黄色で表示
Write-Host "`e[33m[警告]`e[0m この操作は取り消せません"
# 情報メッセージを青で表示
Write-Host "`e[34m[情報]`e[0m 処理を開始します"
関数として使いやすくする
function Write-ColorText {
param(
[string]$Text,
[string]$Color = "white"
)
$colorCodes = @{
"black" = "30"
"red" = "31"
"green" = "32"
"yellow" = "33"
"blue" = "34"
"magenta" = "35"
"cyan" = "36"
"white" = "37"
}
$colorCode = $colorCodes[$Color]
Write-Host "`e[${colorCode}m$Text`e[0m"
}
# 使用例
Write-ColorText "これは赤い文字です" "red"
Write-ColorText "これは青い文字です" "blue"
トラブル解決チェックリスト

ステップバイステップで確認
ステップ1:基本環境の確認
- [ ] PowerShellのバージョンが7.0以上か確認
- [ ] Windows Terminalを使用しているか確認
- [ ] レガシーモードが無効になっているか確認
ステップ2:簡単なテストを実行
# テスト用のコード
Write-Host "`e[31mこの文字が赤く表示されるはずです`e[0m"
このコードを実行して、文字が赤く表示されるかチェックしてください。
ステップ3:詳細設定の確認(必要に応じて)
- [ ] レジストリのVirtualTerminalLevelが1に設定されているか確認
- [ ] ターミナルエミュレータが最新版か確認
よくある問題と解決方法
問題1:文字が表示されるが色が変わらない
原因:レガシーモードが有効になっている 解決策:プロパティから「レガシ コンソールを使用する」のチェックを外す
問題2:エスケープシーケンスがそのまま表示される
原因:PowerShellのバージョンが古い 解決策:PowerShell 7以降にアップデート
問題3:一部の色だけ表示されない
原因:ターミナルの色設定が限定されている 解決策:Windows Terminalに変更するか、設定を確認
対応状況の確認表
チェック項目 | 対応方法 | 重要度 |
---|---|---|
PowerShellのバージョン | 7.0以上か確認 | ⭐⭐⭐ |
ターミナルの種類 | Windows Terminal推奨 | ⭐⭐⭐ |
レガシーモード | 無効に設定 | ⭐⭐ |
レジストリ設定 | VirtualTerminalLevelを1に設定 | ⭐ |
実用的な活用例
ログ出力をきれいにする
function Write-Log {
param(
[string]$Message,
[string]$Level = "INFO"
)
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
switch ($Level) {
"ERROR" {
Write-Host "`e[31m[$timestamp] [ERROR] $Message`e[0m"
}
"WARN" {
Write-Host "`e[33m[$timestamp] [WARN] $Message`e[0m"
}
"INFO" {
Write-Host "`e[34m[$timestamp] [INFO] $Message`e[0m"
}
"SUCCESS" {
Write-Host "`e[32m[$timestamp] [SUCCESS] $Message`e[0m"
}
}
}
# 使用例
Write-Log "処理を開始します" "INFO"
Write-Log "ファイルを処理中..." "INFO"
Write-Log "警告:一部のファイルをスキップしました" "WARN"
Write-Log "エラー:接続に失敗しました" "ERROR"
Write-Log "すべての処理が完了しました" "SUCCESS"
プログレスバーの作成
function Show-Progress {
param(
[int]$Current,
[int]$Total,
[string]$Activity = "処理中"
)
$percent = [int](($Current / $Total) * 100)
$progressBar = "█" * [int]($percent / 5)
$spaces = " " * (20 - [int]($percent / 5))
Write-Host -NoNewline "`r`e[36m$Activity`e[0m [`e[32m$progressBar`e[0m$spaces] $percent%"
if ($Current -eq $Total) {
Write-Host ""
Write-Host "`e[32m完了しました!`e[0m"
}
}
# 使用例
for ($i = 1; $i -le 100; $i++) {
Show-Progress -Current $i -Total 100 -Activity "ファイル処理"
Start-Sleep -Milliseconds 50
}
まとめ
PowerShellで色が変わらない場合、多くは設定や使用環境に原因があります。
解決のポイント
- PowerShell 7以降の使用
- Windows Terminalの導入
- レガシーモードの解除
- 適切なエスケープシーケンスの記述
これらを確認することで、問題は解決可能です。
この記事の要点
- バージョン確認が最も重要
- Windows Terminalが最も確実
- エスケープシーケンスは
\e[数字m
の形式で記述 - 関数化することで再利用しやすくなる
コメント