ja-JP/about_ANSI_Terminals.help.txt

TOPIC
    about_ANSI_Terminals

簡単な説明
    PowerShell における ANSI エスケープシーケンスのサポートについて説明します。

詳細な説明
    PowerShell には、ANSI エスケープシーケンスを使用して、PowerShell を
    ホストしているターミナルアプリケーションでの出力の表示を制御する機能が
    数多くあります。

    PowerShell 7.2 では、新しい自動変数 $PSStyle が追加され、ANSI 装飾された
    テキストの出力をサポートするための PowerShell エンジンの変更が行われました。

ANSI ターミナルのサポート

    ANSI 機能は、xterm ベースのターミナルと互換性があるように設計されています。
    詳しくは、Wikipedia の xterm を参照してください。

    Windows 10 以降では、Windows コンソールホストは xterm 互換です。Windows
    Terminal アプリケーションも xterm 互換です。

    macOS では、既定のターミナルアプリケーションは xterm 互換です。

    Linux では、各ディストリビューションに異なるターミナルアプリケーションが
    付属しています。適切なターミナルアプリケーションを見つけるには、
    ディストリビューションのドキュメントを参照してください。

$PSStyle

    この変数には次のプロパティがあります。

    - Reset - すべての装飾をオフにします
    - Blink - 点滅をオンにします
    - BlinkOff - 点滅をオフにします
    - Bold - 太字をオンにします
    - BoldOff - 太字をオフにします
    - Dim - 淡色をオンにします (PowerShell 7.4 で追加)
    - DimOff - 淡色をオフにします (PowerShell 7.4 で追加)
    - Hidden - 非表示をオンにします
    - HiddenOff - 非表示をオフにします
    - Reverse - 反転をオンにします
    - ReverseOff - 反転をオフにします
    - Italic - 斜体をオンにします
    - ItalicOff - 斜体をオフにします
    - Underline - 下線をオンにします
    - UnderlineOff - 下線をオフにします
    - Strikethrough - 取り消し線をオンにします
    - StrikethroughOff - 取り消し線をオフにします
    - OutputRendering - 出力レンダリングを使用するタイミングを制御します
    - Formatting - 出力ストリームの既定の書式設定を制御する入れ子オブジェクト
    - Progress - 進行状況バーのレンダリングを制御する入れ子オブジェクト
    - FileInfo - FileInfo オブジェクトの色付けを制御する入れ子オブジェクト
    - Foreground - 前景色を制御する入れ子オブジェクト
    - Background - 背景色を制御する入れ子オブジェクト

    基本メンバーは、その名前にマップされた ANSI エスケープシーケンスの文字列を
    返します。値は設定可能で、カスタマイズできます。たとえば、太字を下線に
    変更できます。プロパティ名により、タブ補完を使用して装飾された文字列を
    簡単に作成できます。

        "$($PSStyle.Background.BrightCyan)Power$($PSStyle.Underline)$($PSStyle.Bold)Shell$($PSStyle.Reset)"

    次のメンバーは、ANSI 書式設定を使用する方法やタイミングを制御します。

    - $PSStyle.OutputRendering は、次の値を持つ
      System.Management.Automation.OutputRendering 列挙型です。

      - ANSI: ANSI エスケープシーケンスは常にそのまま渡されます。

        重要: 下流で実行されることを意図したファイルやパイプラインに出力を
        リダイレクトする場合は、ANSI モードを使用してください。これにより、
        出力が変更されないことが保証されます。他のモードを使用すると、ANSI
        エスケープシーケンスが削除されて出力が変更され、実行動作が変わる
        可能性があります。

      - PlainText: ANSI エスケープシーケンスは常に取り除かれ、プレーンテキスト
        のみになります。リモートセッションでは、リモートホストが PlainText に
        設定されている場合、出力はローカルクライアントに返送される前に ANSI
        エスケープシーケンスが取り除かれます。
      - Host: これは既定の動作です。ANSI エスケープシーケンスは、リダイレクト
        またはパイプされた出力から削除されます。詳しくは、Host モードでの出力の
        リダイレクトを参照してください。

    - $PSStyle.Background メンバーと $PSStyle.Foreground メンバーは、16 個の
      標準コンソール色の ANSI エスケープシーケンスを含む文字列です。

      - Black
      - BrightBlack
      - White
      - BrightWhite
      - Red
      - BrightRed
      - Magenta
      - BrightMagenta
      - Blue
      - BrightBlue
      - Cyan
      - BrightCyan
      - Green
      - BrightGreen
      - Yellow
      - BrightYellow

      値は設定可能で、任意の数の ANSI エスケープシーケンスを含めることが
      できます。24 ビット色を指定する FromRgb() メソッドもあります。FromRgb()
      メソッドの呼び出し方法は 2 通りあります。

          string FromRgb(byte red, byte green, byte blue)
          string FromRgb(int rgb)

      次のいずれかの例は、背景色を 24 ビット色の Beige に設定します。

          $PSStyle.Background.FromRgb(245, 245, 220)
          $PSStyle.Background.FromRgb(0xf5f5dc)

    - $PSStyle.Formatting は、デバッグ、エラー、詳細、警告メッセージ、および
      一覧とテーブルのヘッダーの既定の書式設定を制御する入れ子オブジェクトです。
      太字や下線などの属性も制御できます。書式設定のレンダリング用の色を管理
      する方法として、$Host.PrivateData を置き換えます。$Host.PrivateData は
      下位互換性のために引き続き存在しますが、$PSStyle.Formatting には接続
      されていません。$PSStyle.Formatting には次のメンバーがあります。

      - FormatAccent - 一覧項目の書式設定
      - ErrorAccent - エラーメタデータの書式設定
      - Error - エラーメッセージの書式設定
      - Warning - 警告メッセージの書式設定
      - Verbose - 詳細メッセージの書式設定
      - Debug - デバッグメッセージの書式設定
      - TableHeader - テーブルヘッダーの書式設定
      - CustomTableHeaderLabel - 実際にはオブジェクトのプロパティではない
        テーブルヘッダーの書式設定
      - FeedbackName - フィードバックプロバイダー名の書式設定 (PowerShell 7.4
        で実験的機能として追加)
      - FeedbackText - フィードバックメッセージの書式設定 (PowerShell 7.4 で
        実験的機能として追加)
      - FeedbackAction - フィードバックプロバイダーの推奨アクションの書式設定
        (PowerShell 7.4 で実験的機能として追加)

    - $PSStyle.Progress を使用すると、進行状況ビューバーのレンダリングを制御
      できます。

      - Style - レンダリングスタイルを設定する ANSI 文字列です。
      - MaxWidth - ビューの最大幅を設定します。既定値は 120 です。最小値は
        18 です。
      - View - 値 Minimal および Classic を持つ列挙型です。Classic は変更の
        ない既存のレンダリングです。Minimal は 1 行の最小限のレンダリングです。
        Minimal が既定値です。
      - UseOSCIndicator - 既定値は $false です。OSC インジケーターをサポート
        するターミナルでは $true に設定します。

      注: ホストが仮想ターミナルをサポートしていない場合、
      $PSStyle.Progress.View は自動的に Classic に設定されます。

      次の例は、レンダリングスタイルを最小限の進行状況バーに設定します。

          $PSStyle.Progress.View = 'Minimal'

    - $PSStyle.FileInfo は、FileInfo オブジェクトの色付けを制御する入れ子
      オブジェクトです。

      - Directory - ディレクトリの色を指定する組み込みメンバー
      - SymbolicLink - シンボリックリンクの色を指定する組み込みメンバー
      - Executable - 実行可能ファイルの色を指定する組み込みメンバー
      - Extension - このメンバーを使用して、さまざまなファイル拡張子の色を
        定義します。Extension メンバーは、アーカイブと PowerShell ファイルの
        拡張子の色をあらかじめ定義しています。

        次の例は、さまざまな FileInfo 設定と特定のファイル拡張子の色を変更
        する方法を示します。色は、明るいターミナル背景でうまく機能するように
        選択されています。

            $PSStyle.FileInfo.Directory = $PSStyle.Background.FromRgb(0x2f6aff) +
                $PSStyle.Foreground.BrightWhite
            $PSStyle.FileInfo.SymbolicLink = $PSStyle.Foreground.Cyan
            $PSStyle.FileInfo.Executable = $PSStyle.Foreground.BrightMagenta
            $PSStyle.FileInfo.Extension['.ps1'] = $PSStyle.Foreground.Cyan
            $PSStyle.FileInfo.Extension['.ps1xml'] = $PSStyle.Foreground.Cyan
            $PSStyle.FileInfo.Extension['.psd1'] = $PSStyle.Foreground.Cyan
            $PSStyle.FileInfo.Extension['.psm1'] = $PSStyle.Foreground.Cyan

