PowerShellでプログラムを作ったり、コマンドを実行したりしているとき、こんなことを思ったことはありませんか?
「エラーメッセージを赤色で表示したい」
「重要な情報は太字で強調したい」
「成功したときは緑色で『OK』って出したい」
実は、PowerShellではANSIエスケープシーケンスという機能を使って、文字に色を付けたり、太字にしたり、下線を引いたりすることができるんです!
この記事では、PowerShellをもっと見やすく、わかりやすくする方法を、プログラミング初心者の方にもわかりやすく解説します。
ANSIエスケープシーケンスって何?

「文字の見た目を変える魔法の呪文」
ANSIエスケープシーケンスとは、ターミナル(コマンドライン画面)で文字の見た目を変えるための特別なコードです。
何ができるの?
- 文字の色を変える:赤、青、緑など好きな色に
- 背景色を変える:文字の後ろの色を変更
- 文字を太くする:重要な部分を太字で強調
- 下線を引く:リンクのように下線を表示
- 点滅させる:注意を引きたい文字を点滅(一部のターミナル)
どんな場面で使うの?
実用的な使い方の例
- エラーメッセージ:赤色で表示して目立たせる
- 成功メッセージ:緑色で安心感を与える
- 警告メッセージ:黄色で注意を促す
- 重要な情報:太字で強調する
- ログの種類分け:情報レベルごとに色を変える
PowerShellのバージョンによる違い
新しいPowerShellと古いPowerShell
PowerShellには大きく分けて2つのバージョンがあります。
Windows PowerShell(古いバージョン)
- バージョン:5.1以前
- 特徴:Windowsに最初から入っている
- ANSIサポート:限定的(あまり使えない)
PowerShell(新しいバージョン)
- バージョン:7.0以降
- 特徴:Microsoft公式サイトからダウンロード
- ANSIサポート:完全対応(なんでもできる!)
自分のPowerShellバージョンを確認する方法
# バージョンを確認するコマンド
$PSVersionTable.PSVersion
結果の見方
- 5.1以前:Windows PowerShell(機能限定)
- 7.0以降:PowerShell Core(フル機能)
PowerShell 7をインストールするには?
新しいPowerShellを使いたい場合は、Microsoft公式サイトからダウンロードできます。
古いバージョンと共存できるので、安心してインストールできます。
インストール方法
- Microsoft PowerShell公式サイトにアクセス
- 最新版をダウンロード
- インストーラーを実行
- 「PowerShell」という新しいアプリが追加される
$PSStyleを使った基本的な装飾

