• Windows Terminal ベスト設定「第3回 プロファイル 基本編」

Windows Terminalの設定は、大きく「全体」、「アクション」、「プロファイル」、「色スキーマ」の設定に別れている(表01)。色スキーマ設定は、Windows Terminal内で利用する文字や背景色のセット(VTエスケープシーケンスでは同時に文字色、背景色を独立して16色指定できる)を切り替えるもの。

  • ■表01

全体設定は、Windows Terminalのウィンドウサイズ、タブの表示方法など、プログラム全体の動作を指定するもの、アクション設定はキー割り当て、コマンドなどの動作を指定するものだ。

このうち、キー割り当てなどに関連するアクション設定に関しては、過去の記事で扱っている。

・Windows Terminal ベスト設定 第1回「キーボードカスタマイズ 導入編」
https://news.mynavi.jp/article/20211025-2168960/
・Windows Terminal ベスト設定 第2回「キーボードカスタマイズ ベスト設定編」
https://news.mynavi.jp/article/20220121-2253134/

ここでは、Windows Terminal内で動作する、コマンドラインインタプリタやシェルプログラム(以後シェルと略記する)ごとに設定を行う「プロファイル」の設定方法などについて解説を行う。なお、Windows Terminalは、日本語対応しているが、言語設定を英語とし、コマンドを欧文表記とすることで、コマンドパレットなどを使いやすくすることができる(ウィンドウ内の表示や文字コードには影響せず日本語表示が可能)。このこともあり、設定項目などに関しては、英語表記を併用する。

また、この記事では、Windows Terminal v1.12.1073(安定版)、およびWindows Terminal Preview v1.13.1073(プレビュー版)で検証を行っている。

Windows Terminalの設定

Windows Terminalの設定は、GUI設定とsettings.jsonファイルの書き換えによる設定(以後JSON設定と表記する)の2つがある。どちらも設定としての効果は同じで、GUI設定を変更すれば、同時にJSON設定側も変更が行われる。JSON設定を行っても、GUI設定は変更される。ただし、GUI設定の項目とJSON設定の項目はすべて1対1に対応しているわけではない。

JSONでは設定できるが、GUI設定では行えない設定項目もある。Windows Terminalは開発初期段階ではGUI設定を持たずJSON設定でのみ設定を行っていた。このため、現在では利用しない設定項目やGUI設定では不要の項目がJSON設定側に残っている。

たとえば、現在のWindows Terminalでは、プロファイルでバックグラウンドカラーを指定する場合には、カラースキーマを使うが、過去においては、バックグラウンドカラーを個別のJSON項目“background”でRGB値を使って指定していた。互換性を維持するため、JSON設定ではいまだにこの指定は利用可能だが、GUI設定には、これに対応する項目はない。そのほか、GUI設定では個々のプロファイルを設定項目として区別できるため、GUID項目は内部的に使われているが、GUI設定は表示されない。

以前の記事では、キーボードの設定で、GUI設定からは困難な設定もあるため、JSON設定での解説を行ったが、プロファイル設定などでは、基本的にはGUI設定のみで可能だ。

ただし、GUI設定は、表記が冗長で、設定項目を探すには、設定ページを見ていくしか方法がないのに対して、settings.jsonはテキストエディタなどで編集が可能なテキストファイル(json形式のテキストファイル)なので、検索が容易という特徴がある。

Windows Terminalの設定項目は、「カスケード」構造になっている(図01)。この構造では、JSON設定/GUI設定、Windows Terminal起動コマンドなど複数の場所で設定値を指定、最終的に有効な設定項目が実行時の設定値になる。逆に、何も設定のない項目はデフォルト値が使われることになる。

  • 図01: Windows Terminalの設定は、多層構造になっており、固定されたデフォルト設定値を元に、GUI/JSON設定や起動オプション、キー割り当てなど、複数の場所で設定値を指定でき、最後に適用されたものが有効になる

プロファイルとは?

プロファイル設定とは、Windows Terminalの設定項目のうち、シェルやコマンドインタプリタのプログラム(以後、これをシェルと表記する)ごとに、表示方法や挙動などを定義する部分をいう。たとえば、cmd.exeでは背景色を青、PowerShell.exeでは背景色をグレーなどといったシェルごとに設定を行うものがプロファイル設定だ。

プロファイル設定は、メインメニューに表示される(図02)。そのほか、“newTab”や“newWindow”アクションのキー割り当て、Windows Terminalの起動オプションで起動するシェルを指定するために使うことができる。Windows 11では、標準のコンソールプログラムとなることができるため、起動するシェルプログラムから対応するプロファイルを推測して適用する機能がある。

  • 図02: プロファイルは、複数定義することができ、それぞれが個別の設定値を持つ。また、プロファイル共通の設定値として「既定値」プロファイルが存在する。プロファイルは、メインメニュー、キー割り当て、コマンドラインなどで利用でき、プロファイルに定義されたシェルが指定された環境で起動する

プロファイルは、ユーザーが自由に追加できるため、同じシェルに対しても複数のプロファイルを定義し、見た目やシェルの起動オプションを指定できる。記事冒頭のタイトル写真は、プロファイルで背景やフォントなどを指定して作成したものだ。

プロファイル設定項目