ANSI 出力を生成するコマンドレット

    - Markdown コマンドレット - Show-Markdown コマンドレットは、Markdown
      テキストを含むファイルの内容を表示します。出力は、さまざまなスタイルを
      表す ANSI シーケンスを使用してレンダリングされます。スタイルの定義は、
      Get-MarkdownOption および Set-MarkdownOption コマンドレットを使用して
      管理できます。
    - PSReadLine コマンドレット - PSReadLine モジュールは、コマンドライン上の
      PowerShell 構文要素に色を付けるために ANSI シーケンスを使用します。色は、
      Get-PSReadLineOption および Set-PSReadLineOption を使用して管理できます。
    - Get-Error - Get-Error コマンドレットは、読みやすいように書式設定された
      Error オブジェクトの詳細なビューを返します。
    - Select-String - PowerShell 7.0 以降、Select-String は出力内の一致した
      パターンを強調表示するために ANSI シーケンスを使用します。
    - Write-Progress - ANSI 出力は、前述のように $PSStyle.Progress を使用して
      管理されます。詳しくは、Write-Progress を参照してください。

Host モードでの出力のリダイレクト

    既定では、$PSStyle.OutputRendering は Host に設定されています。ANSI
    エスケープシーケンスは、リダイレクトまたはパイプされた出力から削除されます。

    OutputRendering は、Host、Out-File、Out-String でのレンダリングにのみ
    適用されます。ネイティブな実行可能ファイルからの出力には影響しません。

    PowerShell 7.2.6 では、次のシナリオで Out-File と Out-String の動作が
    変更されました。

    - 入力オブジェクトが純粋な文字列の場合、これらのコマンドレットは
      OutputRendering 設定に関係なく文字列を変更しません。
    - 入力オブジェクトに書式設定ビューを適用する必要がある場合、これらの
      コマンドレットは OutputRendering 設定に基づいて、書式設定された出力
      文字列からエスケープシーケンスを保持または削除します。

    これは、PowerShell 7.2 と比較したこれらのコマンドレットの破壊的変更です。

    OutputRendering は、PowerShell ホストプロセスからの出力には適用されません。
    たとえば、コマンドラインから pwsh を実行して出力をリダイレクトする場合
    などです。

    次の例では、PowerShell が Linux 上で bash から実行されます。
    Get-ChildItem コマンドレットは ANSI 装飾されたテキストを生成します。
    リダイレクトは PowerShell ホストの外部の bash プロセスで発生するため、
    出力は OutputRendering の影響を受けません。

        pwsh -NoProfile -Command 'Get-ChildItem' > out.txt

    out.txt の内容を調べると、ANSI エスケープシーケンスが表示されます。

    対照的に、リダイレクトが PowerShell セッション内で発生する場合、
    OutputRendering はリダイレクトされた出力に影響します。

        pwsh -NoProfile -Command 'Get-ChildItem > out.txt'

    out.txt の内容を調べると、ANSI エスケープシーケンスはありません。

