🦾

ちょっと見栄えのいいPowerShellにした

2023/12/20に公開

これはシェルスクリプト&PowerShell Advent Calendar 2023の20日目です。

毎日見るものだから見栄えをよくしよう

Windowsで色々作業しているとPowerShellを触ることも多いですが、デフォルトだとそんなに使いやすくもないイメージです。
どうせなら見栄えを良くしたほうが気分がいいのでカスタマイズしました。
ついでに色々設定を変えて操作感の向上もしました。

設定してみてわかったメリット、デメリット

メリット

  • 見栄えがいい(重要!!)
  • 別途コマンドを叩かなくても得られる情報が増える
  • 慣れ親しんだ(個人差あり)Emacs風キーバインドで操作できる
  • 凝ったプロンプトを設定したのでローカルかsshした先かぱっと見でわかるようになった(想定外のメリット)

デメリット

  • 起動に少し時間がかかるようになった

どうなったか

こうなりました。

カスタマイズ後のPowerShell

見た目

Windows Terminal

Windows11を使っていればWindows Terminalは標準でインストールされていると思います。
Windows10でもMicrosoft Storeかwingetをつかってインストールできると思います。

フォント

見た目を変える前に対応したフォントを使うように変更しましょう。
nerd fontに対応したものであれば何でもいいと思います。いくつかリストアップしてみますので好みで選ぶといいです。

自分はHackGen Console NFを使用しています。

Windows Terminalでは以下の箇所から設定を変更できます。

プロファイル(今回の場合PowerShell)→追加の設定→外観→フォントフェイス

一枚目
二枚目

Oh My Posh

フォントを変えたらプロンプトの見た目を変え始めましょう。
使うツールとしてはOh My Poshを使用します。
Windows環境ではインストール方法としてwingetかscoopが推奨されているので、今回はwingetを使用します。
まずは素の状態のPowerShellの環境で以下のコマンドを実行します。

winget install JanDeDobbeleer.OhMyPosh -s winget

インストールが終わったらOh My Poshを使用する設定を追加します。
$PROFILEを開いて以下の内容を追記します。

# メモ帳で開く
notepad $PROFILE
# VSCodeで開く
code $PROFILE
# $PROFILEに以下を追記
oh-my-posh init pwsh | Invoke-Expression

追記したら一旦Terminalを再起動します。

Theme

https://ohmyposh.dev/docs/themes

標準で上記リンクのテーマがインストールされています。
以下のコマンドでテーマのプレビューができます。

Get-PoshThemes

見た目が好きなテーマを適用するためには、以下のように$PROFILEを修正しましょう。

# $PROFILEに追記した部分を以下のように修正
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH/${テーマの名前}.omp.json" | Invoke-Expression

操作面

見た目を変えたので少し操作感の部分にも手を加えてみましょう。
まず、以下の内容を$PROFILEに追記します。

Import-Module PSReadLine

自分はEmacsキーバインドに慣れているのでbashやzshのようにEmacs風キーバインドが使えるように設定を変更します。

Set-PSReadlineOption -EditMode Emacs
# Ctrl-D でDeleteには標準でならないので別途設定
Set-PSReadlineKeyHandler -Key Ctrl+D -Function DeleteChar

macOSではopenコマンドでfinderでファイルやフォルダを開けて便利なのでそこを少し真似ます。

Set-Alias open Invoke-Item

設定ファイル

最終的に自分は以下のように$PROFILEを設定しています。
あまり凝ったことをしているわけではないのでシンプルになっています。

oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH/tokyo.omp.json" | Invoke-Expression
Import-Module PSReadLine
Set-PSReadlineOption -EditMode Emacs
Set-PSReadlineKeyHandler -Key Ctrl+D -Function DeleteChar
Set-Alias open Invoke-Item

使ってみて

テーマによって表示される情報は異なりますが、自分が使ってるTokyoテーマではコマンドの実行にかかった時間、メモリ使用量、日付、Gitの状態、aws-cliのプロファイルが表示できます。
PSReadLineの機能でhistoryからコマンドの履歴を表示できるので何度も同じコマンドを実行する際に便利になりました。
Emacs風キーバインドが使えるようになったことでbashなどと同じように使用することができます。
正直使いにくいイメージがあったPowerShellですが、少しずつ使いやすくする手助けができればと思います。

Discussion