Windows Terminalには、Cascadia Codeと呼ばれるOpenTypeフォントが付属する。このフォントは、Windows Terminalと同時に開発された、いわば「専用」フォントだ。オープンソース・プロジェクトのプロジェクト名としてはCascadia-Codeとなっている。しかし、この名称は、このフォントの1つのバリエーションであるプログラマ向け合字を持つフォント名でもあるため、ここでは、プロジェクトが提供するフォント全体を「Cascadiaフォント」と表記する。今回は、このCascadiaフォントを使って、Windows Terminalのフォント機能について解説する。ただし、フォント設定などには、OpenTypeの基本的な知識が必要になる。ここでは、まず、OpenTypeやその実装例としてのCascadiaフォントに関して解説を行い、次回、具体的な設定を解説することにする。

なお、検証には、Windows Terminal Ver.1.21.1772.0と、Cascadiaフォント2404.23を利用した。また、フォント関連では、独自の用語を使うことが多い。(表01)に簡単に用語をまとめておく。

  • ■表01

OpenTypeとは?

フォント設定の意味を理解するために、Windows 11の標準フォント形式であるOpenTypeについて解説しておこう。ただし、ここでは、Windows Terminalのフォント設定で必要となる最低限の解説に止める。全体的な解説に関しては、MicrosoftのTypographyのページを参照していただきたい。

OpenTypeは、TrueTypeの後継となるアウトラインフォント形式である。最大の違いは、TrueType形式のアウトラインデータに加え、PostScript形式のアウトラインデータも扱えるようにしたもの。ユニコード対応であり、1つのフォントに65536個までのグリフを収容できる。また、フォントコレクション・ファイル形式を使うことで、複数のフォントを1つのファイルにまとめることも可能。

現在のOpenTypeの最新仕様は、今年(2024年)5月に更新されたOpenType 1.9.1である。

OpenTypeのアウトラインデータは、グリフの描画をベジェ曲線でつなげて行う。フォントファイル内では、グリフは、グリフ番号で管理され、ファイル内部のテーブルにより、ユニコードコードポイントとの対応を付ける。このような構造になっているのは、同じコードポイントでも形状が異なる場合や複数のグリフパターン(たとえば異字体など)があるからだ。このようにOpenTypeフォントファイルは、グリフデータと、各種のテーブルから構成されている。

OpenTypeの機能の多くは、紙の印刷物を作成するときのルールであるレイアウト(組版)の規則を実現するためのものだ。こうした機能には、「合字」、「特性」などがある。

合字とは、特定の文字の組合せを別の字形として表示する機能である。たとえば、欧文では、美的な観点から小文字のfとiの間隔を詰めるといった配置が行われてきた。欧文では活字の時代には、fとiをつなげた1つの活字が作られた。合字機能を使うことで、複数の文字をつなげた1つのグリフを得ることができる。

同じように特定の複数文字の組合せで、間隔を調整してバランス良く見せる方法としてカーニングがある。フォントによっては、合字を持たず、カーニングの情報を入れ、カーニングでバランスを調整することを想定しているフォントもある。

