• Windows Terminal ベスト設定 第17回「フォント 設定編」

Windows Terminal設定のおさらい

Windows Terminalは、一般的な設定は、タブバー右端のメインメニューにある「設定」で行うことができる。これを本連載では、「GUI設定」と呼んでいる。というのは、もともとWindows Terminalは、settings.jsonファイルを使って設定を行っていたからだ。現在でも、一部の設定項目は、settings.jsonファイルからでしか行うことができない。

JSON(JavaScript Object Notation)は、テキストベースのオブジェクト表現形式だ。本連載では、JSONの「オブジェクト」に含まれる「メンバー」である「キーと値のペア」を「プロパティ」、キーを「プロパティ名」、値を「プロパティ値」と表現する。

JSONの編集に対応し、特にjson-schemaに対応したエディタをJSONエディタと呼ぶことがある。Windows 11では、標準では、JSONファイル(拡張子は.json)に関連付けられているのはメモ帳だが、Visual Studio CodeなどのJSONエディタをインストールすることで、編集時に簡易な文法チェックなどが行える。

前回と同じく、フォント関連用語を(表01)に示す。

  • ■表01

Windows Terminalのフォント設定

Windows Terminalでは、フォントは、プロファイル内で定義する。つまり、表示フォントは、プロファイルごとに切り替えて使うことが可能である。また、「既定値」で設定を行うことで、すべてのプロファイルのデフォルト値とすることができる。

以前解説したように、Windows Terminalの設定は、設定タブを使ったGUI設定と、JSONで記述されたsettings.jsonファイルによる設定がある。GUI設定は、settings.jsonに反映されて、保存されることで、Windows Terminalの設定として有効になる。基本的に、どちらで設定しても有効だが、GUI設定では、一部の設定を行うことができない。というのは、GUIでは、すべての設定項目に対して、プログラムが対応している必要があるからだ。ここでは、settings.jsonの指定をベースに解説を行い、必要に応じてGUI設定にも触れる。

settings.jsonでは、プロファイルの既定値は、「profiles.defaults.font」プロパティにある(リスト01)。このfontプロパティには、(表02)のようなプロパティが用意されている。なお、フォント関連としてはfontプロパティと同じ位置(profiles.defaultsの直下)に「intenseTextStyle」プロパティがある。VTエスケープシーケンスのSelect Graphic Rendition(SGR)で、太文字を指定したとき、どのように表示するのかを選択できる。デフォルトは高輝度表示(bright)だが、Cascadiaフォントでは、boldやallを指定することもできる。

■リスト01


