PowerShellのPrompt関数をカスタマイズして使いやすいシェル環境を作る方法

PowerShellはWindowsを中心に、スクリプトの実行やシステムの管理を効率化するために広く使われているコマンドラインシェルです。

デフォルトのプロンプトもシンプルで使いやすいですが、自分の作業スタイルや好みに合わせてカスタマイズすることで、さらに効率的なシェル環境を作ることができます。

この記事では、PowerShellのPrompt関数をカスタマイズする方法について詳しく解説します。

PowerShellのPrompt関数とは?

PowerShellのPrompt関数は、コマンドプロンプトの表示内容を決定する役割を持つ関数です。

デフォルトのPowerShellのプロンプトはシンプルに現在のディレクトリを表示していますが、実はこのプロンプトの内容を自分で自由にカスタマイズすることが可能です。

デフォルトのPrompt関数の内容を確認するには、以下のコマンドを実行します:

(Get-Command Prompt).Definition

このコマンドを実行すると、PowerShellのデフォルトのPrompt関数がどのように定義されているかが表示されます。

たとえば、次のようなコードが表示されるでしょう:

function Prompt {
    "$PWD> "
}

Prompt関数の基本的なカスタマイズ

Prompt関数をカスタマイズするには、シェル上で新しいPrompt関数を定義するだけです。

たとえば、現在のディレクトリに加えて現在の日時も表示したい場合は、次のようにカスタマイズできます。

function Prompt {
    "$((Get-Date).ToString('yyyy-MM-dd HH:mm:ss')) $PWD> "
}

この関数を実行すると、プロンプトに現在の日時が追加されます。

よくあるカスタマイズの例

以下に、よく使われるカスタマイズの例をいくつか紹介します。

1. ユーザー名とコンピュータ名を表示する

ネットワーク環境での作業が多い場合、ユーザー名やコンピュータ名を表示することで、どの環境で作業しているかが一目でわかるようになります。

function Prompt {
    "$env:UserName@$env:COMPUTERNAME $PWD> "
}

2. Gitブランチ情報を表示する

開発環境では、現在のディレクトリがGitリポジトリである場合に、現在のブランチを表示することで作業効率が向上します。

PowerShellでGitブランチを表示するには、以下のようにスクリプトを追加します。

function Prompt {
    $branch = ''
    if (Test-Path .git) {
        $branch = & git rev-parse --abbrev-ref HEAD 2>$null
        if ($branch) { $branch = "[$branch] " }
    }
    "$branch$PWD> "
}

これで、Gitリポジトリ内ではプロンプトにブランチ名が表示されるようになります。

3. エラーカウントを表示する

PowerShellのセッション中に発生したエラーの数を表示することで、スクリプトのデバッグやエラーの追跡がしやすくなります。

function Prompt {
    "$PWD (Errors: $global:Error.Count)> "
}

色をつけて視覚的にわかりやすくする

PowerShellでは、Write-Hostを使ってプロンプトに色を付けることもできます。

例えば、現在のディレクトリを青色、ユーザー名を緑色に表示するには以下のようにします。

function Prompt {
    Write-Host -NoNewline -ForegroundColor Green "$env:UserName@$env:COMPUTERNAME "
    Write-Host -NoNewline -ForegroundColor Blue "$PWD"
    return '> '
}

Prompt関数の永続化

PowerShellのセッションを終了すると、カスタマイズしたPrompt関数の設定もリセットされます。カスタマイズを永続化するには、$PROFILEファイルに関数を追加します。

PowerShellで以下のコマンドを実行し、ファイルを開きます:

notepad $PROFILE

開いたファイルにカスタマイズしたPrompt関数を記述して保存することで、次回のセッション開始時にも設定が反映されます。

演習問題

演習問題 1

問題: PowerShellのPrompt関数をカスタマイズして、以下の内容をプロンプトに表示させてください。

  • 現在のユーザー名(緑色)
  • 現在のディレクトリ(青色)
  • Gitブランチ(リポジトリ内の場合のみ、黄色)

ヒント: 色をつける場合はWrite-Hostコマンドを使用してください。

演習問題 2

問題: Prompt関数をカスタマイズして、現在のディレクトリとともに以下の内容を表示させてください。

  • セッション開始からの経過時間(分単位)

ヒント: $global:SESSION_START変数にセッション開始時刻を格納し、Prompt関数内で現在の時間との差を計算してください。

解答例

演習問題 1の解答

function Prompt {
    Write-Host -NoNewline -ForegroundColor Green "$env:UserName "
    Write-Host -NoNewline -ForegroundColor Blue "$PWD "
    $branch = ''
    if (Test-Path .git) {
        $branch = & git rev-parse --abbrev-ref HEAD 2>$null
        if ($branch) {
            Write-Host -NoNewline -ForegroundColor Yellow "[$branch] "
        }
    }
    return '> '
}

演習問題 2の解答

# セッション開始時に1回実行
$global:SESSION_START = Get-Date

function Prompt {
    $elapsed = (New-TimeSpan -Start $global:SESSION_START -End (Get-Date)).TotalMinutes
    "$PWD (Session time: $([math]::round($elapsed, 1)) min)> "
}

まとめ

PowerShellのPrompt関数をカスタマイズすることで、作業のしやすさや視覚的な利便性を大幅に向上させることができます。

Prompt関数のカスタマイズを学ぶことで、コマンドラインの情報量を増やしたり、作業環境に合わせた最適なプロンプトを作り上げたりすることが可能です。