• Windows Terminal ベスト設定 第15回「テーマを使う」

Windows Terminal(以下ターミナルと表記)には、「テーマ」機能がある。この機能は、プレビュー版Windows Terminal Ver.1.16で最初に対応され、その後のVer.1.17、1.18、1.19で改良が行われている。原稿執筆時点では、プレビュー版がVer.1.20、安定版がVer.1.19であるため、テーマ機能に関しては、両者に違いはない。評価は、安定版Ver.1.19.10573.0で行った。なお、解説でsettings.jsonファイルを扱うが、JSONに関する本記事で使う用語を(表01)に示す。

  • ■表01

ターミナルの設定とJSONに関しては、過去に「Windows Terminal ベスト設定 第1回『キーボードカスタマイズ 導入編』」で扱ったので、それを参考にしていただきたい。

なお、ターミナルのテーマ機能が影響するのはウィンドウのタイトルバーや枠線、タブバーなどで、テキストを表示する領域には影響がない。この部分を変更するには、設定の配色やプロファイルなどで背景色や文字色を指定する。

テーマとは?

テーマとは、Windowsが提供するデスクトップ背景色やウィンドウの色、サウンド、カーソルなどの設定である。アプリケーションは、現在のテーマ設定を取得でき、これを使うことで、デスクトップにテーマに応じた表示が可能になる。テーマで設定する対象は「背景」、「色」、「サウンド」、「マウスカーソル」の4つ(表02)で、これらの設定をセットにしてまとめて設定できる。これは、設定アプリの「個人用設定 ⇒ テーマ」で設定する。

  • ■表02

Windowsの個人用設定の「色」では、アプリケーションのウィンドウの配色(アプリモード)と、スタートメニュー、タスクバーの配色(Windowsモード)に関して「dark」と「light」の2つの設定が選択できる。アプリモードでdarkを選択すると、タイトルバーやクライアント領域の背景が暗い色になり、lightを選択するとこれらが明るい色になる。Windowsのテーマでは、「色」で指定するアプリモードとしてdarkまたはlightが指定してある。

Windows Terminalのテーマ機能もWindows 10/11のテーマと連動する。一般にアプリケーションは、APIを介して、現在のWindowsのテーマによる設定を取得し、これを参考にしてウィンドウ内の色指定などを行う。このとき、テーマの「色」指定にあるアプリモードがdarkなのかlightなのかを判断することで、自身の表示を決定する。

Windows Terminalのテーマ機能でも、現在のWindowsテーマ設定をWindowsテーマのアプリモードにより行うことができる(図01)。また、ターミナルのテーマ機能は、Windowsテーマの「色」で指定されたアクセントカラーを使って、色指定を行うことができる。

  • 図01: Windowsのテーマ機能は、Windows 11の設定にある「個人用設定」の「色」、「背景」を含んでいる。この部分は、相互の関係がある。また、Windows Terminalのテーマ機能もこの部分から設定情報を得ている

Windows Terminal自体のテーマ機能は、タブバーにあるメインメニューから「設定 ⇒ 外観 ⇒ アプリケーションのテーマ」を選択し、「テーマ」を開く。標準状態では、Windows 11標準の「ダーク(dark)」、「ライト(light)」、「Windowsテーマを使用」の3種および、以前のWindowsで使われていたレガシ配色パターンの合計6つが選択できる。初期値は、「Windowsテーマを使用」で、Windows側のテーマ設定にあるアプリケーション設定に対応して、darkまたはlightの配色が使われる。

Windows TerminalのProfileでは、タブの背景色などの指定が行える。こうした設定の中で、テーマ機能は一番優先度が低く、Profileなど他の設定が優先される。しかし、テーマ機能では、Profileや他の設定で指定ができない、ウィンドウ枠の色指定などが可能になっている。

GUI設定では、定義されたテーマとWindowsのテーマしか選択できない。テーマの定義や細かく設定を行う場合、settings.jsonファイルを編集する必要がある。settings.jsonでは、定義したテーマの1つを指定するだけでなく、Windowsテーマのdarkとlightの切り替えで、自動的にテーマを切り替える指定も行える。

Windows Terminalのテーマ機能では、ウィンドウ、タブバー、タブの3つの領域に対して背景色などを設定することが可能だ。

テーマ機能を設定する

settings.jsonを編集することで、さらに細かくテーマ機能の設定ができる。テーマの選択は、settings.jsonのトップレベルオブジェクトにある「theme」プロパティで行う。ここには、後述するテーマ定義で指定したテーマ名(nameプロパティ)か、Windowsテーマ機能を示す「dark」、「light」、「system」、「legacydark」、「legacylight」、「legacysystem」のどれかを指定できる。

また、ここには、Windowsのテーマで、darkまたはlightが指定された場合に適用するオブジェクトを指定することもできる。


"theme":{"dark":<ダークテーマ名>,"light":<ライトテーマ名>}

テーマの定義は、「themes」プロパティで行い、値は配列で要素としてオブジェクトを入れる(図02)。ここではこのオブジェクトを便宜的に「テーマ定義オブジェクト」と呼ぶ。このオブジェクトは、「name」、「window」、「tab」、「tabRow」の4つのプロパティを持つ。これらのオブジェクトとプロパティを(表03)に示す。

  • 図02: ターミナルのテーマ機能は、settings.jsonファイル中のthemeとthemesプロパティで設定を行う。themeプロパティは、どのテーマを選択するのかを指定し、themesは、ユーザー定義のテーマ設定を行う

  • ■表03

