セキュリティが厳しい昨今では、リスクも伴いハードルも上がっているようだが、XPとかVistaくらい昔に流行っていたWindowsスキンのカスタマイズでは、しきりにアクア調のスキンを探しては一変するデスクトップに一喜一憂していた。カスタマイズすることはいわばソフトウェア的なプラモデルであるように思える。

以前、自宅PCのWindowsターミナル環境をNerd Fontsでグラフィカルにカスタマイズしている筆者であるが、やはり気分転換が大きな効果をもたらす。深夜の勉強部屋で唯一、躍動的に光るオーディオコンポのインジケーターを眺めているような感覚だ。毎回、同じインタフェースだと必ず飽きるが、うまい具合に別のものに変えられると集中度が増す。

  • Nerd Fontsでグラフィカルにカスタマイズ

    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 > "
}

  • SetPromptでメモをわたせば、リアルタイムにプロンプトを変えられる

    SetPromptでメモをわたせば、リアルタイムにプロンプトを変えられる

表示させておきたいものがあれば、PowerShellから移動せずに即時に対応できるノートのような役割だ。この仕組みを使えば、prompt関数を外部から呼び出せるのでコマンドから機能的なプロンプトやカラフルなものをスキンのように設置しておくことも可能になりそう。カスタマイズが広がりそうだと感じた。