プロファイル設定は、すべてのプロファイルの共通設定となる「既定値」プロファイルと、シェルごとに個別に設定を行う「個別」プロファイルに別れる。個別プロファイルは、ユーザーが自由に追加削除できるが、Windows Terminalは初期化時(通常はインストール時)にインストールされているシェルを調べて、自動登録する「ダイナミックプロファイル」機能がある。ただし、多数のプロファイルを扱うとそれぞれの区別が煩雑になる、あるいは該当のシェルを使わない場合もある。Windows Terminalにはメインメニュー表示の可否や、ダイナミックプロファイルの抑制といった機能がある。

プロファイル内の設定項目は、大きく表02以下の3つに分かれる。これは、GUI設定の分類であり、Microsoftのサイトにあるドキュメント(表03)もこのカテゴリに分類されている。

  • ■表02

  • ■表03

表04が全般カテゴリの設定項目だ。ここでは、GUI設定項目の表示名とJSON設定のJSONオブジェクト名を併記してある。全般カテゴリのみ、既定値プロファイルと個別プロファイルでは設定項目が違う。JSON設定内では、こうしたカテゴリ分けを示す記述はないが、Microsoftのドキュメントのカテゴリ分けに従って設定項目を「(JSON項目)」として入れてある。

  • ■表04

表05は、外観の設定項目だ。初期のWindows Terminalでは、デフォルトの文字色と背景色は、カラースキーマ設定とは独立して設定が行われていた。その後、カラースキーマに文字色、背景色のデフォルト値が含まれることになり、GUI設定では、まとめて「配色」でのみ設定することになった。

  • ■表05

外観の設定を変更することで、背景や背景色などでシェルを区別することが簡単になる。このあたりのカスタマイズについては回を改めて解説したい。

表06は詳細の設定項目だ。ここは、Windows Terminalの振る舞いに関連する設定である。このうち、「AltGrエイリアス」とは、主に非英語圏などで使われるキーボードにある「AltGr」(Alternate Graphics)キーに関する項目だ。AltGrキーは、アクセント記号付き文字などを入力するために使う修飾キーの1種。英語キーボードや日本語キーボードには存在しない。

  • ■表06

表の最後にあるguidとsourceは、ダイナミックプロファイルに関連するもの。ダイナミックプロファイルとして登録されたプロファイルには、プロファイルプロバイダー名がsourceに、ダイナミックプロファイル固有のidがguidに設定される(表07)。

  • ■表07

cmd.exeやPowerShell、WSL、Azure Cloud Shellの場合には、固定したguidが割り当てられる。これを利用することで、プロファイルを指定するキー割り当てや他の設定で、プロファイルを特定できる。Windows Terminalには、プロファイル番号やプロファイル名でもプロファイルを指定できるが、プロファイル番号はインストールされているプログラムで変更されることがあり、プロファイル名はユーザーが変更する可能性がある。

ただし、Visual StudioのDeveloper Command PromptやDeveloper PowerShellに関しては、現状PCごとに異なるguidが割り当てられる。

プロファイル推定

Windows 11では、デフォルトのコンソールとしてWindows Terminalを設定できる。このとき、Windows Terminalのタブは、Windows Terminal外で実行されたシェルにより開く可能性がある。

プレビュー版v1.13では、このとき、プロファイルの推定が行われ、同じコマンドラインを持つプロファイルが存在していれば適用され、存在しないときには既定値のプロファイルが利用される。

このとき、推定の条件に使われるのはプロファイルの全般にある「コマンドライン」(commandLineプロパティ)で、パスを除いた実行ファイル名と引数が起動されるシェルのコマンドラインと前方最長一致で照合される。

たとえば、4つのプロファイルがあり、そのコマンドライン設定が


A   C:\Windows\System32\wsl.exe -d Ubuntu
B   C:\Windows\System32\wsl.exe -d Ubuntu --cd ~
C   C:\Windows\System32\wsl.exe
D   C:\Windows\System32\wsl.exe --cd ~ -d Ubuntu

となっていた場合、


wsl -d Ubuntu --cd ~

を実行すると、Dのプロファイルが選択される。プロファイルの推定では、正規化した実行ファイルパスを長さ順に並べ直して、一致を見ていくため、プロファイル定義の順番には影響されない。上記のような場合、BDACの順で照合が行われ、最も長く一致するDが選択される。

ただし、プロファイル推定では、オプションのロング、ショート形式(-で始まるか、--で始まるか)、指定順序など、意味は同じでも表記が異なるオプションを理解しない。「wsl --distribution Ubuntu --cd ~」を実行すると、同じ意味となるBやDはオプションの表現形式が異なるため選択されず、Cのプロファイルが有効になる。

逆にコマンドライン照合をうまく行わせるには、できるだけ上記の引数のないCのようなコマンドラインを持つプロファイルを1つ定義しておく。これで、他の候補がない場合に、既定値プロファイルではなく、引数のないコマンドラインを持つプロファイルが選択される。

Windows Terminalのプロファイル設定は、シェルの実行環境を設定するための方法で、その設定に精通することで、シェルやオプション指定などに最適の環境を選択できる。

>> Windows Terminal ベスト設定 連載バックナンバー
https://news.mynavi.jp/tag/winterminal/