検索
連載

【Windows Terminal完全マスター】プロファイルをカスタマイズして使いやすくしようWindows 10 The Latest

Windows Terminalの正式版がリリースされたが、設定はプロファイルを編集する必要があるなど、少々ハードルの高いものとなっている。ただ、ルールが分かればそれほど難しいものでもない。そこで、基本的なプロファイルの設定方法を紹介しよう。

Share
Tweet
LINE
Hatena
「Windows 10 The Latest」のインデックス

連載目次

Visual Studio CodeなどのJSONスキーマに対応したエディタ
Visual Studio CodeなどのJSONスキーマに対応したエディタ
Visual Studio CodeなどのJSONスキーマに対応したエディタを使うと、JSONの基本的な文法チェックなどが可能になる。Windows Terminalの設定を行うならインストールしておいた方がいい。

 Microsoftから正式版の配布が開始された「Windows Terminal」は、これまでのコンソール(conhost.exe)とは異なり、タブをサポートし、タブ内も複数のウィンドウに分割できるなど、機能が豊富になっている。ただ、一般的なWindowsアプリとは異なり、設定を全てJSONファイルで行わなければならず、設定変更のハードルが高くなっている。

 そこで今回は、Windows Terminalの設定とカスタマイズに関して、プロファイル設定を中心に解説を行っていく。Windows Terminalのプロファイル設定マニュアルとして活用してほしい。なお、キー割り当てなどについては別途解説記事を予定している。

Windows Terminalをインストールする

 Windows Terminalは、Microsoft Storeからインストールが可能なので、まずはこれをインストールしておく。Microsoft Storeには正式版とPreview版があり、執筆時点では前者は「Ver.1.0.1401.0」、後者は「1.1.1671.0」がそれぞれ提供されていた。

 正式版とプレビュー版は併存が可能である。プレビュー版は、アイコンに「PRE」の文字が付く。

 GitHubには、msixパッケージがあり、ここからダウンロードしてインストールすることも可能だ。執筆時点では、Microsoft Storeと同じバージョンのパッケージをダウンロードできた。

 なお、公式のドキュメントは、「Windows Terminal overview[英語]」にある。

Windows Terminalの設定

 Windows Terminalのタイトルバーにある[v]−[設定]を選択すると、「settings.json」というファイルが保存され、これを「開く」動作が行われる。このあたりに関しては、Windows 10 The Latest「ついに完成『Windows Terminal』の機能と使い方まとめ」を参照してほしい。

 ここでは、既にVisual Studio Code(以下、VS Code)などのJSONエディタがインストールされているとして話をすすめていく。もちろんメモ帳でも編集は不可能というわけではない(VS Codeについては、Visual Studio Code早分かりガイド「Visual Studio Codeの使い方、基本の『キ』」を参照してほしい)。

 「settings.json」は、以下のフォルダに保存されている。

%USERPROFILE%\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState


「settings.json」の保存フォルダ

 なお、「%USERPROFILE%\AppData\Local」は、「%LOCALAPPDATA%」と表記することも可能だ。コマンドラインからは、この表記方法を使い、cdコマンドなどでフォルダを開くことができる。エクスプローラーから開く場合には、シェルショートカットを使い、アドレスバーに以下のshellコマンドを入力する。

shell:Local AppData\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState


「settings.json」の保存フォルダを開くshellコマンド

 設定を間違ったなどで、完全にデフォルト値に戻すには、前記パスにある「settings.json」を削除すればよい。Windows Terminalを起動する前に「settings.json」を削除し、起動してから[v]−[設定]を選択すれば、新規に「settings.json」が作られる。

settings.jsonの構造

 「settings.json」は、JSONファイルであるため、JSONの仕様に従った構造になっている。JSONは、テキストのみで、「データ」オブジェクト(プログラミングに堪能な人向けにいうと構造体のようなもの)を表現するものだ。大まかには、下図のような構造になっている。

settings.jsonの構造
settings.jsonの構造
settings.jsonは、「グローバル設定」「プロファイル設定」「カラースキーム(配色)設定」「キー割り当て設定」の大きく4つの部分に分かれている。また「プロファイル設定」は、「プロファイル共通デフォルト値」設定と「個別プロファイル設定」に分かれている。

 中身は、大きく4つのパートに分かれている。説明の都合上、各パートを以下のように呼ぶことにする。