OpenType feature(特性)は、グリフに対して、合字や文字変化(単語内の位置でグリフが変わるアラビア文字などで使う)、上付き、下付きなどを指定する場合に使う。このfeatureも、実装は、フォント開発者に委ねられており、どんな特性があるのかはフォントファイルごとに違う。OpenTypeには、[予め定義された特徴(Registered features 英語)がある。合字の制御などは、これらを使って行う。

2016年に制定されたOpenType Ver.1.8では、可変フォントと呼ばれる機能が入った。これは、OpenType font variation機能を使い、グリフを連続的に変化させる方法を提供するものだ。フォントは見た目が統一され、美しく見えるようにデザインされているため、機械的に変形させてしまうと、デザインが崩れてしまう。文字を見たとき、人間は、大きなサイズであれば、文字を構成している線を太く表示しないと、不安定な印象を受ける。あるいは、太字のグリフを表示して他の部分と区別させたいことがある。

OpenType Ver.1.7までは、こうした線の太さは、個別のフォントとして作成するしか方法がなかった。このため、Windowsの多くのフォントはレギュラー表示、ボールド表示、イタリック表示、ボールド-イタリック表示用のフォントファイルを1つのフォントファミリとして提供していた。Windowsで一般にフォントと呼ばれているものはフォントファミリで、複数のフォントファイルから構成されていた。個別のフォントとして作成しなければならないため、線の太さの種類を増やすことが困難だった。

OpenType可変フォントは、連続値で変化する「軸」を設定でき、軸とその設定値により、グリフを変化させることができる。OpenTypeフォントでは、制御点を組み合わせてグリフの描画を定義している。軸には、この制御点を動かす方向が定義されている。これにより、軸の値に応じたグリフ描画を行うことができ、デザインを保ったままグリフを変形できる。

表02は、OpenTypeが事前定義する軸タグの一覧である。ただし、どの軸を実装するのかは、フォントの開発者の判断であり、フォントファイルによって異なる。また、フォント作成者が新たなタグを登録して利用することもできる。

  • ■表02

フォントが可変かどうかは、Windows 11の設定 ⇒ 個人設定 ⇒ フォント、で該当のフォントのプロパティを表示させたとき、「完全名」の下に「可変フォント」項目が表示される(写真01)。逆にいうとこれが表示されないOpenTypeフォントは可変フォントではない。ここから可変フォントのプロパティ(写真02)を表示できる。

  • 写真01: 可変フォントは、設定 ⇒ 個人設定 ⇒ フォント、でフォントの詳細(プロパティ)を表示させたとき、「変数フォント」という表示がある。これをクリックする可変フォントのプロパティが表示される

  • 写真02: 可変フォント(Windows 11の表示は変数フォント)のプロパティには、可変軸を選択するためのドロップダウン・リストボックスがある。これを選択して、下のスライダーを動かすことでフォントをプレビューすることができる

Terminal付属のCascadiaフォントは、軸としてウェイト(wght)とイタリック(ital)がある。ただし、イタリックは、2パターンしかなく、実質、軸として指定できるのはウェイトのみだ。これに対して、Windows 11標準のSegoe UI Variableには、光学サイズ(opsz)とウェイトがある。このように同じ可変フォントでもフォントにより実装が異なる。

OpenTypeには、複数のファイル形式がある。1つは、TrueTypeアウトライン形式を使うttfファイル、あるは、複数のttfファイルのフォントコレクション形式であるttcファイルだ。もう1つは、PostScript形式アウトラインフォント用のotfファイル、そのフォントコレクション形式のotcファイルである。

可変フォントに未対応のシステム向けに、可変フォント軸の特定値でアウトラインデータを固定し、複数のフォントファイルを作成することを静的(static)形式と呼ぶことがある。

Webブラウザで使うWeb Open Font Format(woff)は、OpenTypeと似た構造を持ち、機械的にwoff、woff2形式に変換することができる。

Cascadiaフォントとは?

Cascadiaフォントは、以下の特徴を持つ。


6種類のフォント
プログラマ向け合字(Cording Ligature)
ターミナルエミュレーターで使う等幅フォント
字形の異なるイタリック体を持ち立体との区別がしやすい
複数のフォントファイル形式
OpenType 可変フォント対応
OpenType特性で文字スタイルを選択(スラッシュ付きのゼロなど)

収録文字はおよそ2426文字(ユニコードのコードポイントレベル。合字やイタリック、ボールド体もあるのでグリフ数はもっと多い)である。(表03)は、その内訳を示すもの。

  • ■表03

Cascadiaフォントには、大きく6種類のフォントがある。大きく、プログラマ向け合字の有無とそれぞれに、Nerdフォントシンボル、Powerlineシンボルを追加したものがある(表04)。さらに、フォントファイルには、ttf可変フォント形式、ttf静的形式、otf静的形式、Web用形式(WOFF2)がある(表05)。

  • ■表04

  • ■表05

Cascadiaフォントでは、Cascadia Code、Cascadia Code PL、Cascadia Code NFがプログラマ向けの合字を持つ。これは、「!=」の並びを「≠」などと表示するもの(写真03)。このようにすることでプログラムソースコードなどが見やすくなる。「合字」といっているが、OpenType特性としてはcalt(Contextual Alternate。コンテキスト代替)である。

  • 写真03: Cascadiaフォントのプログラマ向け合字(Cording Ligature)は、プログラミング言語で使う記号などを合字で表す。図中、左側の黒字が文字の組合せ、右側の青地が合字である。合字の中には末尾にあるような区切り線や定規のようなものもある

おもにコンソールなどで使うことを想定した等幅フォントであり、立体のほかにボールド体とイタリック体を持つ。立体とは、正立した形を持つ書体のことで、和文では「正体(せいたい)」という。いわゆる普通の文字のことだ。イタリック体は、少し斜めに傾いた書体を指すが、正体とは異なり筆記体に近い形を持つのが本来の形だ。文書中の引用部分など、本文と区別したい場合などに利用することが多い。なお、単純に字体を傾けた「斜体」とは基本的には異なるものだが、フォントによっては、イタリックを指定すると斜体が表示されるものもある。

これに対してボールド体は、いわゆる太字で、文中などで強調するなどの目的で使われるもの。ボールド体やイタリック体は、もともとは異なる書体に由来するものだが、現在では、イタリックとボールドは、1つのフォントのバリエーションや属性として扱われることが多く。これらをまとめてフォントファミリと呼ぶこともある。

コンソールでも、イタリックやボールド表示は可能だ。たとえば、コンソール上で動作するエディタ(たとえばvim)などのシンタックスハイライト機能では、これらの表示が使われることがある(写真04)。

  • 写真04: Windows Terminal内でもvimのシンタックスハイライトのように、イタリックやボールド文字を使用するものがある

一部のフォントでは、フォントを傾けた「斜体」と同じデザインのイタリック体を持つものがあるが、これでは、立体との区別がしにくい。これに対して、正しいイタリック体は、本来筆記体をベースにして作られたものなので、立体とは異なる字形をしている。Cascadiaフォントでは、イタリック体のデザインが立体と異なっており、混在したときに区別がしやすい(写真05)。シンタックスハイライトなどでは、立体、イタリックが混在することがあり、その識別性は重要なポイントである。

  • 写真05: Cascadiaフォントのイタリック体小文字は、立体の小文字とは大きくデザインが違い、区別が容易である。プログラミングでは小文字を使う方が多く、前述のシンタックスハイライトなども見やすくなる

また、Cascadiaフォントは、特性を使って、一部のグリフを変更することができる。イタリック体の一部の文字をより筆記体的にすることで、他の文字との区別をつけやすくするものや、斜線が入ったゼロ、制御コードピクチャ(制御コードの意味を表す文字)の記号化などだ。(表06)にCascadiaフォント固有のOpenType特性を示す。

  • ■表06

次回は、具体的なフォント設定に入りたい。

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