{                                       //settings.jsonの定義開始
            :
         (省略)
            :
    "profiles": {                           //プロファイル定義の開始
        "defaults":  {                      //デフォルトプロファイル
            "font": {                           //フォント定義開始
                "face": "Cascadia Code NF, メイリオ",   //フォント名
                "size": 19,                     //フォントサイズ
                "cellHeight": "1.2",                //セル(文字表示範囲)の高さ
                "cellWidth": "0.6",             //セル(文字表示範囲)の幅
                "weight": "light",                  //フォントウェイト
                "builtinGlyphs": false,             //組み込みグリフの表示可否
                "colorGlyphs": true,                //カラーグリフ(絵文字)の表示可否
                "axes": {                       //可変フォント軸の定義開始
                    "wght": 400                 //ウエイト軸(wght)の定義
                },                              //axesの定義終了
                "features": {                   //フォント特性の定義開始
                    "calt": 1,                      //Contextual Alternate(calt)
                    "ss01": 0,                  //Style Set 01
                    "ss19": 1,                  //Style Set 19
                    "ss20": 1,                  //Style Set 20
                    "zero": 0                       //斜線付きゼロ(ss19)と同じ
                }                               //featuresの定義終了
            },                              //fontの定義終了
            :
         (省略)
            :
}                                       //settings.jsonの定義終了
  • ■表02

フォント フェイス/face、フォントサイズ/size

ここからは、fontプロパティの中を個別に解説していくことにしよう。まずは、“face”プロパティだが、これは、フォント名を指定する。このプロパティの省略値は、Windows Terminalに同梱されている「Cascadia Mono」フォントである。

現在のプレビュー版(Ver.1.21)では、フォント名は、カンマで区切って複数を指定できる。例えば、以下のような指定が可能だ。


"face": "Cascadia Code NF, MS Gothic",

このとき、先頭にあるフォントが優先フォントとして使われ、2つ目以降は、フォントフォールバック時の候補フォントになる。Cascadiaフォントには日本語フォントが含まれていないため、2つ目に日本語フォントを指定すると、これが優先して使われる。

フォントフォールバックとは、フォントに指定されたユニコードポイントのグリフが含まれていない場合に、代替のフォントを使って表示を行うもの。分かりやすい例が絵文字の表示だ。大半のフォントには、絵文字が含まれていない。もし、こうしたフォントが表示用に指定されていたとき、絵文字を表示しようとすると対応するグリフがない。このとき、Windowsは、フォントフォールバックという機能を使い代替となるフォントを探す。Windows 10/11では、このとき代替フォントとして「segoe emoji」フォントが選択される。代替フォントの選択は、該当のグリフ(ユニコードコードポイント)を持っているかどうか、優先フォントの属性などから決定される。

GUI設定では、フォント名の一部を入力すると補完可能なフォント名を探してくれる。ただし、Windows Terminalでは、モノスペースフォント(等幅フォント)を優先して探す。GUI設定にある「すべてのフォントの表示」チェックボックスをオンにすると、プロポーショナルフォントも対象になる。このとき、日本語のフォント名は、英語のフォント名としてsettings.jsonファイルに記録される。ただし、settings.jsonのfaceプロパティには、日本語の名前を入れても問題ない。例えば、以下の2つは同じ設定となる。


"face": "Cascadia Code NF, メイリオ"
"face": "Cascadia Code NF, Meiryo"

また、インストールされているフォントの一覧(日本語名と英語名)は、以下のPowerShell(Ver.7.4)コマンドで得られる。


[System.Drawing.FontFamily]::Families | %{ [pscustomobject]@{ 日本語名=$_.Name; 英語名=$_.GetName(0x0409)} }

ただし、Windows PowerShellでは「[reflection.assembly]::loadwithpartialname("system.drawing")」を事前に実行しておく必要がある。

“size”プロパティは、フォントサイズをポイント単位の整数で指定する。ポイントは、フォントの大きさを表す単位で、1ポイントは1/72インチに相当するが、Windowsでは、画面サイズや表示倍率設定の関係で実寸表示になるとは限らない。見本になるのは、「設定 ⇒ 個人用設定 ⇒ フォント」でフォントを選択し、プロパティページを開いたところにある「フォントサイズの変更」だ(写真01)。

  • 写真01: 変数フォントで、軸と値の関係を見るには、設定 ⇒ 個人用設定 ⇒ フォント、で対象のフォントを選択して(名前で検索が可能)する。さらにプロパティ ⇒ 変数フォントのプロパティを開いて、バリエーション軸で対象の軸を選択して、スライダーを動かして値を変更することで確認できる

行のたかさ/cellHeight、cellWidth

cellHight、cellWidthは、Windows Terminalが1文字の表示を行うエリア(cell)の高さと幅を指定するもの。一般的なワープロアプリなどでいう「行間」、「文字間」設定である。

cellのデフォルト値は、フォントとサイズによって決まるが、それを越えてサイズ変更できる。ただし、変更するのは、文字を表示する領域のサイズなので、sizeプロパティで決まる文字のサイズは変わらない。このため、行間、文字間設定となるわけだ。

cellHeightの省略値は1.2で、これが標準のcellの高さである。これ以下にすることで行間が詰まるが文字によっては、上下の行と重なってしまうことがある。

cellWidthは、同じくセルの幅を指定するもの。省略値は0.6で、0.5より小さくすると、左右の文字が重なってしまう。なお、このプロパティは、GUI設定からは行うことができない。

微妙な調整が可能だが、日本語に合わせて調整すると欧文フォントが詰まりすぎてしまう。基本的には触らない方がいいようだ。

フォントの太さ/Weight、フォントの軸/axes

Weightプロパティでは、数値指定も可能だが、定義された文字列で指定することもできる。数値と文字列の関係は、表03のようになっている。ただし、フォントが可変フォントでなく、レギュラーとボールドしかなければ、どちらかしか表示されない。

  • ■表03

ウェイト値を大きくすると、ボールド表示との差がなくなり、区別ができなくなる。基本的には、"Bold"あるいは、700よりも小さな値を設定すべきで、ボールドとの差を考えると"normal"または500以下を指定すべきである。

axesオブジェクトでは、Axisタグ名をプロパティ名として数値を指定する。数値の指定範囲は、軸やフォントファイルの定義により異なる。Cascadiaフォントには、ウェイト(太さ)軸(wght)があり、100~700の整数値を指定する。ウェイトを表す軸のタグ「wght」は、OpenTypeで定義されているため共通だが、有効な整数値(最小値と最大値)は、フォントファイルにより異なる。ウエイト軸での指定は、Weightプロパティと同じだが、Windows Terminalでは、wght軸での指定が優先される。

Cascadiaフォントには、このほかイタリック軸(ital)があるが、連続的には変化せず、数値により立体かイタリック体のどちらかしか表示されない。なお、OpenTypeであらかじめ定義されている軸のタグには、(表04)のようなものがある。例えば、Segoe UI Variableフォントには、光学サイズ軸(タグはopsz)がある。

  • ■表04

フォント機能/features

この機能では、OpenTypeのfeature(特性)を指定できる。ただし、Windows Terminalでは、featuresプロパティで指定した特性は、常に有効になるため、フォントの表示スタイル、例えば、斜線付きのゼロ、やコンテキスト代替表示などをオンオフさせたい場合に使う。一般に個別の文字に対して指定する特性を指定しても見えづらい表示になるだけだ。

ターミナル付属のCascadeフォントで、featuresオブジェクト内で利用できる固有の特性には、表05のようなものがある。これ以外の一般的な特性タグも指定は可能だが、上付き文字のように、ドキュメントの一部で利用するタイプのタグを指定しても表示がおかしくなるだけで意味がない。

  • ■表05

なお、Microsoftのサイトに、OpenTypeの登録済み特性タグの一覧がある。どの特性が利用可能なのかはフォントにより異なる。なお、featureオブジェクトは、未対応のタグやプロパティ値の間違いをエラーにせず、単に無視するだけである。

Cascadia Codeフォントを使う場合、calt特性で、プログラマ向け合字のオンオフが行える。最初から合字のないCascadia Monoを指定する方法もあるが、ProfilesのDefaultsでは、Cascadia Codeを指定しておく。これで個々のプロファイルでfeaturesにより、プログラマ向け合字をオンオフすることもできる。フォントフェイスの指定をDefaultsプロファイル1カ所としておくことで、複数のフォントフェイス設定が混在することによる混乱を避けることができる。

組み込みグリフ/builtinGlyphs

この「組み込みグリフ」またはbuiltinGlyphsプロパティは、プレビュー版v1.21以降に存在する機能だ。これをオン/trueにしたとき、

  • Powerlineボックス要素(U+E0B0~U+E0BF)
  • ボックス描画文字(U+2500~U+259F)

は、Windows Terminalに内蔵されているカスタムグリフを使って、cell全体に描画を行う。これにより、上記文字は、上下左右のcellの間に隙間を作らずに表示できる(写真02)。

  • 写真02: cellWidth(1を設定。既定値は0.6)とcellHight(同2。既定値は1.2)で通常よりも文字間、行間を空けて表示させた。このとき、builtinGlyphsがfalseだと、隙間が空いて表示される(写真上)。builtinGlyphsをtrueにすると、特定フォント(本文参照)はセル範囲全体に広がるカスタム描画が行われる(写真下)

「Powerlineボックス要素」は、Powerlineシンボルのうち、文字を囲うためのもので反転文字などと組み合わせて使う。反転文字は、背景色を指定した文字であるため、cell全体に色が付く。

「ボックス描画文字」は、いわゆる罫線キャラクタや塗り潰し文字で、こちらも周囲のcellの間に隙間がないことが望ましい。

フルカラーの絵文字/colorGlyphs

この設定は、絵文字をカラーで表示するか、単色で表示するのかを指定する。GUI設定では「フルカラーの絵文字」という名称でオンにすることで、絵文字は色付きで表示される。settings.jsonでは、colorGlyphsプロパティでtrueを指定する。

Windows Terminalには、専用のOpenTypeフォントCascadiaフォントが同時開発されている。また、文字の表示には、独自に作成されたAtlasレンダリングエンジンが組み込まれている。このため、可変フォントや特性など、OpenTypeの細かい制御が可能だ。

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