タクテク2
駆け出しエンジニアの雑記

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

PowerShell 7 + Starship
「黒い画面に白い文字」はいやだ

今回は、CUIへの苦手意識を軽減するために、Windowsのシェル環境をいい感じにカスタムする話です。

具体的には

という強々シェル環境を目指します。

PowerShell 5と7は別物

PowerShell 5 and 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で複数のシェルをまとめて管理

Windows Terminal in Windows Store

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

Windows Terminal

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

デフォルトシェル

ただ、設定(Ctrl + ,)で「スタートアップ」から既定のプロファイルを「PowerShell」に変更(「Windows PowerShell」ではない)しないと起動時に毎回PowerShell 5のほうが起動してしまいます。どっちもMicrosoftなんだから自動で新しいほうに切り替わってくれよ…

Starshipでカラフルかつ便利なシェルプロンプトをあらゆる環境で実現

次に、カスタムシェルプロンプトを導入してシェルの見た目をカラフルかつ便利にカスタマイズします。

PowerShellで使えるカスタムシェルプロンプトはOh-my-poshとかもありますが、

という理由からStarshipを選択しました。日本語ガイドラインもあるのでセットアップは非常に簡単ですが、まとめると

  1. まずwingetとかでインストールする

    winget install --id Starship.Starship
  2. notepad.exe $PROFILEとかでPowerShellプロファイルを開き、以下の一文をコピペする。

    Invoke-Expression (&starship init powershell)
  3. テーマを設定する
    プリセットテーマがいろいろあるので、ここからテーマを選択します。私はCatppuccin Powerlineを選択しました。

    テーマの設定は

    starship preset catppuccin-powerline -o ~/.config/starship.toml

    で可能だと公式ページでは書かれていますが、「パスが存在しない」と言われてエラーになります。調べてみたところ、どうやらホームディレクトリ~を解釈できていないので 「~/」を「$HOME/」に置き換える必要があるようです。

    参考:PowerShellでStarshipのプリセットを使用する方法

  4. フォントのインストールと変更

    これでシェルプロンプトが変化しますが、一部アイコンが文字化けします。なのでアイコンが含まれるNerd Fontをインストールします(和訳すると「オタクフォント」?)。

    フォントはいろいろありますが、私はFiraCode Nerd Fontの FiraCode Nerd Font Monoをインストールしました。1つのフォンファミリーに対して複数のフォントがありますが、後ろにMonoがついているやつじゃないとダメらしい。

    PowerShell フォント設定

    あとは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の設定から変更する方法は見つかりませんでした。

Windows terminal JSONファイル

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

Tags: