このページの本文へ

前へ 1 2 次へ

Windows Info 第480回

PowerShellが使う色を変更する

2025年05月04日 10時00分更新

文● 塩田紳二 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

色指定ハッシュテーブルを作る

 たとえ1色だけの変更でも、コマンドラインの色指定をするには、ハッシュテーブルを作る必要がある。ただし、コマンドライン内で「@{……}」を使って直接指定することは可能だ。

 以下の表は、色指定の場合に使うハッシュテーブルのキーである。このそれぞれが構文解析されたコマンドラインの色分けに使われる。

PowerShellが使う色を変更する

 このキーを持つハッシュテーブルに色指定をするわけだが、色指定の方法が複数ある。1つはカラー深度の違いで、ターミナルでは色指定に16色カラー、8bitカラー、24bit RGBカラーの3つの方法がある。

 16色カラーは、基本となる8色に対して、輝度を落とした(または上げた)8色を文字色、背景色として使うもの。これに対して、8bitカラーは、256のインデックス値で色指定をする。

PowerShellが使う色を変更する

16色カラーは、文字色、背景色をそれぞれ16色で指定する。ほとんどの端末ソフトウェアが16色カラー指定を可能にしている

 24bit RGBカラーは、RGB三原色のそれぞれが8bit値を持つカラー指定。一般に16進数表現の整数値や「#」を頭につけたRGB値、RGB各色の値、3つ組などの指定方法がある。

 色を付ける対象は、文字色または背景色の2つ、また、文字には高輝度やイタリックといった文字属性を付加することも可能だ。VTエスケープシーケンスをサポートする端末ソフトウェアは、最低でも16色カラー指定が可能なものがほとんどだ。ただし文字属性に関しては、端末ソフトウェアの仕様に依存する。

 具体的な色指定の方法としては、「エスケープシーケンス文字列」「$PSStyleによる指定」「色名による指定」の大きく3種類がある。

PowerShellが使う色を変更する

 最も簡単なのが「色名による指定」で以下の表にある色の名前を使うことで文字色を指定できる。ただし、この方法では背景色を指定することができず、16色カラー以外のカラー深度も利用できない。しかし、簡易でわかりやすい方法だ。

PowerShellが使う色を変更する

 これに対して、「エスケープシーケンス文字列」による指定は、もっとも柔軟性が高く、16色カラー、8bitカラー、24bitカラーのすべてのカラー深度を利用できる。そのほか、文字属性の設定も可能だ。

 前述のように、複数のSGRエスケープシーケンスは、1つにまとめることが可能なので記述もコンパクトになる。ただし、コード部分は数値なので、ソフトウェアのドキュメントなどからコードの表を調べる必要がある。Windowsターミナルの場合、以下のURL(https://learn.microsoft.com/ja-jp/windows/console/console-virtual-terminal-sequences#text-formatting)にコードの表がある。

$PSStyleによる指定

 色名とエスケープシーケンスの間に位置するのが「$PSStyle」による色指定だ。$PSStyleには、さまざまな文字属性や色定義があり、プロパティやメソッドがエスケープシーケンスを出力できる。必要に応じてこれらを連結していくことで、文字色、背景色、文字属性を定義できる。

 $PSStyleには、プロパティ名で指定できる文字色、背景色、文字属性があり、さらに機能ごとに定義された色指定もある。基本的に、プロパティ、メソッドとも、文字列として対応するエスケープシーケンスを出力する。このため、出力を「+」記号で連結することで、複数の指定(たとえば、文字色と背景色)などを指定することが可能だ。

 また、RGB値からエスケープシーケンスを出力するメソッドもあるため、文字色、背景色を24bitカラーで指定することも可能だ。しかし、8bitカラーを出力する機能はなく、$PSStyleからは、8bitカラーによる色指定はできない。

 以下のリストは、色指定を実際にするコマンドを示すもの。

$ColorSet=@{
Command='DarkRed';
Comment="`e[48;5;40m";
ContinuationPrompt="`e[48;5;218m";
Default='DarkGreen';
Emphasis='Red';
Error='Yellow';
InlinePrediction='DarkYellow';
Keyword='DarkBlue';
ListPrediction="`e[48;5;196m";
ListPredictionSelected="`e[48;5;88m";
ListPredictionTooltip="`e[48;5;63m";
Member='DarkMagenta';
Number='DarkCyan';
Operator='DarkGray';
Parameter='Gray';
Selection='Blue';
String=$PSStyle.Foreground.FromRgb(0xFFFFFF)+$PSStyle.Background.FromRgb(0x0);
Type='Cyan';
Variable='White';
}
Set-PSReadLineOption -Colors $ColorSet

PowerShellが使う色を変更する

Set-PSReadLineOptionコマンドと予め定義したハッシュテーブルを組み合わせて、コマンドラインの色分けを自由に変更できる

 プロファイルなどから設定する場合、あとから修正が可能なように1回ハッシュテーブルを定義して、これを使って色指定をするのがいいだろう。

 なお、色指定をリセットする機能はないが、プロファイルを読み込まなければ色指定は変更されない。既定値とカスタマイズ指定を切り替えたいというのであれば、デフォルト値を設定したハッシュテーブルを作っておくといいだろう。

 コマンドラインウィンドウでは、暗い背景に明るい文字という組み合わせがよく使われるが、明るい背景も悪くない。色指定を変更できるのなら、背景を自由に切り替えることができる。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

ASCII倶楽部

注目ニュース

  • 角川アスキー総合研究所

プレミアム実機レビュー

ピックアップ

デジタル用語辞典

ASCII.jpメール デジタルMac/iPodマガジン