$PSStyleって何?
PowerShell 7以降では、$PSStyleという便利な変数が用意されています。
これを使うと、複雑なANSIコードを覚えなくても、簡単に文字を装飾できます。
$PSStyleの構成
- $PSStyle.Foreground:文字の色
- $PSStyle.Background:背景の色
- $PSStyle.Bold:太字
- $PSStyle.Underline:下線
- $PSStyle.Reset:装飾をリセット(元に戻す)
基本的な使い方
文字を赤色にする
Write-Host "$($PSStyle.Foreground.Red)これは赤い文字です$($PSStyle.Reset)"
文字を太字にする
Write-Host "$($PSStyle.Bold)これは太字です$($PSStyle.Reset)"
下線を引く
Write-Host "$($PSStyle.Underline)これは下線付きです$($PSStyle.Reset)"
複数の装飾を組み合わせる
Write-Host "$($PSStyle.Bold)$($PSStyle.Foreground.Red)$($PSStyle.Underline)重要な警告メッセージ$($PSStyle.Reset)"
なぜ最後に$PSStyle.Resetが必要?
装飾は一度設定すると、その後の文字にも適用され続けます。$PSStyle.Resetを使って装飾をリセットしないと、その後の出力も同じスタイルになってしまいます。
悪い例(Resetなし)
Write-Host "$($PSStyle.Foreground.Red)エラーメッセージ"
Write-Host "この文字も赤くなってしまう" # 意図しない結果
良い例(Resetあり)
Write-Host "$($PSStyle.Foreground.Red)エラーメッセージ$($PSStyle.Reset)"
Write-Host "この文字は通常の色" # 期待通りの結果
色の種類と使い分け
基本的な色
PowerShellで使える基本的な色は以下の通りです。
文字色(Foreground)
# 基本色
Write-Host "$($PSStyle.Foreground.Black)黒$($PSStyle.Reset)"
Write-Host "$($PSStyle.Foreground.Red)赤$($PSStyle.Reset)"
Write-Host "$($PSStyle.Foreground.Green)緑$($PSStyle.Reset)"
Write-Host "$($PSStyle.Foreground.Yellow)黄$($PSStyle.Reset)"
Write-Host "$($PSStyle.Foreground.Blue)青$($PSStyle.Reset)"
Write-Host "$($PSStyle.Foreground.Magenta)マゼンタ$($PSStyle.Reset)"
Write-Host "$($PSStyle.Foreground.Cyan)シアン$($PSStyle.Reset)"
Write-Host "$($PSStyle.Foreground.White)白$($PSStyle.Reset)"
# 明るい色
Write-Host "$($PSStyle.Foreground.BrightBlack)明るい黒$($PSStyle.Reset)"
Write-Host "$($PSStyle.Foreground.BrightRed)明るい赤$($PSStyle.Reset)"
Write-Host "$($PSStyle.Foreground.BrightGreen)明るい緑$($PSStyle.Reset)"
Write-Host "$($PSStyle.Foreground.BrightYellow)明るい黄$($PSStyle.Reset)"
Write-Host "$($PSStyle.Foreground.BrightBlue)明るい青$($PSStyle.Reset)"
Write-Host "$($PSStyle.Foreground.BrightMagenta)明るいマゼンタ$($PSStyle.Reset)"
Write-Host "$($PSStyle.Foreground.BrightCyan)明るいシアン$($PSStyle.Reset)"
Write-Host "$($PSStyle.Foreground.BrightWhite)明るい白$($PSStyle.Reset)"
背景色(Background)
# 背景色の例
Write-Host "$($PSStyle.Background.Red)$($PSStyle.Foreground.White)赤い背景に白い文字$($PSStyle.Reset)"
Write-Host "$($PSStyle.Background.Green)$($PSStyle.Foreground.Black)緑の背景に黒い文字$($PSStyle.Reset)"
Write-Host "$($PSStyle.Background.Blue)$($PSStyle.Foreground.Yellow)青い背景に黄色い文字$($PSStyle.Reset)"
色の使い分けガイド
エラーメッセージ
Write-Host "$($PSStyle.Foreground.Red)❌ エラー: ファイルが見つかりません$($PSStyle.Reset)"
成功メッセージ
Write-Host "$($PSStyle.Foreground.Green)✅ 成功: ファイルのコピーが完了しました$($PSStyle.Reset)"
警告メッセージ
Write-Host "$($PSStyle.Foreground.Yellow)⚠️ 警告: ディスク容量が不足しています$($PSStyle.Reset)"
情報メッセージ
Write-Host "$($PSStyle.Foreground.Cyan)ℹ️ 情報: 処理を開始します$($PSStyle.Reset)"
カスタムカラーの作成

