今回は、冗長になりがちな設定ファイルの記述を簡素にできる個別設定項目の共通化と、PowerShellの自動検出機能を取り上げて紹介したい。 どちらも細かな改善ではあるのだが、着々と正式リリースに向かっていることを感じさせられる機能だ。

個別設定項目の共有化

Windows Terminalの設定については以前紹介した。Windows Terminalは設定ファイルを編集することで機能の操作や可不可、カラー設定などができるようになっている。また設定には各プロファイルごとに個別に設定できる項目が用意されており、各シェルごとに振る舞いを変えることができるようになっている。

個別設定項目は各シェルごとに設定できる反面、同じ設定内容であっても各プロファイルごとに記載しなければならず、場合によっては設定ファイルが冗長になってしまうという問題があった。

この設定ファイルを簡潔に記述できるよう、個別設定項目を共有化する機能がバージョン0.8より追加された。個別設定項目を全体設定項目に近い扱いにしているところがこの新機能の”ミソ”だと言える。

具体的には設定ファイルのprofiles内に「defaults」と「list」というプロパティを用意し、defaults内に共通の個別設定項目を、list内に各プロファイル(各シェル)ごとの設定を行えるようにした。

例えば、これまでは次のように設定していたとしよう。ご覧いただけばわかると思うが、フォントの設定やカラースキームの設定が各プロファイルで重複してしまっており、設定が冗長になっている。 “profiles”: [ { // Make changes here to the powershell.exe profile “guid”: “{61c54bbd-c2c6-5271-96e7-009a87ff44bf}”, “name”: “Windows PowerShell”, “commandline”: “powershell.exe”, “fontFace”: “Cascadia Mono”, “fontSize”: 10, “colorScheme”: “Vintage”, “hidden”: false }, { // Make changes here to the cmd.exe profile “guid”: “{0caa0dad-35be-5f56-a8ff-afceeeaa6101}”, “name”: “cmd”, “fontFace”: “Cascadia Mono”, “fontSize”: 10, “colorScheme”: “Vintage”, “hidden”: false, “source”: “Windows.Terminal.Wsl” }, { “guid”: “{2c4de342-38b7-51cf-b940-2309a097f518}”, “hidden”: false, “name”: “Ubuntu”, “fontFace”: “Cascadia Mono”, “fontSize”: 10, “colorScheme”: “Vintage”, “source”: “Windows.Terminal.Wsl” } ],

これを次のようにdefaultsとlistを使って書き換えることが可能となった。全体がすっきりし、理解しやすくなったことがわかると思う。

defaultsによる個別設定の共有化とlistによる各プロファイルの個別設定化

    "profiles":{
        "defaults":
            {
                "fontFace": "Cascadia Mono",
                "fontSize": 10,
                "colorScheme": "Vintage"
            },
        "list":[
            {
                // Make changes here to the powershell.exe profile
                "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
                "name": "Windows PowerShell",
                "commandline": "powershell.exe",
                "hidden": false
            },
            {
                // Make changes here to the cmd.exe profile
                "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
                "name": "cmd",
                "hidden": false,
                "source": "Windows.Terminal.Wsl"
            },
            {
                "guid": "{2c4de342-38b7-51cf-b940-2309a097f518}",
                "hidden": false,
                "name": "Ubuntu",
                "source": "Windows.Terminal.Wsl"
            }
        ]
    },

defaults内とlistの各プロファイル内で同じ設定項目を利用した場合は、各プロファイルの設定した値が優先されるようになっている。次のように設定した場合、PowerShellやコマンドプロンプトではCascadiaフォントが使われるが、WSL環境のUbuntuではConsolasフォントが使われるようになる。

list内の設定項目の値が優先される

設定ファイルの修正作業は発生してしまうが、一度個別設定項目をdefaultsとlistに分けてしまえば以降の設定変更は楽になるはずだ。しばらく設定ファイルの編集を行わず、内容を忘れたとしても再度設定を確認する際の理解度も早くなるだろう。

なお、新規にWindows Terminalをインストールした場合や設定ファイルを削除または移動させた場合、次のように標準でdefaultsとlistのかたちで設定ファイルが生成されるようになっている。したがって、今からWindows Terminalを利用し始めるユーザーは設定ファイルを編集し直す必要はないだろう。 “profiles”: { “defaults”: { // Put settings here that you want to apply to all profiles. }, “list”: [ { // Make changes here to the powershell.exe profile. “guid”: “{61c54bbd-c2c6-5271-96e7-009a87ff44bf}”, “name”: “Windows PowerShell”, “commandline”: “powershell.exe”, “hidden”: false }, { // Make changes here to the cmd.exe profile. “guid”: “{0caa0dad-35be-5f56-a8ff-afceeeaa6101}”, “name”: “Command Prompt”, “commandline”: “cmd.exe”, “hidden”: false }, { “guid”: “{b453ae62-4e3d-5e58-b989-0a998ec441b8}”, “hidden”: false, “name”: “Azure Cloud Shell”, “source”: “Windows.Terminal.Azure” } ] }

PowerShellの自動検出

PowerShellに対応しているWindows Terminalを、そのカスタマイズ性の高さから利用の選択肢に選ぶPowerShellユーザーは少なくないだろう。さらに仕事の都合上、複数のPowerShellバージョンをWindows環境に入れて作業しなければならないユーザーにとっては、設定ファイルのプロファイルを編集することでWindows Terminalだけで作業が完結するようになるのは大きいのではないだろうか。

そんなユーザー向けの機能の1つとして、PowerShellの自動検出機能がバージョン0.9に導入されている。以前、UbuntuなどのWSL環境がシステムにすでに入っている場合、Windows Terminalは自動検出して設定ファイルに自動で書き込まれ、ユーザーは意識することなくすぐにWindows Terminal上で利用できることを紹介した。

Windows TerminalではさらにWindows環境に異なるPowerShellがインストールされている場合に自動で検出するよう改良が加えられた。

異なるPowerShellバージョンを自動検出しプルダウンメニューに表示

自動検出された場合、次のように設定ファイルに自動記述される。この時プルダウンメニューには最新のバージョンのみ”PowerShell”と名前が付けられ、それ以外のPowerShellにはCore+バージョン名が付与されるようになっている。

    "profiles":
    {
        "defaults":
        {
            // Put settings here that you want to apply to all profiles.
        },
        "list":
        [
            {
                // Make changes here to the powershell.exe profile.
                "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
                "name": "Windows PowerShell",
                "commandline": "powershell.exe",
                "hidden": false
            },
        ....
            {
                "guid": "{574e775e-4f2a-5b96-ac1e-a2962a402336}",
                "hidden": false,
                "name": "PowerShell",
                "source": "Windows.Terminal.PowershellCore"
            },
            {
                "guid": "{049b895c-b0b8-55de-bce3-27d3220d7ab3}",
                "hidden": false,
                "name": "PowerShell Core 6",
                "source": "Windows.Terminal.PowershellCore"
            }
        ]
    },

自動検出された複数バージョンのPowerShellを同時に利用

この機能は、すでに手動で設定ファイルを編集してPowerShellバージョンごとのプロファイルを用意したユーザーにとっては残念な追加機能ではある。だが、これからWindows Terminalを利用するPowerShellパワーユーザーにとってはありがたい機能なのではないかと思う。

なお、この機能を利用するにはPowerShellを標準のインストール先となるC:\Program Files\PowerShell\以下にバージョン名ごとのフォルダで置いておく必要がある。ほかの場所においている場合は自動検出されない可能性があり、その際は手動で設定ファイルを編集してプロファイルを用意しなければならない点には注意しておきたい。

参考資料