oh-my-posh
について、今まではPowerShell Gallery
かPowerShellモジュール
をインストールすることによって機能を提供していました。
この提供方法がversion 7.75.0
から変更になるようです。
PowerSHellモジュール版のoh-my-posh
のバージョンを7.75.0
にアップデートした所、起動時にプロンプトに下記の表示がされるようになっていました。
PowerShellモジュール
で提供されているoh-my-posh
の機能は、しばらく前からバイナリ化(oh-my-posh.exe
)されており。
モジュールに含まれるコマンドレットは実はバイナリ(oh-my-posh.exe
)のラッパーとして機能していました。
今回、下記の利用からPowerShellモジュール
の機能提供は更新されなくなり、これからはバイナリをインストールする方法に移行されるようです。
・downloading the binary is a problem on company managed computers
・the module syncs cross device thanks to OneDrive sync, causing versions to be out of sync and configs to break
・it's impactful having to explain the difference time and time again (for me)
ドキュメント
すでにモジュール版をインストールしている場合、移行ドキュメントが用意されています。
ドキュメントにはモジュールのアンインストール方法とバイナリのインストール方法と設定方法が記載されています。
本記事では、こちらを参照して移行してみます。
今回対象とする環境
- Windows 10 21H2
- PowerShell 7.3.0-preview.3
- oh-my-posh 7.75.0
- winget v1.3.431-preview
wingetでoh-my-poshをインストール
Windows環境へのインストールでは、winget、scoop、manual。
3種類のインストール方法が提供されています。
本記事ではwingetを利用してインストールします。
winget install oh-my-posh
ドキュメントには下記のように記載されており、今回実施した端末でも再起動しないとPATHが反映されなかったため、ここで再起動しました。
For the $PATH to reload, a restart of your terminal is advised.
なおインストールPATHを確認すると下記のように追加されていました。
なおwingetでインストールしたバイナリを更新する場合は下記を実行します。
winget upgrade oh-my-posh
モジュール版のアンインストール
Uninstall the PowerShell module
Uninstall-Module oh-my-posh -AllVersions
ちなみにモジュールがうまくアンインストールできない場合は、下記でPowerShellモジュールのインストール先を調べ、そのディレクトリを直接削除する方法もあります。
# モジュールがインストールされているパスを確認する
# 適宜、表示されたパスを削除して下さい。
(Get-Module -ListAvailable oh-my-posh).ModuleBase
起動プロファイルに記載している設定を削除する。
今回対象となる端末では、起動プロファイルでImport-ModuleとSet-PoshPromptを利用していたので起動プロファイルからこちらを削除します。
Import-Module oh-my-posh
Set-PoshPrompt "hogehoge\myTheme.omp.json"
起動プロファイルの更新
いままで起動プロファイルにSet-PoshPrompt
コマンドレットで設定していたテーマ設定を下記のような記述に置き換えます。
oh-my-posh init pwsh --config ~/.custom.omp.json | Invoke-Expression
総評
現在、oh-my-posh
の機能がoh-my-posh.exe
で提供されるようになり。
PowerShellモジュール
のコマンドレットがoh-my-posh.exe
のラッパーとして機能している状況となるため。
直接、oh-my-posh.exe
をインストールして実行するようにするようになるのは極めてその通りな気はします。