ANSI 出力を無効にする

    ANSI エスケープシーケンスのサポートは、TERM または NO_COLOR 環境変数を
    使用してオフにできます。

    $Env:TERM の次の値は、動作を次のように変更します。

    - dumb - $Host.UI.SupportsVirtualTerminal = $false を設定します
    - xterm-mono - $PSStyle.OutputRendering = PlainText を設定します
    - xterm - $PSStyle.OutputRendering = PlainText を設定します

    $Env:NO_COLOR が存在する場合、$PSStyle.OutputRendering は PlainText に
    設定されます。NO_COLOR 環境変数について詳しくは、https://no-color.org/ を
    参照してください。

C# からの $PSStyle の使用

    C# 開発者は、次の例のように、PSStyle にシングルトンとしてアクセスできます。

        string output = $"{PSStyle.Instance.Foreground.Red}{PSStyle.Instance.Bold}Hello{PSStyle.Instance.Reset}";

    PSStyle は System.Management.Automation 名前空間に存在します。

    PowerShell エンジンには次の変更が含まれています。

    - PowerShell の書式設定システムは、$PSStyle.OutputRendering を尊重する
      ように更新されました。
    - ANSI エスケープされた文字列を処理するために StringDecorated 型が追加
      されました。
    - 文字列に ESC または C1 CSI 文字シーケンスが含まれている場合に true を
      返す string IsDecorated ブールプロパティが追加されました。
    - 文字列の Length プロパティは、ANSI エスケープシーケンスを除いたテキスト
      の長さを返します。
    - StringDecorated Substring(int contentLength) メソッドは、ANSI エスケープ
      シーケンスの一部ではないインデックス 0 からコンテンツ長までの部分文字列を
      返します。これは、テーブル書式設定で文字列を切り詰めつつ、印字可能な文字
      スペースを取らない ANSI エスケープシーケンスを保持するために必要です。
    - string ToString() メソッドは変わらず、文字列のプレーンテキスト版を
      返します。
    - string ToString(bool Ansi) メソッドは、Ansi パラメーターが true の場合、
      生の ANSI が埋め込まれた文字列を返します。それ以外の場合は、ANSI
      エスケープシーケンスが削除されたプレーンテキスト版が返されます。
    - FormatHyperlink(string text, uri link) メソッドは、ハイパーリンクを装飾
      するために使用される ANSI エスケープシーケンスを含む文字列を返します。
      Windows Terminal などの一部のターミナルホストはこのマークアップを
      サポートしており、ターミナルでレンダリングされたテキストをクリック可能に
      します。

