PowerShell 7+Windows Terminal+Starshipで最強のターミナル環境

今回は、CUIへの苦手意識を軽減するために、Windowsのシェル環境をいい感じにカスタムする話です。
具体的には
- PowerShell 7 導入によるコマンド補完でらくらく入力
- Starship導入でカラフルかつアイコンでいい感じの見た目に
- Windows Terminalの導入でWSLやGit Bashもまとめて管理
という強々シェル環境を目指します。
PowerShell 5と7は別物

今まで知らなかったんですがPowerShellには「5」と「7」の2つのバージョンが存在し、これらは別物として扱われます。そして、強力な入力予測機能(Tabを押さなくても候補が出る)が使えるのは7です。
もし今使用しているPowerShellで
$PSVersionTable
と打ってPSVersionが5であり、かつPowerShell7がスタートメニューにない場合はインストールされていないので、まずはPowerShell 7をインストールします。
PowerShell 7はMicrosoft Storeからもインストールできますが、wingetでサクッとインストールできます。
winget install Microsoft.PowerShell
すると、スタートメニューに「Windows PowerShell」と「PowerShell 7」の2つが登録され、後者でPowerShell 7が起動します。
Windows Terminalで複数のシェルをまとめて管理

この時点でPowerShell 5と7という2つのシェルが存在するわけですが、それ以外にもGitBashとかWSLとか、エンジニアたるもの複数のシェルを扱うものです(by 最近になってやっとシェルとターミナルとカーネルの関係性を理解した筆者)。これらをまとめて管理できるのが「Windows Terminal」です。

こんな感じで、従来のWindows コマンドラインやPowerShell 5と7、あと(このPCには入れていないのですが)GitBashやWSLまでまとめて1つのウィンドウで管理できます。

ただ、設定(Ctrl + ,)で「スタートアップ」から既定のプロファイルを「PowerShell」に変更(「Windows PowerShell」ではない)しないと起動時に毎回PowerShell 5のほうが起動してしまいます。どっちもMicrosoftなんだから自動で新しいほうに切り替わってくれよ…
Starshipでカラフルかつ便利なシェルプロンプトをあらゆる環境で実現
次に、カスタムシェルプロンプトを導入してシェルの見た目をカラフルかつ便利にカスタマイズします。
PowerShellで使えるカスタムシェルプロンプトはOh-my-poshとかもありますが、
- クロスプラットフォームで使えてWSL環境にも適用可能
- Rust製でなんかよさそう(雑)
という理由からStarshipを選択しました。日本語ガイドラインもあるのでセットアップは非常に簡単ですが、まとめると
まずwingetとかでインストールする
winget install --id Starship.Starship
notepad.exe $PROFILE
とかでPowerShellプロファイルを開き、以下の一文をコピペする。Invoke-Expression (&starship init powershell)
テーマを設定する
プリセットテーマがいろいろあるので、ここからテーマを選択します。私はCatppuccin Powerlineを選択しました。テーマの設定は
starship preset catppuccin-powerline -o ~/.config/starship.toml
で可能だと公式ページでは書かれていますが、「パスが存在しない」と言われてエラーになります。調べてみたところ、どうやらホームディレクトリ~を解釈できていないので 「~/」を「$HOME/」に置き換える必要があるようです。
フォントのインストールと変更
これでシェルプロンプトが変化しますが、一部アイコンが文字化けします。なのでアイコンが含まれるNerd Fontをインストールします(和訳すると「オタクフォント」?)。
フォントはいろいろありますが、私はFiraCode Nerd Fontの FiraCode Nerd Font Monoをインストールしました。1つのフォンファミリーに対して複数のフォントがありますが、後ろにMonoがついているやつじゃないとダメらしい。
あとはWindows Terminalの設定を開き、該当プロファイルの「外観」内「フォント フェイス」をNerd Fontに変更すれば完了。これでWindowsアイコンが表示されるはずです。ここで、 「Windows PowerShell」がPowerShell 5、「PowerShell」がPowerShell 7なので注意。
初期設定だとプロンプトに常にユーザー名が表示され、かつコマンド終了時に毎回通知が来て面倒なので「~/.config/starship.toml」を編集し、
[username]
show_always = false
[cmd_duration]
show_notifications = false
を設定しています。
Windows Terminalのプロファイル並び順入れ替え

これでカラフルかつ便利なシェル環境が手に入ったのですが、ひとつ不満があります。それがWindows Terminalのプロファイルの先頭にPowerShell 5が配置されていることです。WSLを入れた場合もなんか微妙な位置に追加されるのですが、ここの並びはWindows terminalの設定から変更する方法は見つかりませんでした。

仕方ないので設定のJSONファイルを開いて、“profiles"に並んでいる項目を編集することで並び変えることができました。せっかく設定GUIがあるんだからドラッグアンドドロップで並び変えられるようにしてほしいです。