【Windows Terminal完全マスター】プロファイルをカスタマイズして使いやすくしよう:Windows 10 The Latest
Windows Terminalの正式版がリリースされたが、設定はプロファイルを編集する必要があるなど、少々ハードルの高いものとなっている。ただ、ルールが分かればそれほど難しいものでもない。そこで、基本的なプロファイルの設定方法を紹介しよう。
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」がそれぞれ提供されていた。
- Windows Terminal正式版(Microsoft Store)
- Windows Terminalプレビュー版(Microsoft Store)
正式版とプレビュー版は併存が可能である。プレビュー版は、アイコンに「PRE」の文字が付く。
GitHubには、msixパッケージがあり、ここからダウンロードしてインストールすることも可能だ。執筆時点では、Microsoft Storeと同じバージョンのパッケージをダウンロードできた。
- Windows Terminal v1.0.1401.0(microsoft/terminal)
※「Assets」欄にある「Microsoft.WindowsTerminal_1.0.1401.0_8wekyb3d8bbwe.msixbundle」というリンクをクリック - Windows Terminal Preview v1.1.1671.0(microsoft/terminal)
なお、公式のドキュメントは、「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
なお、「%USERPROFILE%\AppData\Local」は、「%LOCALAPPDATA%」と表記することも可能だ。コマンドラインからは、この表記方法を使い、cdコマンドなどでフォルダを開くことができる。エクスプローラーから開く場合には、シェルショートカットを使い、アドレスバーに以下のshellコマンドを入力する。
shell:Local AppData\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState
設定を間違ったなどで、完全にデフォルト値に戻すには、前記パスにある「settings.json」を削除すればよい。Windows Terminalを起動する前に「settings.json」を削除し、起動してから[v]−[設定]を選択すれば、新規に「settings.json」が作られる。
settings.jsonの構造
「settings.json」は、JSONファイルであるため、JSONの仕様に従った構造になっている。JSONは、テキストのみで、「データ」オブジェクト(プログラミングに堪能な人向けにいうと構造体のようなもの)を表現するものだ。大まかには、下図のような構造になっている。
settings.jsonの構造
settings.jsonは、「グローバル設定」「プロファイル設定」「カラースキーム(配色)設定」「キー割り当て設定」の大きく4つの部分に分かれている。また「プロファイル設定」は、「プロファイル共通デフォルト値」設定と「個別プロファイル設定」に分かれている。
中身は、大きく4つのパートに分かれている。説明の都合上、各パートを以下のように呼ぶことにする。
グローバル設定(先頭の「{」直後の部分)
プロファイル設定(「profiles」以降)
プロファイル共通デフォルト値(「defaults」以降)
プロファイル(「list」:以降)
個別プロファイル設定(「{」「}」でくくられている)
カラースキーム設定(「schemes」以降。初期状態では空)
キーボード設定(「keybindings」以降)
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」ならば、下の文字が常に見える。これも、細かく変えるものではないのでプロファイル共通デフォルト値で設定しておく。
個別プロファイル設定では「name」と「commandline」を必ず設定
個別のプロファイル設定で設定する必要があるのは、「name」と「commandline」プロパティだ。その他には、後述のグローバル設定で「defaultProfile」に指定するなら「guid」プロパティが必須となる。「guid」はプロファイルを区別するために使われる。Windows Terminalのプロファイル内でプロファイル同士が区別できるように、別々のGUIDをそれぞれ指定すれば問題ない。必要な場合には、PowerShellのコマンドであらたなGUIDを生成することも可能だ。
C:\> powershell -Command "[Guid]::NewGuid()"
C:\> [Guid]::NewGuid()
ただし、settings.json内で重複しないという前提なら、ファイル内の「guid」を書き換えても条件は満たされる。例えば、「コマンド プロンプト」には、デフォルトで「{0caa0dad-35be-5f56-a8ff-afceeeaa6101}」というGUIDが指定されているが、先頭のゼロを1に書き換えてもエラーにはならず、問題なく動作する。これを利用すれば、いちいちGUIDを生成させることなく、先頭の数字のみを「1」「2」「3」……と書き換えていくことで、defaultProfileで指定が可能な個別プロファイル設定を作ることができる。
Copyright© Digital Advantage Corp. All Rights Reserved.