PSStyle クラスの静的メソッド

    PowerShell 7.4 では、[System.Management.Automation.PSStyle] クラスに 3 つの
    新しい静的メソッドが追加されました。

        [System.Management.Automation.PSStyle] | Get-Member -Static -MemberType Method

        TypeName: System.Management.Automation.PSStyle

        Name MemberType Definition
        ---- ---------- ----------
        Equals Method static bool Equals(...)
        MapBackgroundColorToEscapeSequence Method static string Map...
        MapColorPairToEscapeSequence Method static string Map...
        MapForegroundColorToEscapeSequence Method static string Map...
        ReferenceEquals Method static bool Refer...

    これらのメソッドは、ConsoleColor 値を前景色と背景色、またはその両方の
    組み合わせの ANSI エスケープシーケンスに変換する手段を提供します。

    次の例は、これらのメソッドによって生成される ANSI エスケープシーケンスを
    示します。

        using namespace System.Management.Automation
        [PSStyle]::MapBackgroundColorToEscapeSequence('Black') | Format-Hex

        [PSStyle]::MapForegroundColorToEscapeSequence('Red') | Format-Hex

        [PSStyle]::MapColorPairToEscapeSequence('Red','Black') | Format-Hex

関連項目
    about_Experimental_Features
    Using Experimental Features
    (/powershell/scripting/learn/experimental-features)

----
原文: PowerShell-Docs (CC BY 4.0) の翻訳 / PSHelpJaJP