グローバル設定(先頭の「{」直後の部分)
プロファイル設定(「profiles」以降)
   プロファイル共通デフォルト値(「defaults」以降)
   プロファイル(「list」:以降)
      個別プロファイル設定(「{」「}」でくくられている)
カラースキーム設定(「schemes」以降。初期状態では空)
キーボード設定(「keybindings」以降)


「settings.json」の構造

 Windows Terminalは、設定に「カスケード構造」を採用しており、全ての設定値にデフォルト値がある。そのためデフォルト値は、「settings.json」には記述しなくていいようになっている。例えば、カラースキーム(配色)設定に何も定義しないのであれば、以下のような空のカラースキーム定義だけあればよい(あるいは何もなくてもよい)。

"schemes": [],


空のカラースキーム定義

 キーボード割り当ても同様なのだが、デフォルト値が決まった後で変更されたキー割り当て(クリップボードコピーと貼り付けを一般的な[Ctrl]+[C]キーと[Ctrl]+[V]キーに後から仕様変更した)があり、これが「settings.json」に定義されている。

 なお、JSONスキーマでは、「//」から行末までを注釈として、記述を解釈しないようになっている。コメントの他、設定しないけれど参考として残しておきたい行は、その先頭に「//」を付ければWindows Terminalから無視される。

プロファイル設定を行う

 Windows Terminalから起動するシェルを指定するプロファイル設定を解説する。ここが、設定の中心部分になる。

プロファイルの種類

 Windows Terminalには、ダイナミックプロファイルと呼ばれる機能があり、インストールされているPowerShell CoreやWSLのディストリビューション(のシェル)を自動登録する機能がある。これは、settings.jsonの保存時に自動的に行われる(後述するグローバル設定で禁止することも可能)。

 また、Windows 10に必ず含まれる、cmd.exeとpowershell.exeに関しては、デフォルト(defaults.jsonファイルとして見ることができる)としてプロファイル登録が行われている。これは、削除することはできないものの、プロファイル設定で「hiddenプロパティ」を使うことで、メニューから隠すことは可能だ。

 プロファイル設定は、大きく2つの部分に分かれている。1つは、共通のプロパティ定義となる「プロファイル共通デフォルト値」と、シェルごとの設定となる「個別プロファイル設定」だ。基本的には、自分の好みをプロファイル共通デフォルト値で設定しておき、シェルごとの設定を個別プロファイル設定で行う。

プロファイルで設定できるプロパティの種類

 このプロファイル設定に記述できるプロパティには、下表のようなものがある。「guid」や「name」などの一部のものを除けば、これらのプロパティは、「プロファイル共通デフォルト値」にも「個別プロファイル設定」のどちらにも記述できる。ただし、両方に同じプロパティを記述した場合には、個別プロファイルに記述した方が有効になる。

プロパティ タイプ デフォルト値
acrylicOpacity 数値 0.5 アクリルの透明度(0〜1.0の浮動小数点値)
antialiasingMode 文字列 grayscale テキストのアンチエイリアスモードを指定。「aliased」「cleartype」「grayscale」から選択
background 文字列 (カラースキームで指定の値) 背景色。16進形式の「#rgb」「#rrggbb」のどちらかで指定
backgroundImage 文字列 なし 背景画像(jpg/png/gif)へのパス(指定時にはuseAcrylicをfalseにする必要がある)
backgroundImage
Alignment
文字列 center 背景画像の位置合わせ方法。「center」「left」「top」「right」「bottom」「topLeft」「topRight」「bottomLeft」「bottomRight」から選択
backgroundImage
Opacity
数値 1.0 背景画像の透明度
backgroundImage
StretchMode
文字列 uniformToFill 背景画像の配置。「Fill」「None」「Uniform」「UniformToFit」から選択
closeOnExit 真偽値 graceful 終了、起動の失敗のときににタブを閉じるかどうか。
・「graceful」「true」 (エラーでなければ閉じる)
・「always」 (常に閉じる)
・「never」「false」(閉じない)
colorScheme 文字列 Campbell カラースキーム名の指定
commandline 文字列 cmd.exe 起動するシェルプログラム名
cursorColor 文字列 (カラースキームで指定の値) カーソルの色。16進形式の「#rgb」「#rrggbb」のどちらかで指定
cursorHeight 整数値 25 カーソルの高さを文字高に対するパーセンテージで指定。「cursorShape」が「vintage」の場合のみ有効。25〜100の整数
cursorShape 文字列 bar カーソル形状。「vintage」「bar」「underscore」「filledBox」「emptyBox」
experimental.
retroTerminalEffect
真偽値 false 「true」にすると昔風のターミナル表示にする
fontFace 文字列 Cascadia Mono フォント名
fontSize 整数値 12 フォントサイズ
foreground 文字列 文字列 (カラースキームで指定の値) 前景色。16進形式の「#rgb」「#rrggbb」のどちらかで指定
guid 文字列   プロファイルのGUID
hidden 真偽値 false 「true」のとき、メニューに表示されない
historySize 整数値 9001 履歴保存数
icon 文字列   プロファイルのアイコン(ドロップダウンメニュー用)
name 文字列 プロファイル依存 プロファイルの名前(ドロップダウンメニューの表示名)
padding 文字列 8,8,8,8 テキスト表示領域周囲の余白(テキスト表示領域周囲の余白。「<上下左右の値>」「<上下の値>,<左右の値>」「<上の値>,<右の値>,<下の値>,<左の値>」のいずれかで指定)
scrollbarState 文字列 visible スクロールバーの状態を「visible」「hidden」で指定
selectionBackground 文字列 (カラースキームで指定の値) 「colorScheme」の「selectionBackground」を上書き。16進形式の「#rgb」「#rrggbb」のどちらかで指定
snapOnInput 真偽値 true キーボード入力時に入力位置までスクロールするかどうか
source 文字列   プロファイルを生成したプログラムの名前
startingDirectory 文字列 %USERPROFILE% 起動時のカレントフォルダ(環境変数を指定可能)
suppressApplicationTitle 真偽値 false 「true」にすると、実行プログラム(シェル)側からのウィンドウタイトル変更を無視し、「tabTitle」の設定値を使う
tabTitle 文字列   タブに表示する文字列
useAcrylic 真偽値 false Fluent Designのアクリルによる透明化
プロファイル設定に記述できるプロパティ

 Windows Terminalの設定は、「defaults.json」(編集不可)、settings.jsonと起動オプション(一部の指定のみ可)の3カ所に記述できる。前より後の設定個所の方が優先度が高くなり、同じプロパティは最後に記述したものが有効になる。WebページのCSS(Cascading Style Sheet)と同じ構造だ。

プロファイル共通で設定をお勧めするプロパティ

 上表にあるプロパティのうち、プロファイル共通デフォルト値で設定しておくといいプロパティは、下リストのものだ。

"defaults": {
   //キー入力したとき入力行を表示
   "snapOnInput": true,
   //フォントはMS明朝
   "fontFace": "MS 明朝",
   //フォントサイズは18ポイント
   "fontSize": 18,
   //カーソルは下側半分のみに表示
   "cursorShape": "vintage",
   //カラースキームにはCampbellを指定
   "colorScheme": "Campbell",
   //カーソルの色は白(#FFFFFF)
   "cursorColor":"#FFFFFF",
   //起動ディレクトリは、C:\
   "startingDirectory": "c:\\",
   //スクロールバーは表示しない
   "scrollbarState":"hidden",
   //背景を透明にする
   "useAcrylic": true,
   //透明度は0.5
   "acrylicOpacity": 0.5,
   //vintageカーソルの高さは100%
   "cursorHeight": 100
},


プロファイル共通デフォルト値の例
「プロファイル共通デフォルト値」では、プロファイル共通で利用するプロパティを設定する。なお、ここで設定しても個別プロファイル側で上書き設定が可能なので、必ずしも全てのプロファイルで使われるものでなくてもよい。

 Windows Terminalは、プロファイルごとにフォントを指定できる。しかし、1つのフォントだけしか指定できないため、日本語以外のフォント(Windows Terminalに付属するCascadiaなど)を指定してしまうと、日本語の文字間隔が妙に空いてしまう。これを避けるには、「fontFace」プロパティに「MS ゴシック」や「MS 明朝」(MSは全角、間のスペースは半角)といった日本語の等幅(プロポーショナルでない)フォントを指定する。これにより日本語の文字間隔を詰めることができる。

フォント設定による日本語フォントの表示の違い
フォント設定による日本語フォントの表示の違い
上側画面のように日本語フォント、例えば「MS 明朝」などを指定すると、日本語フォントに合わせて文字間などが設定されるため、比較的キレイに表示される。しかし、下側画面のように欧文フォントを指定すると、フォントフォールバックによりWindows 10が代替として提供する日本語フォントが使われる。この際、欧文フォントを元に文字サイズが決定されるため、間が空いた表示になってしまう(文字サイズはどちらも18ポイント)。

 なお、Windows Terminal自体は、内部的には文字コードをUTF-8で扱っているため、日本語表示は英語フォントを設定しても常に行える。問題は、指定した英語フォントで表示できない文字があったときに起こるフォールバックでどのフォントが選ばれるかが分かりにくく、加えてそのときに文字間などの調整が行われないため、文字間隔が広がってしまうことだ。

 VS Codeなどでは、フォールバックを想定して複数のフォントを表示フォントとして指定できるようになっているが、Windows Terminalではテキスト描画システムの仕様で単一のフォントしか指定できない。将来的には対応予定にはなっているようだが、現時点では日本語フォント、欧文フォントなどのどれか1つのみを指定する。日本語文字列を表示させたときの文字間という「細かい」話なので、このあたりが全く気にならないというのであれば、特に設定する必要はない。

 「fontSize」は、見やすいと感じるサイズは、利用環境で決まってしまい、シェルごとや環境で変更することはないので、ディスプレイなどの利用環境に合わせてデフォルト値で設定しておくといいだろう。

 「cursorShape」は、好みの分かれるところだ。何も指定しないデフォルトでは俗にキャレットなどと呼ばれる縦棒("bar")になっている。標準のconhost.exeと同じにするなら「vintage」にする。

 なお、「vintage」を指定した場合のみ、「cursorHeight」で高さを「25%」〜「100%」の間で指定できる。高さを25%以下にしたい場合は「underscore」(ただし高さの指定はできない)に、100%ならば「filledBox」を指定してもよい。昔よく見かけた反転表示のカーソルはないが、「emptyBox」ならば、下の文字が常に見える。これも、細かく変えるものではないのでプロファイル共通デフォルト値で設定しておく。

定義可能なカーソル形状
定義可能なカーソル形状
カーソル形状(cursorShape)は、「bar」「emptyBox」「filledBox」「underscore」「vintage」の5つの形状を指定できる。

個別プロファイル設定では「name」と「commandline」を必ず設定

 個別のプロファイル設定で設定する必要があるのは、「name」と「commandline」プロパティだ。その他には、後述のグローバル設定で「defaultProfile」に指定するなら「guid」プロパティが必須となる。「guid」はプロファイルを区別するために使われる。Windows Terminalのプロファイル内でプロファイル同士が区別できるように、別々のGUIDをそれぞれ指定すれば問題ない。必要な場合には、PowerShellのコマンドであらたなGUIDを生成することも可能だ。

C:\> powershell -Command "[Guid]::NewGuid()"


guidを生成する(cmd.exeから実行)

C:\> [Guid]::NewGuid()

guidを生成する(PowerShellから実行)

 ただし、settings.json内で重複しないという前提なら、ファイル内の「guid」を書き換えても条件は満たされる。例えば、「コマンド プロンプト」には、デフォルトで「{0caa0dad-35be-5f56-a8ff-afceeeaa6101}」というGUIDが指定されているが、先頭のゼロを1に書き換えてもエラーにはならず、問題なく動作する。これを利用すれば、いちいちGUIDを生成させることなく、先頭の数字のみを「1」「2」「3」……と書き換えていくことで、defaultProfileで指定が可能な個別プロファイル設定を作ることができる。

 具体的なサンプルを下リストに示す。筆者の場合、個別プロファイルでは、シェルの種類ごとに背景色を「background」で設定してある。CMD.EXEなら黒(#000000)、PowerShellなら青(#00005A)、WSLなら茶色(#473a00)といった具合だ。背景色を変えることで、ひと目でシェルの違いが認識できるようになる。

"list": [
   {   // デフォルトのCMD.EXEのプロファイルを変更したもの
      "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
      // nameはメニュー名になる
      "name": "コマンド プロンプト",
      //commandlineで起動するコマンドやオプションを指定
      "commandline": "cmd.exe /V:ON",
      //tabTitleは、タブに表示される文字列
      "tabTitle": "CMD(JP)",
      //backgroundで背景色を指定
      "background": "#000000",
      //hiddenはメニューに表示するかどうかを指定
      "hidden": false 
   },  //listの角括弧の中はカンマで区切る
   {   //デフォルトのcmd.exeのGUIDを書き換えてみた
      "guid":"{1caa0dad-35be-5f56-a8ff-afceeeaa6101}",
      "name": "英語コマンド プロンプト",
      //フォントを変更
      "fontFace": "Cascadia PL",
      //起動するコマンドを指定
      "commandline": "cmd.exe /V:ON /k chcp 437 && CLS && VER && CHCP",
      //組み込まれているCMD.EXE用アイコンを指定
      "icon": "ms-appx:///ProfileIcons/{0caa0dad-35be-5f56-a8ff-afceeeaa6101}.png",
      "background": "#000000",
      "tabTitle": "CMD(US)",
      "hidden": false 
   },


個別プロファイル設定の例(1)
cmd.exeを日本語、英語モードの2つで設定してみた。背景色などはcmd.exeで共通とし、PowerShellなどと変えることで区別しやすくする。英語モードへの切り替えは、/kオプションでchcpコマンドを実行している。

{    //デフォルトの組み込みPowerShellのプロファイル
   "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
   "name": "Windows PowerShell",
   "commandline": "powershell.exe",
   //PowerShell系の背景色を指定
   "background": "#00005a",
   "hidden": false 
},
{    //作成したスクリプトを起動するプロファイル
   "guid": "{71c54bbd-c2c6-5271-96e7-009a87ff44bf}",
   "name": "PowerShell TEST",
   "background": "#00005a",
   //組み込みのPowerShellアイコンを指定
   "icon": "ms-appx:///ProfileIcons/{61c54bbd-c2c6-5271-96e7-009a87ff44bf}.png",
   "tabTitle": "Test",
   //Powershell.exeでプロファイル読み込みなし、コマンド実行
   "commandline": "Powershell.exe -NoProfile -NoExit -command $(c:\\Temp\\PSTest\\test.ps1)" 
},


個別プロファイル設定の例(2)
組み込みのPowerShellと、PowerShellのProfile読み込みを抑制して特定のコマンドを実行するプロファイルの2つを作ってみた。背景色やアイコンを共通化し、cmd.exeなどと区別しやすくする。PowerShellではコマンドラインから実行コマンドを指定する場合(-commnadオプション)、-NoExitを指定しないと、実行後にPowerShellが終了してしまう。

 文字色は、シェル上で実行するアプリによって、いろいろと使われることがあるので、デフォルトの白のままでいいだろう。もちろん、個別プロファイルでカラースキームを指定しまうことも可能だ。カラースキームを指定すると、色に関する指定、文字色、背景色、カーソル色、選択時の背景などをまとめて指定できる。

 「commandline」設定により、起動するシェルとその初期設定が可能になる。同じシェルで設定を変えたものをそれぞれプロファイルに登録することもできる。コンソールアプリケーションなら何でも設定できるため、sshやtelnetなどのプロファイルを作ることも可能だ。

 cmd.exeの場合、/kオプションでバッチファイルやコマンドを指定できる。レジストリで起動スクリプトを指定する方法もあるが、これだと全てのcmd.exeの起動に影響してしまうので、かえって面倒になりやすい。

 PowerShellの場合、特定のコマンドを実行させたい場合には、「-Commnad <コマンドライン>」オプションを使うが、このとき「-NoExit」オプションを併用する。これを指定しないと、コマンドの実行後にPowerShellは終了してしまう。PowerShellのProfileを読み込ませたくない場合には「-NoProfile」を指定する。

 なお、個別プロファイル設定の順番は、メニューの順番になり、起動オプションで指定する「index」の設定値にもなる。先頭から9個のプロファイルは、[Ctrl]+[Shift]+[数字]キーで新規タブとして開くことも可能だ。このため順番は利用頻度や関連性を考慮して決めた方がよい。

Windows Terminalのメニューと、settings.jsonのプロファイル個別設定の関係
Windows Terminalのメニューと、settings.jsonのプロファイル個別設定の関係
Windows Terminalのメニューは、settings.jsonのプロファイル個別設定の順番で表示が行われ、キー割り当てもその順になる。このため、自分でプロファイルを書き換えたら、利用頻度の高い順や関連のある順番に並べ替えておく方が、メニューは分かりやすくなる。

 また、混乱をさけるなら、「defaultProfile」に指定した個別プロファイルは、先頭に持っていきメニューの先頭にしておくのがいいだろう。その上で、個別プロファイル中で「hidden」プロパティを「true」にすることでメニューへの表示を禁止できる。ダイナミックプロファイルで登録されるが、使わないプロファイルがあるならこれで禁止できる。

 プロファイル共通デフォルト値でフォントを指定していても、個別プロファイルで別のフォントを指定することも可能だ。日本語を使わないシェルがあるなら、英語用など別の言語のフォントを指定することで、きれいな欧文表示が利用できる。Windows Terminalに付属してくるCascade Codeフォントには、プログラミングリガチャーなど、プログラミング時に便利なフォントなので、これを指定した個別プロファイルを作ることも可能だ。

背景の透明化やビットマップ画像の指定なども可能

 Windows Terminalは、背景を透明にしたり、ビットマップを背景にしたりすることもできる。遊び的な機能だが、背景などで動作しているシェルを区別するといった使い方も可能だ。

 まず、背景の透明化は、Fluent DesignのAcrylicが使われる。Acrylicは、半透明のBrushで、背景に使うと、デスクトップや下のウィンドウがぼんやりと見えるようになる。これを使うことで、ウィンドウが背景の手前に表示されているように見えるため、Fluent Designでは、奥行きを表現するために使われる。この指定は、プロファイルで行うため、プロファイル共通デフォルト値で設定すれば、全てのプロファイルで背景を透明にするといった指定が可能だ。具体的には、「useAcrylic」プロパティで有無を設定し、「acrylicOpacity」で透明度(正確には不透明度)を指定する。

 背景にビットマップを指定するには、「backgroundImage」でビットマップファイル(JPEG、PNG、GIF)を指定し、「backgroundImageAlignment」で位置合わせ方法を、「backgroundImageOpacity」で透明度を、「backgroundImageStretchMode」で拡大縮小方法を指定する。なお、前述の「useAcrylic」と「backgroundImageOpacity」を組みあわせると、背景とビットマップを共に透過させることもできる。

 「backgroundImageAlignment」は、「top」「bottom」「center」などのキーワードでビットマップ画像とタブ、ペインとの位置合わせ方法を指定する。また、Windows Terminalのウィンドウはサイズが変わった場合でも、ビットマップ画像はタブやペインの大きさに合わせて拡大縮小させることが可能で、これを「backgroundImageStretchMode」で指定する。指定できるのは、下画面で示した4種類だ。

「backgroundImageStretchMode」で指定できる背景画像の拡大縮小モード
「backgroundImageStretchMode」で指定できる背景画像の拡大縮小モード
背景画像の拡大縮小モード(「backgroundImageStretchMode」)プロパティには、4つのタイプがある。

 「backgroundImageAlignment」は、「center」を指定すればいいだろう。なお、背景画像は、PNG形式などにして背景部分を透明にしておくと、画像とWindows Terminalの背景部分が区別できなくなる。このため、背景が透明な場合には、「backgroundImageStretchMode」は「Uniform」「None」のどちらでも構わないだろう。背景が透明ではない、風景画像のようなものは、「Uniform」「UniformToFit」としてゆがまないように表示させた方がいい。

 このあたりをまとめて設定したのが、下リストだ。ちなみにWindows Terminalの背景が透明になるのは、フォーカスを持っているとき(ウィンドウを選択しているとき)のみで、他のウィンドウを選択すると背景は不透明な状態になる。

"defaults": {
         :
      <省略>
         :
   //すべてのタブ/ペインの背景を透明にする
   "useAcrylic": true,
   //透明度は0.5
   "acrylicOpacity": 0.5
},
"list": [ 
   { 
         :
      <省略>
         :
      //背景画像を指定。パス区切りの\は\\と記述する
      "backgroundImage": "C:\\Temp\\00-WindowsTerminal\\cmd.png",
      // 背景は中央合わせ
      "backgroundImageAlignment": "center",
      "backgroundImageOpacity": 0.5,
      // 背景画像は、縦横比を維持してタブ/ペイン全体を覆うように表示
      "backgroundImageStretchMode": "uniformToFill"
},


背景の設定例
背景を半透明にする設定を「プロファイル共通デフォルト値」として設定し、個別プロファイルで背景画像を設定している。

グローバル設定で指定可能なプロパティ

 グローバル設定は、settings.json全体をくくる「{」から「}」の内側で、「profiles」「schemes」「keybindings」の外にある部分だ。JSONの文法上は、プロファイルやカラースキーム、キー割り当ての外側であれば、どこにでも記述できる。ただ、分かりやすくするなら、settings.jsonの先頭の「{」の直後にまとめて記述しておくのがいいだろう。なお、グローバル設定のほとんどのプロパティは、defaults.jsonで指定されているため設定する必要はない。

 グローバル設定で指定可能なプロパティを下表に示す。

プロパティ タイプ デフォルト値 defaults.
json内指定
概要
alwaysShowTabs 真偽値 true タブを常に表示するかどうか
confermCloseAllTabs 真偽値 true 複数タブの終了時に確認を行うかどうか
copyFormatting 真偽値 false fontや表示色などを含んだ書式付きテキストをクリップボードにコピーする
copyOnSelect 真偽値 false 「true」なら選択した文字列をすぐにクリップボードにコピーする
defaultProfile GUID文字列 PowerShellのGUID デフォルトプロファイルのGUID
disabledProfileSources 文字列の配列 [] × 以下の3つの文字列の組み合わせ:"Windows.Terminal.Wsl", "Windows.Terminal.Azure", "Windows.Terminal.PowershellCore"
experimental.rendering.
forceFullRepaint
真偽値 false × 「true」のときWindows Terminalは表示フレームごとに画面全体を再描画する。「false」では表示フレーム間に行われた画面の更新部分だけをレンダリングする
experimental.rendering.
software
真偽値 false × 「true」のときソフトウェアレンダラー(WARP)を利用する。「false」ならGPUを利用
initialCols 整数値 120 ターミナルの文字数。「LaunchMode」が「maximized」のときには無視される
initialPosition 文字列 "," × ターミナルウィンドウの左上の座標。プライマリーディスプレイの左上の座標からの相対座標。以下の形式の座標指定が可能:
・システムデフォルトを使用: ","
・XとYの両座標を指定: "<X>,<Y>"
・X座標のみ指定: "<X>,"
・Y座標のみ指定: ",<Y>"
initialRows 整数値 30 ターミナルの行数。「LaunchMode」が「maximized」のときには無視される
launchMode 文字列 default 起動時のウィンドウ状態を「default」または「maximized」で指定
rowsToScroll 整数値またはsystem system マウスホィールのスクロール量。「system」はシステム設定に従う
showTabsInTitlebar 真偽値 true タイトルバーにタブを表示するかどうか(要再起動)
showTerminalTitleInTitlebar 真偽値 true タイトルを表示するかどうか
snapToGridOnResize 真偽値 false 「true」ならウィンドウサイズは表示領域が文字境界にスナップするよう変化する。「false」なら任意のサイズに変更できる
tabWidthMode 文字列 equal タブの幅設定。「equal」「titleLength」のどちらかを指定
theme 文字列 system 「system」「dark」「light」のどれか
wordDelimiters 文字列 「./\()"'-
:,.;<>~
!@#$%^&*
|+=[]{}~?」、UnicodeのU+2502、タブ文字
ワード区切り文字(端末側で単語を認識してワードラップなどを行う場合に使われる。エスケープシーケンス機能の一部)
グローバル設定で指定可能なプロファイル

 デフォルトプロパティにするには、個別プロファイル側にguid指定が必須となる。デフォルトプロファイルは、Windows Terminalをコマンドラインなしで起動した場合や、プロファイル指定がないコマンドラインを指定した場合に使われるプロファイルだ。

 この他、キー割り当てで新規にタブやペインを開くことができる。デフォルトでは、組み込みのPowerShellが起動するようになっているが、昔からのユーザーは、CMD.EXEにしておいた方が安心だろう。

 また、ここにある「"$schema": "https://aka.ms/terminal-profiles-schema",」は、JSONスキーマの定義なので、削除しないようにする。これがないと、JSONエディタは、setting.jsonに対してJSONスキーマを適用しなくなる。

 また、Windows Terminalのダイナミックプロファイルがどうしてもイヤな場合には、disabledProfileSourcesプロパティで、WSL、Azure(Cloud Shell)、PowerShell Coreを個別に禁止できる。

 起動時の横方向の文字数(「"initialCols"」)や行数(「"initialRows"」)などもグローバル設定で指定が可能だ。例えば、ペインで左右を区切って使うことが多いなら初期文字幅を「164(スクロールバーを表示しないときには「162」)」としておくと、左右分割したときにそれぞれに80桁を割り当てることができる。ペインで分割したとき、区切りのラインと、文字表示領域周囲の「Padding」で2文字分、ペイン区切り左側のスクロールバーの表示で2文字分を使うため、あらかじめその分を追加しておく必要がある。

 このあたりを指定したグローバル設定部分を下リストに示す。

{      //settings.json冒頭の「{」
   //この行は触らない
   "$schema": "https://aka.ms/terminal-profiles-schema",
   //CMD.EXEをデフォルトプロファイルに指定
   "defaultProfile": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
   //マウスでテキストを選択したら即クリップボードにコピー
   "copyOnSelect": true,
   //HTML形式の書式付きテキストもクリップボードに同時にコピー
   "copyFormatting": true,
   //起動時の横幅は162文字
   "initialCols": 162,
   //Azure Cloud Shellは自動登録しない
   "disabledProfileSources": ["Windows.Terminal.Azure"],
      :
   (以下省略)


起動時の文字数設定のグローバル設定例
グローバル設定は、ほとんどデフォルト値のままでよい。ここでは、Azure Cloud Shellに対してダイナミックプロファイルを禁止し、初期のウィンドウ幅を162文字とした。


 Windows Terminalは、スタンドアロンのターミナルエミュレーターではないため、SSHやシリアルコンソールとして使うには、シェルから該当の機能を持ったプログラムを起動する必要がある。

 そもそも、Windows 10では、コンソール機能とシェルやプロトコル処理といった部分の分担がUNIXやLinuxほど明確に区別されていなかった。そのため、SSHならば、ターミナルエミュレーションやプロトコルを処理するWindowsプログラムとして実現しなければならなかった。

 コンソールアプリケーションになっていたTelnetやSSHクライアントもあったものの、conhost.exeがエスケープシーケンスを実装していなかったため、LinuxやUNIXのようにフルのテキストアプリケーションを利用できなかった。シリアルコンソールも同様で、シリアルポートの入出力を扱えるWindowsプログラムを開発し、エスケープシーケンスを実装する必要があった。

 しかし、Windows 10では、「仮想コンソール」の概念が導入され、シェルやプロトコル処理プログラム、ターミナルエミュレーションといった処理を複数のプログラムで分担して扱うことが可能になった。このとき、Windows Terminalは、シェルの手前で動作する重要な「部品」となるソフトウェアだ。単純なフロントエンドなので、従来使われてきたターミナルソフトウェアの完全な代用にはならないものの、逆にシェル上で動作する各種プロトコルに対応したソフトウェアは開発がしやすくなったといえる。

 Windows Terminalには、まだ少し荒削りな部分はあるが、今後の開発に期待したい。

Copyright© Digital Advantage Corp. All Rights Reserved.

ページトップに戻る