セキュリティが厳しい昨今では、リスクも伴いハードルも上がっているようだが、XPとかVistaくらい昔に流行っていたWindowsスキンのカスタマイズでは、しきりにアクア調のスキンを探しては一変するデスクトップに一喜一憂していた。カスタマイズすることはいわばソフトウェア的なプラモデルであるように思える。
以前、自宅PCのWindowsターミナル環境をNerd Fontsでグラフィカルにカスタマイズしている筆者であるが、やはり気分転換が大きな効果をもたらす。深夜の勉強部屋で唯一、躍動的に光るオーディオコンポのインジケーターを眺めているような感覚だ。毎回、同じインタフェースだと必ず飽きるが、うまい具合に別のものに変えられると集中度が増す。
Nerd Fontsによるカスタマイズは、ワークエリアでは自由に行えないだろう。なにかいい方法はないものか?調べてみると簡単にできる方法がある。prompt関数である。API公式には、プロンプトをカスタマイズする方法が記載されているが、
function prompt {"$(Get-Date)> "}
とすれば、
のように日時になるし、
function prompt { "😀😀😀 PS> "}
としてやれば、絵文字のプロンプトで表示される。
2025年リリースのUnicode 17.0では最新の絵文字も増加しているので、コピー&ペーストして試してみると、
function prompt { "💀🤡👽 PS> "}
色を変えるには、Write-Host(公式API)で
function prompt {
Write-Host "💀🤡👽" -ForegroundColor Yellow -NoNewline
return ">"
}
Black, DarkBlue, DarkGreen, DarkCyan, DarkRed, DarkMagenta, DarkYellow, Gray, DarkGray, Blue, Green, Cyan, Red, Magenta, Yellow, Whiteとお好みの色に変えられる。
プロンプト関数の変え方は様々
prompt関数は、プロファイルのなかのprompt { }に変数や式を書き込んでおけば、起動PowerShellのプロンプトを変えられるPowerShellがあらかじめ持つ関数だが、変え方は様々だ。環境変数(Get-ChildItem Env:)のNameにあるものから
function prompt { "$env:PROCESSOR_IDENTIFIER> " }
にしておけばCPU名を表示。
function prompt { "ファイル数:$((ls).Count)> " }
としておけば
移動したフォルダにあるファイル数をカウントして表示する。テキストから読み込んで表示することも可能で、-Rawで改行もそのまま読み込み、returnで戻す。
function prompt {
$text = Get-Content "C:\Users\●●●\Documents\prompt.txt" -Raw
return "$text "
}
任意の文字をリアルタイムに反映させるノート型プロンプトを考える
テキストファイルから読み込めるのであれば、瞬間メモのようにパラメーターを使って入力できると便利かもと思った。しかし、直接prompt関数はパラメーターを直接受け付けることができない。そこでPowerShellのセッション全体で使えるグローバル変数($global:●●)にパラメーターを入れて、prompt関数に渡すという仕組みでやってみる。
function SetPrompt {
param($Text)
$global:PromptText = $Text
}
function prompt {
return "$PromptText > "
}
表示させておきたいものがあれば、PowerShellから移動せずに即時に対応できるノートのような役割だ。この仕組みを使えば、prompt関数を外部から呼び出せるのでコマンドから機能的なプロンプトやカラフルなものをスキンのように設置しておくことも可能になりそう。カスタマイズが広がりそうだと感じた。