RGB値で自由な色を作る
PowerShell 7では、RGB(赤・緑・青)の値を指定して、オリジナルの色を作ることができます。
基本的な使い方
# RGB値で色を指定(各色0-255の範囲)
$customRed = $PSStyle.Foreground.FromRgb(255, 100, 100) # 明るいピンク
$customGreen = $PSStyle.Foreground.FromRgb(100, 255, 100) # 明るい緑
$customBlue = $PSStyle.Foreground.FromRgb(100, 100, 255) # 明るい青
Write-Host "${customRed}カスタムピンク$($PSStyle.Reset)"
Write-Host "${customGreen}カスタムグリーン$($PSStyle.Reset)"
Write-Host "${customBlue}カスタムブルー$($PSStyle.Reset)"
背景色のカスタマイズ
# カスタム背景色
$bgOrange = $PSStyle.Background.FromRgb(255, 165, 0) # オレンジ色の背景
Write-Host "$bgOrange$($PSStyle.Foreground.Black)オレンジ背景の文字$($PSStyle.Reset)"
16進数カラーコードの使用
Webデザインでよく使われる16進数カラーコード(#FF0000など)も使えます。
# 16進数カラーコードを使用
function ConvertTo-RgbFromHex {
param([string]$HexColor)
$hex = $HexColor -replace '#', ''
$r = [Convert]::ToInt32($hex.Substring(0,2), 16)
$g = [Convert]::ToInt32($hex.Substring(2,2), 16)
$b = [Convert]::ToInt32($hex.Substring(4,2), 16)
return $PSStyle.Foreground.FromRgb($r, $g, $b)
}
# 使用例
$webBlue = ConvertTo-RgbFromHex "#007acc"
Write-Host "${webBlue}Webスタイルの青色$($PSStyle.Reset)"
実用的なスクリプト例
ログレベル別の出力関数
# ログレベル別の出力関数を定義
function Write-Info {
param([string]$Message)
Write-Host "$($PSStyle.Foreground.Cyan)[INFO]$($PSStyle.Reset) $Message"
}
function Write-Warning {
param([string]$Message)
Write-Host "$($PSStyle.Foreground.Yellow)[WARNING]$($PSStyle.Reset) $Message"
}
function Write-Error {
param([string]$Message)
Write-Host "$($PSStyle.Foreground.Red)[ERROR]$($PSStyle.Reset) $Message"
}
function Write-Success {
param([string]$Message)
Write-Host "$($PSStyle.Foreground.Green)[SUCCESS]$($PSStyle.Reset) $Message"
}
# 使用例
Write-Info "処理を開始します"
Write-Warning "設定ファイルが見つかりません。デフォルト値を使用します"
Write-Error "接続に失敗しました"
Write-Success "すべての処理が完了しました"
プログレスバーもどき
function Show-Progress {
param(
[int]$Current,
[int]$Total,
[int]$Width = 50
)
$percentage = [math]::Floor(($Current / $Total) * 100)
$completed = [math]::Floor(($Current / $Total) * $Width)
$remaining = $Width - $completed
$progressBar = "$($PSStyle.Background.Green)" + (" " * $completed) + "$($PSStyle.Reset)" +
"$($PSStyle.Background.BrightBlack)" + (" " * $remaining) + "$($PSStyle.Reset)"
Write-Host "`r[$progressBar] $percentage%" -NoNewline
}
# 使用例
for ($i = 0; $i -le 100; $i += 10) {
Show-Progress -Current $i -Total 100
Start-Sleep -Milliseconds 200
}
Write-Host "" # 改行
ファイル処理結果の表示
function Process-Files {
param([string[]]$FilePaths)
Write-Host "$($PSStyle.Bold)ファイル処理結果:$($PSStyle.Reset)"
Write-Host ""
foreach ($file in $FilePaths) {
if (Test-Path $file) {
$size = (Get-Item $file).Length
Write-Host " $($PSStyle.Foreground.Green)✓$($PSStyle.Reset) " -NoNewline
Write-Host "$file " -NoNewline
Write-Host "$($PSStyle.Foreground.BrightBlack)($size bytes)$($PSStyle.Reset)"
} else {
Write-Host " $($PSStyle.Foreground.Red)✗$($PSStyle.Reset) " -NoNewline
Write-Host "$file " -NoNewline
Write-Host "$($PSStyle.Foreground.Red)(ファイルが見つかりません)$($PSStyle.Reset)"
}
}
}
# 使用例
$files = @("C:\Windows\System32\notepad.exe", "C:\存在しないファイル.txt", "C:\Windows\System32\calc.exe")
Process-Files -FilePaths $files
環境による違いと対応方法

ターミナルアプリによる違い
Windows Terminal(推奨)
- ANSIエスケープシーケンスを完全サポート
- 美しいフォントと色の表示
- 透明度やアニメーション効果も可能
従来のコンソール(cmd.exe)
- 基本的な色変更のみサポート
- 一部の装飾が正しく表示されない場合
- Windows 10 バージョン1903以降で改善
Visual Studio Code統合ターミナル
- ANSIエスケープシーケンスをサポート
- エディタのテーマに合わせた色表示
互換性を確保する方法
# ANSIサポートの確認
function Test-AnsiSupport {
return ($PSVersionTable.PSVersion.Major -ge 7) -and
($Host.UI.SupportsVirtualTerminal -eq $true)
}
# 安全な色付き出力関数
function Write-ColorText {
param(
[string]$Text,
[string]$Color = "White"
)
if (Test-AnsiSupport) {
# ANSIサポートがある場合
switch ($Color) {
"Red" { Write-Host "$($PSStyle.Foreground.Red)$Text$($PSStyle.Reset)" }
"Green" { Write-Host "$($PSStyle.Foreground.Green)$Text$($PSStyle.Reset)" }
"Yellow" { Write-Host "$($PSStyle.Foreground.Yellow)$Text$($PSStyle.Reset)" }
default { Write-Host $Text }
}
} else {
# ANSIサポートがない場合は通常の出力
Write-Host $Text
}
}
出力のリダイレクトと制御
ファイル出力時の注意点
PowerShellでファイルに出力をリダイレクトするとき、ANSIエスケープシーケンスも一緒に保存されてしまうことがあります。
問題のある例
Write-Host "$($PSStyle.Foreground.Red)エラーメッセージ$($PSStyle.Reset)" > error.log
# ファイルにANSIコードも保存されてしまう
解決方法1:プレーンテキスト出力に設定
# 一時的にプレーンテキスト出力に変更
$originalRendering = $PSStyle.OutputRendering
$PSStyle.OutputRendering = 'PlainText'
Write-Host "$($PSStyle.Foreground.Red)エラーメッセージ$($PSStyle.Reset)" > error.log
# 元の設定に戻す
$PSStyle.OutputRendering = $originalRendering
解決方法2:Write-Outputを使用
# Write-Hostの代わりにWrite-Outputを使用
Write-Output "エラーメッセージ" > error.log
ログファイル用の関数
function Write-Log {
param(
[string]$Message,
[string]$Level = "INFO",
[string]$LogFile = $null
)
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$logMessage = "[$timestamp] [$Level] $Message"
# 画面表示(色付き)
switch ($Level) {
"ERROR" { Write-Host "$($PSStyle.Foreground.Red)$logMessage$($PSStyle.Reset)" }
"WARNING" { Write-Host "$($PSStyle.Foreground.Yellow)$logMessage$($PSStyle.Reset)" }
"SUCCESS" { Write-Host "$($PSStyle.Foreground.Green)$logMessage$($PSStyle.Reset)" }
default { Write-Host "$($PSStyle.Foreground.Cyan)$logMessage$($PSStyle.Reset)" }
}
# ファイル出力(色なし)
if ($LogFile) {
Add-Content -Path $LogFile -Value $logMessage
}
}
# 使用例
Write-Log -Message "アプリケーションを開始しました" -Level "INFO" -LogFile "app.log"
Write-Log -Message "設定ファイルが見つかりません" -Level "WARNING" -LogFile "app.log"
Write-Log -Message "データベース接続エラー" -Level "ERROR" -LogFile "app.log"
トラブルシューティング

よくある問題と解決法
問題1:文字化けや表示がおかしい
# 文字エンコーディングを確認
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
問題2:色が表示されない
# バージョンとサポート状況を確認
Write-Host "PowerShell Version: $($PSVersionTable.PSVersion)"
Write-Host "Virtual Terminal Support: $($Host.UI.SupportsVirtualTerminal)"
# Windows Terminalを使用することを推奨
問題3:スクリプト実行後に色がリセットされない
# スクリプトの最後で必ずリセット
trap {
Write-Host $PSStyle.Reset
}
# または、スクリプト終了時の処理を追加
Register-EngineEvent -SourceIdentifier PowerShell.Exiting -Action {
Write-Host $PSStyle.Reset
}
まとめ:PowerShellをもっと使いやすく
ANSIエスケープシーケンスを使ったPowerShellの装飾、いかがでしたか?
今日学んだポイント
- ANSIエスケープシーケンスで文字に色や装飾を付けられる
- PowerShell 7以降なら$PSStyleで簡単に使える
- 色の使い分けでメッセージの種類を区別できる
- RGB値でオリジナルの色も作れる
- ファイル出力時は注意が必要
実際に使ってみよう
- エラーメッセージは赤色で
- 成功メッセージは緑色で
- 重要な情報は太字で
- 警告は黄色で目立たせる
環境を整えよう
- PowerShell 7以降にアップグレード
- Windows Terminalを使用
- 適切な文字エンコーディングを設定
注意すること
- 必ず$PSStyle.Resetで装飾をリセット
- ファイル出力時は色コードに注意
- 環境によるサポート状況の違いを理解
コメント