「name」プロパティは、定義するプロパティの名前を指定する。themeプロパティでは、この名前を指定する。なお、このnameプロパティだけが、テーマ定義オブジェクトで必須のプロパティである。

「window」、「tab」、「tabrow」は、テーマ定義オブジェクトのプロパティであり、値としてさらにオブジェクトを持つ。

「window」プロパティでは、オブジェクトを使って、ウィンドウのアプリモード(Windowsテーマの設定)、アクティブ時の境界線(frame)、非アクティブ時の境界線(unfocusedFrame)、マイカ効果のオンオフ(useMica)を指定する。なお、実験的機能として、時間とともに色が変わる境界線の指定「experimental.rainbowFrame」プロパティを設定できる。

frame、unfocusedFrameでは、境界線の色を指定するが、この色指定には、Hexカラーコードと色として解釈されるキーワードを文字列として指定する(表04)。Hexカラーコードは、先頭に“#”を置いた16進数3桁、6桁のRGB値または8桁のRGBA値(Aはアルファ/不透明度値)で指定できる。またキーワードとして“accent”および“terminalBackground”も指定可能だ。これは、後述のtab、tabRowのBackgroundの色指定でも利用できる。

  • ■表04

tabプロパティは、Windows Terminal上部のタブバーにあるタブの表示を指定するもの。ここでは、アクティブ時、非アクティブ時の背景色およびタブのクローズボタンの表示方法を指定できる。なお、タブの背景色は、アクションのsetTabColorやopenTabColorPickerで指定ができる。これらはテーマの設定よりも優先度が高く、アクションであるため、実行時にユーザーが直接指定することも可能である。テーマでの指定は、タブ背景色のデフォルト値を指定すると考えるといいだろう。

クローズボタンの設定は、4つのキーワードのどれか1つを指定する(表05)。省略値は「always」である。この設定は、いまのところテーマ機能でしか設定できない。

  • ■表05

tabRowは、タブバーの背景色を指定するもの。ターミナルのウィンドウがアクティブ、非アクティブの場合を個別に指定することで、ウィンドウがアクティブかどうかを判断しやすくなる。このタブバーの背景色もテーマ機能からしか指定することができない。

テーマ機能を使う

ターミナルのテーマ機能を設定するには、GUI設定ページまたは、settings.jsonファイルの編集を利用する。前者では、Windowsのシステム定義またはユーザー定義のテーマを選択することしかできない。ユーザー定義のテーマを作る場合、settings.jsonファイルを編集する必要がある。

GUI設定ページの左下の「JSONファイルを開く」あるいは、「Ctrl+Shift+,(ピリオド)」キーを使って、settings.jsonファイルを開く。このとき、拡張子.jsonに関連付けられているエディタ(標準ではメモ帳)が開く。VS CodeなどのJSONスキーマに対応しているエディタを使うと、プロパティの入力時に補完機能が使えるようになる。

標準状態だと、settings.jsonファイルの最後の方に、以下のような部分がある(なくても問題ない)。


"theme": "system",
"themes": [],

この部分が存在するならこれを(リスト01)に置き換える。なければ、適当な場所に上記のリストを挿入する。JSONなので、挿入位置と末尾のカンマの有無に注意する。

■リスト01


"theme": {"dark":"Theme1", "light":"Theme1"},
"themes": [
    {   "name": "Theme1",
        "tab": {
            "background": "#FF0000FF",
            "iconStyle": "default",
            "showCloseButton": "always",
            "unfocusedBackground": "#5E5EE6FF" },
        "tabRow": {
            "background": "accent",
            "unfocusedBackground": "terminalBackground" },
        "window": {
            "applicationTheme": "dark",
            "experimental.rainbowFrame": true,
            "useMica": true } },
    {   "name": "Theme2",
        "tab": {
            "background": "#0000FFFF",
            "iconStyle": "default",
            "showCloseButton": "always",
            "unfocusedBackground": "#007F00FF" },
        "tabRow":  {
            "background": "#00FF00FF",
            "unfocusedBackground": "#00007FFF" },
        "window": {
            "applicationTheme": "light",
            "frame": "#FFFF00FF",
            "unfocusedFrame": "#00FFFFFF",
            "useMica": true } }
]

リストでは、themeに自動切り替えオブジェクトを定義してある。Windowsテーマのdark、lightに応じて自動的に定義した2つのテーマが切り替わる。

テーマ定義では、windowのapplicationThemeでdark、light、systemが選択できる。これにより、ターミナルウィンドウの基本的な色指定が決まる。

tabRowは、タイトルバーを省略したときには、ウィンドウの最上部に表示されるため、backgroundプロパティでアクセントカラーを使うことで、タイトルバーと同様の表示が可能になる。

テーマ機能を使うことで、Windowsの他のアプリケーションと似た色調の外観にすることができる。目立たせる、目立たせないは個人の自由だが、アクティブ状態と非アクティブ状態は一見して分かるようにしておくと誤入力を防げる。面倒な場合には、「Windowsのテーマを使用」にしておけば、勝手に配色などを決めてくれる。

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