[PowerShell] Oh My PoshのPowerShellモジュールが廃止されていたので移行してみた
しばたです。
以前の記事で紹介した様に私はWindows TerminalでPowerShellを扱う際にOh My Poshを使っています。
記事を公開した時はOh My PoshのバージョンがV2系からV3系への過渡期だったのですが、その後V3からはPowerShell以外のシェルもサポートする様になり頻繁にメジャーバージョンが上る方針に切り替わりました。
私も定期的にバージョンアップに追従する様にしており、本日久しぶりにアップデートしたところ以下のメッセージが表示されPowerShellモジュールを使ったインストールが廃止された旨が通知されました。
Hey friend
In an effort to grow oh-my-posh, the decision was made to no
longer support the PowerShell module. Over the past year, the
added benefit of the module disappeared, while the burden of
maintaining it increased.
However, this doesn't mean oh-my-posh disappears from your
terminal, it just means that you'll have to use a different
tool to install it.
All you need to do, is follow the migration guide here:
https://ohmyposh.dev/docs/migrating
Oh My Poshをバージョンアップする
更新前はVer.7.41.0を使っていました。
Update-Module
を使い、最終的に更新されたバージョンはVer.7.85.2でこのバージョンがPowerShellモジュールをサポートしていた最終バージョンとなります。
先述のメッセージ通りPowerShellモジュールを廃止した後の移行方法は以下のドキュメントに記載されています。
基本的には
- 旧バージョンバイナリの削除
- 新バージョンのインストールと起動方法の更新
- PowerShellモジュールの削除
を行う形となります。
今回私は動作確認しながら試したので、
- 旧バージョンバイナリの削除
- PowerShellモジュールの削除
- 新バージョンのインストール
- 起動方法の更新
の順序で作業を行っています。
環境に応じて適切な順序を選んでください。
1. $env:POSH_PATH の削除
PowerShellモジュールベースでOh My Poshを使っている場合POSH_PATH
環境変数が有効で、このパスに実行バイナリなどが保存されているはずです。
私の場合は"ユーザープロファイル"\AppData\Local\oh-my-posh\
に設定されていました。
# POSH_PATH 環境変数が指すディレクトリ
C:\> dir $env:POSH_PATH
Directory: C:\Users\shibata\AppData\Local\oh-my-posh
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 3/17/2022 1:52 PM themes
-a--- 3/17/2022 1:52 PM 18855936 oh-my-posh.exe
こちらの内容を確認し保存しておく必要があるファイルが無ければディレクトリごと削除します。
# 環境変数が設定されている場合は削除
#
# ※環境変数が設定されていない場合に誤ってカレントディレクトリを消してしまわない様に注意!
#
if (-not ($null -eq $env:POSH_PATH)) {
Remove-Item $env:POSH_PATH -Force -Recurse
}
2. PowerShellモジュールのアンインストール
次にPowerShellモジュールをアンインストールします。
# PowerShellモジュールのアンインストール
Uninstall-Module oh-my-posh -AllVersions
3. 新バージョンのインストール
現在のOh My PoshはWindows環境だとWindows Package Manager (WinGet)かScoopを使いインストールする仕組みになっています。
今回はWinGetを使いインストールしてやります。
WinGet自体のインストール方法は割愛します。
# WinGetで oh-my-posh をインストール
winget install JanDeDobbeleer.OhMyPosh -s winget
今回はVer.8.29.5がインストールされました。
インストール後コンソールを再起動すれば以下の様にoh-my-posh
のバイナリが見つかるはずです。
# Get-Commandで oh-my-posh の実行バイナリが見つかればOK
C:\> Get-Command oh-my-posh | Format-List Name, Path
Name : oh-my-posh.exe
Path : C:\Users\shibata\AppData\Local\Programs\oh-my-posh\bin\oh-my-posh.exe
なお、新しいバージョンではPOSH_PATH
環境変数はありません。
4. 起動方法の更新
最後に従来の起動方法から新しい方法に切り替えてやります。
もしPowerShellのプロファイルにImport-Module
を書いている場合はその記述を削除します。
そしてプロンプトをカスタマイズするSet-PoshPrompt
の呼び出しを以下の記述に置き換える必要があります。
# Set-PoshPromptの代わりに以下の様に oh-my-posh init pwsh を実行する
oh-my-posh init pwsh --config "設定ファイルのパス" | Invoke-Expression
# 標準のテーマを使っている場合はこんな感じで実行する
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\jandedobbeleer.omp.json" | Invoke-Expression
以前の記事で書いた例を出すと以下の様に書き換えてやります。
こちらは環境に応じてよしなに変えてください。
# 過去の書き方
if ($env:WT_PROFILE_ID) {
# Windows Terminalから実行されたときだけ変更する設定をここに記述する
Import-Module oh-my-posh
Set-PoshPrompt -Theme agnosterplus
}
# ↓
# 新しいバージョンでの書き方
if ($env:WT_PROFILE_ID) {
# Windows Terminalから実行されたときだけ変更する設定をここに記述する
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\agnosterplus.omp.json" | Invoke-Expression
}
今後のバージョンアップ方法
新しいバージョンをインストールした方法(WinGet, Scoop)の流儀に従ってバージョンアップします。
WinGetの場合であれば以下の様な感じでwinget upgrade
コマンドを実行してやります。
# WinGetでバージョンアップ
winget upgrade JanDeDobbeleer.OhMyPosh -s winget
最後に
以上となります。
思った以上に簡単に切り替えることができました。
更新前のバージョンによっては設定ファイルの記述に互換性が無い場合もあるかもしれません。
その場合は起動方法と併せて設定ファイルのマイグレーションを行うことになるでしょう。