検索
連載

【Windows Terminal開発動向】Cascadia codeフォント搭載とJSONスキーマ対応の意味とメリットWindows 10 The Latest

Windows 10の新しいコンソールウィンドウ「Windows Terminal」の開発状況を解説する。Windows Terminalは、2020年春提供の機能アップデート「20H1」と合わせて開発が進行しており、プレビュー版がMicrosoft Storeで公開されている。

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

連載目次

2019年9月24日公開されたWindows Terminalの最新版「v1909」
2019年9月24日公開されたWindows Terminalの最新版「v1909」
Windows Terminalは、プログラミングリガチャーを利用可能なCascadia Codeフォントを同梱する。日本語の表示や絵文字の表示などフォントフォールバックにも対応している。

 Microsoftは、新しいコンソールウィンドウとして「Windows Terminal(ウィンドウズターミナル)」を開発中だ。すでにプレビュー版がMicrosoft Storeで公開されており、現行のWindows 10 May 2019 Update(ビルド18362以降)でも利用可能となっている。

 従来Windows OSには、「Conhost(コンソールウィンドウホスト)」と呼ばれるコンソールウィンドウがあった。Conhostは、コマンドプロンプト(cmd.exe)などを起動すると、キーボードからの入力やテキスト表示を担当するプログラムとして実行されている。Windows 10 October 2018 Update(バージョン1809)までは、タスクマネージャーを起動した状態で、コマンドプロンプトを実行すると、「アプリ」の「Windowsコマンドプロセッサ」の下に「cmd.exe」と「コンソールウィンドウホスト」(conhost.exe)が表示された(Windows 10 May 2019 UpdateからはWindows Terminalに対応するため、仕様が変更されている)。

 Windows Terminalは、Conhostよりも強力なコンソール環境を提供できる。Windows 10 The Latest「PowerShellとLinuxシェルをタブ切り替え可能になる『Windows Terminal』を試用する」で紹介したように、さまざまな点が強化されている。

 Microsoft Storeでプレビュー版のVersion:0.2(以下、v0.2)が公開されたのが2019年7月で、その後v0.3、v0.4、v0.5(1909)と3回のアップデートが行われている。そこで、本稿では最新のプレビュー版であるv1909を中心に、v0.2以降の変更点などについて解説を行う。

公開日 バージョン 概要 機能追加など
2019年05月06日 v0.1 プレビュー開始
2019年06月21日 v0.2 Microsoftストアでのプレビュー提供開始 キーカスタマイズ
2019年08月02日 v0.3 Version: 0.3.2112.0 設定強化、Azure Cloud Shell対応
2019年08月27日 v0.4 Version: 0.4.2342.0 設定強化、キー割り当て変更、クリップボードコピー強化
2019年09月18日 Cascadia codeフォント提供開始 フォント単独での配布が行われている
2019年09月24日 v1909 Version: 0.5.2681.0 JSONスキーマ対応、Cascadia Code対応
Windows Terminalの更新履歴

 Windows Terminalは、2020年4月に完成予定で、v1.0として配布が開始される予定だ。2019年内には、v1.0に搭載される機能が確定するという。

 なお、開発とプレビュー公開は、4週間周期を計画しているという。September 2019 release(1909:2019年09月版、以下v1909と表記)は9月24日に公開されたため、次回のプレビュー版は10月下旬に公開される予定だ。この9月のアップデートから、バージョン表記はWindows 10と同じく「西暦下2桁+2桁の月」になった。ただし、Windows Terminal自体の「About」の情報は変更されておらず、v0.5.2681.0と表示が行われる。

Windows Terminalの[About]ダイアログ
Windows Terminalの[About]ダイアログ
Windows Terminalは、バージョンをWindows 10のように西暦下2桁+月2桁とした。最新版はv1909だが、ソフトウェアの[About]ダイアログの情報は変更されておらず、v0.5.2681.0と従来のバージョン表記のままだ。

v1909以前の改良点

 v1909以前の改良点は、設定項目の追加やローカル設定化、クリップボードコピーの強化などがある。当初のWindows Terminalの設定情報は、ユーザーデータの[Roaming]フォルダ(%UserProfile%\AppData\Roaming)内にあり、Windows 10の同期機能で同一ユーザーの他のマシンにもコピーされていた。

 しかし、機種による画面などの違いや用途の違いなどもあり、ローミングは不適切と判断、各マシンで設定を保存するローカル設定に変更になった。

 最新のv1909に搭載されている機能のうち大きなものとしては、「Cascadia codeフォントの搭載」「設定JSONデータのJSONスキーマ対応」の2つがある。

Windows Terminalの完成度

 Microsoft Storeで公開されてから4回目のプレビュー版になるが、開発は着々と進んでいるようだ。動作は、比較的安定しているようだが、筆者の環境では、評価中に2度ほどクラッシュして落ちてしまった。プレビュー版ゆえ仕方がないことではあるが、実利用には時期尚早といえる。

 気になるWindows Terminalの英語以外の言語対応だが、v1909で確認したところ、フォントフォールバック(指定されたフォントに存在しない文字コードが指定されたときに他のフォントファイルで代用する動作)などにも対応し、どのフォントを指定しても日本語やカラー絵文字の表示が可能であった。

 ただし、欧文フォントを指定すると、日本語フォントなどを別途設定することができないため、日本語の間隔が妙に空いた間の抜けた表示になってしまう。「MSゴシック」などの日本語フォントを指定すると、日本語はきれいに表示されるようになるが、今度は欧文フォントが指定できないので、Cascadia Codeのプログラミングリガチャー(後述)などが使えなくなってしまう。以前のバージョンでは、設定で日本語フォントを指定するとWindows Terminalが起動しなかったので、その点では国際化対応が順次進んでいるようだが、まだまだという感じだ。

 現在のプレビュー版v1909は、日本語入力が正しく動作していない(過去のバージョンでは正しく動いていた記憶があるのだが)。IMEのオン/オフが効かないため、日本語の入力を行うことができない。ただし、クリップボードから日本語を貼り付けるとコマンドラインでは、正しく受け取ることができる。

 Windows Terminalは、オープンソースなので、バグ報告や対応に関しては、githubのIssues(Microsoft/Terminal Issues)を使う。

 ここを見ると、前記のフォントフォールバックやIMEの制御に関しては、すでに報告が上がり、対応が予定されているようである。

設定JSONファイルのJSONスキーマ対応

 プレビュー版1909の特徴の1つが、「JSONスキーマ」対応である。Windows Terminalの設定は、JSON(JavaScript Object Notation)と呼ばれるファイル(内容としてテキスト型式)を出力し、これを外部のエディタで編集し保存することで行われる。v1909以前は、JSONスキーマに対応していない形式のファイルが出力されていた。v1909からは、JSONファイルの先頭に「"$schema": "https://aka.ms/terminal-profiles-schema",」という行が付き、JSONファイルがJSONスキーマに対応していることを示すようになった。

Windows TerminalのJSONスキーマ対応
Windows TerminalのJSONスキーマ対応
Windows TerminalのJSONスキーマ対応とは、設定用JSONファイルの先頭にJSONスキーマ対応を示す行が追加されるだけだ。

 Windows Terminal側の対応はこれのみで、他に何か機能が加わったわけではない。このあたり、単にJSONスキーマ対応としたニュース記事などもあり、何かスゴイ機能がWindows Terminalに搭載されたと勘違いしている方もいるようだが、Windows Terminal自体の変更は、前記の1行が出力されるのみである。

 JSONスキーマを利用するには、JSONスキーマに対応した外部の「JSONエディタ」を使わなければならない。つまり、この機能は、ユーザーが利用するJSONエディタに依存するわけだ。

 Windows 10には、標準ではJSONエディタは含まれないので、標準では設定を開くとメモ帳がJSONファイルを読み込んで起動する。しかし、メモ帳はJSONスキーマに対応していないため、JSONスキーマの恩恵を受けることができない。取りあえず手軽に試すなら、Microsoftが無償で配布しているエディタ「Visual Studio Code(以下、VS Codeと略す)」をインストールするのがいいだろう。VS Codeのインストール方法や使い方については「Visual Studio Codeの使い方、基本の『キ』」が大いに役立つだろう。

 なお、Visual Studioがインストールされていると、Visual Studioが標準のJSONエディタとなるため、こっちが開いてしまう。Visual Studioは大きなソフトウェアであり起動にはちょっと時間がかかる。そこで、Visual Studioをインストールしている場合でもVS Codeをインストールした方がいいだろう。

VS CodeでWindows Terminalを設定する

 ここでは、JSONスキーマに対応したVS CodeでWindows Terminalを設定(JSONファイルを編集)するときにどのようになるのかを見ていこう。Windows Terminalが出力するJSONスキーマを示す「$schema」が示すURLには、Windows Terminalの設定JSONファイルのスキーマJSONデータが置かれている。

 JSONエディタは、この行からスキーマの公開先を知り、JSON編集時に利用する。具体的には、JSONファイル内の項目の注釈を表示したり、オブジェクトの名前を補完したり、値の選択肢を表示したりするといったことに使われる。また、キー割り当ての機能名などを間違えた場合、下線を表示しエラーを示す機能もある。マウスカーソルを当てると候補となる機能名を表示してくれる。VS CodeのJSONスキーマ対応はこうしたものだが、一般にどんな機能が利用できるようになるのかは、アプリケーションに依存する。JSONスキーマ対応だからといって必ずしも全てのアプリで同じことができるわけではない。

VS CodeでWindows Terminalを設定する(1)
VS CodeでWindows Terminalを設定する(1)
VS Codeで設定項目にマウスカーソルを合わせると項目の注釈を表示できる。これは、JSONスキーマから情報を得て行われる。

VS CodeでWindows Terminalを設定する(2)
VS CodeでWindows Terminalを設定する(2)
プロパティ名のところで先頭文字を入力すると、候補となるプロパティ名が表示され、補完入力が可能だ。

VS CodeでWindows Terminalを設定する(3)
VS CodeでWindows Terminalを設定する(3)
プロパティ名を補完で入力した後、値が特定の文字列だけを取るような場合には、候補が表示され、選択して値とすることが可能だ。これもJSONスキーマ側の定義による。

VS CodeでWindows Terminalを設定する(4)
VS CodeでWindows Terminalを設定する(4)
JSONスキーマには構造や許されるプロパティ名などが登録されており、エラーを検出することもできる。VS Codeではエラーがあると下線を表示し、マウスカーソルを合わせるとメッセージを表示する。

 なお、Windows Terminalは、v0.4から設定JSONファイルを読み込んだときにエラー箇所を表示できるようになった。このため、テキストエディタなどで編集しても、以前のように「何が間違っているのか分からない」ということは少なくなっている。

設定JSONファイルのエラー表示
設定JSONファイルのエラー表示
現在のWindows Terminalでは、設定JSONファイルのエラーを読み込み時に表示できるようになっている。

Cascadia Codeフォント対応のメリット

 v1909でのもう1つの大きな変更点であるCascadia Codeフォントについて見ていこう。Cascadia Codeフォントは、Windows Terminalと同じプロジェクトで開発が進められているプログラミングを想定した欧文フォントである。「Cascadia(カスカディア)」とは、Windows Terminalの開発コード名である。これに、「プログラミング」を想起させる「Code」と合わせてフォントの名称にしている。おそらく、Windows Terminalのユーザーとして、WSLを使ってEmacsやviなどのテキストエディタでプログラムなどを書く層を想定しているのであろう。

 Cascadia Code最大の特徴は、プログラミング言語に使われる記号の組み合わせを見やすい「プログラミングリガチャー」(プログラム用の合字)で表示できることだ。例えば、C言語には「!=」という演算子がある。「if ( a != b)」などとして両端が等しくないかどうかを調べる演算子だ。Cascadia Codeは、この「!=」という2文字の記号を「≠」と表示する。

Cascadia CodeとConsolasの表示の違い
Cascadia CodeとConsolasの表示の違い
同じコードをCascadia CodeとConsolasで表示させてみた。Cascadia Codeのほうは「!=」を「≠」などと表示しプログラムが見やすい。

 その他にも「++」、HTMLの「</」やJavaScriptの「===」などの間を詰めて表示する機能があり、記号類が見やすくなっている。また、「:」や「+」「-」といった記号も、前後の文字の高さに合わせて表示位置を上下させる機能がある。わずかな違いだが、高さが調整されると、何となく感じていた「落ち着かない感じ」や「違和感」のようなものが解消されてスッキリとする。

Cascadia Codeの記号表示
Cascadia Codeの記号表示
Cascadia Codeでは、同じ「:(コロン)」や「+(プラス)」「-(マイナス)」などの記号も前後の文字により位置を上下にずらしてバランスを取るようになっている。

 これには、TrueType/OpenTypeが持つ、「カーニング」や「リガチャー」などと呼ばれる組版規則(印刷時にページ上に文字や図などを配置、レイアウトするための規則)に応じてフォントを切り替える機能を使っている。

 「カーニング」は、フォントの間隔を詰めて一部が重なるように表示させることで、リガチャーは、特定の2つの文字の組み合わせを別のグリフ(文字の形。フォントイメージ)で置き換える機能だ。どちらも文字の並びがきれいに見えるようにするためのものだ。

 Windows Terminalでは、このTrueType/OpenTypeフォントが持つリガチャー/合字の機能を利用している。実際には、フォントには、合字のグリフや表示ルールが情報として組み込まれており、Windows Terminalの文字レンダリング機能は、これを読み出して動作するようになっているようだ。

 活字で印刷していた当時は、カーニング、リガチャーやベースラインの変更などといった組版規則は、全て活字を加工して行っていたため、それぞれ別の「技術」であった。しかしソフトウェアで文字を表示させる場合、特定の文字の組み合わせで別グリフを表示するといった点では全て同じだ。異字体や旧字体などの処理などと合わせ、発生条件と定義された処理のどれを使うかを組にした情報がフォントファイル内部に登録されている。

 フォントファイルが含むのは、該当の文字デザインに対して適切と思える組版処理のうち単純なものだけだ。例えば、日本語の禁則処理のようなものはフォント側では対応できない。また、Cascadia Codeは、モノスペース(等幅)フォントなので、本来の欧文組版規則のリガチャーやカーニングなどは行わない(行えばモノスペースにならないため)。

 これは、Windows Terminal内で行われる処理であるため、動作しているWSLやcmd.exeといったアプリケーションからは見えず、あくまでも文字コードを表示させただけでしかない。合字が表示されたとしても、ソフトウェア側からは、あくまでも個別の文字コードのままである。

 Windows Terminalのリガチャー機能は、内部で勝手に行っているため、ソフトウェア側は、通常通りにテキストを表示するだけでよい。単にコマンドラインに文字を打ち込んでも、リガチャーの効果を見ることができる。このため、コンソールで動作するプログラムは全てCascadia Codeのプログラミングリガチャーの恩恵を受けることができる。逆にこれが不要なら、クーリエ(Courier/Courier New)などの他のモノスペースフォントを指定すればよい。

Cascade codeに含まれる合字フォント

 Cascade codeには、132個の合字フォントが組み込まれている他、上下位置の違う複数のコロンやプラス記号などのイメージもある。これらを文字コードの指定で表示させることはできないが、Microsoftが提供しているTrueType/OpenType作成ソフトウェア「Microsoft Visual TrueType」というソフトウェアを使うと、Cascadia codeのTrueTypeファイルに含まれているグリフを見ることが可能だ。

Cascadia Codeが持つプログラミングリガチャー
Cascadia Codeが持つプログラミングリガチャー
前述の「!=」や主要な言語の比較演算子やタグ、注釈記号などの他、矢印などもある。変わったところでは「www」が合字になっている。

Visual TrueTypeの合字表示
Visual TrueTypeの合字表示
MicrosoftのVisual TrueType(VTT)を使うと登録された合字やそのデザインを見ることができる。

Cascadia Codeで表示させる方法

 v1909以前にWindows Terminalを利用し、設定を変更していた場合、v1909にアップデートしても、各プロファイルにあるフォントは以前の指定のまま(Consolas)になる。プロファイルを書き換え、フォントを「Cascadia Code」に変更する必要がある。具体的には、各プロファイルに、「"fontFace" : "Consolas",」という行があるので、これを「"fontFace" : "Cascadia Code",」に置き換えればよい。

 Cascadia Codeのフォントは、Windows Terminalのパッケージに含まれているため、Windows Terminal v1909をインストールすれば別途フォントをインストールする必要はない。なお、従来のConhostは、リガチャーなどに対応していないため、フォントを指定してもプログラミングリガチャーを表示することはできない。WordやWordPadのように自身で組版規則を処理するアプリケーションでもリガチャーは表示されない。

 一方、メモ帳はCascadia Codeをフォント指定すると、正しくリガチャーを表示できる。その他、前述のVS CodeもCascadia Codeのプログラミングリガチャーに対応している。VS Codeで利用する場合、[Settings(設定)]−[Text Editor(テキストエディター)]−[Font(フォント)]−[Font Family]のテキスト欄の先頭に「'Cascadia Code',」を入力する(シングルクオートとカンマは必須)。

 Windows Terminalをインストールしないで、Cascadia Codeを使いたい場合には、フォントファイルが「Releases microsoft/cascadia-code GitHub」で配布されているのでこれを使うといいだろう。

VS Codeもプログラミングリガチャー対応
VS Codeもプログラミングリガチャー対応
VS Codeもプログラミングリガチャーに対応している。


 Windows Terminalは、従来のConhostの欠点を改良しており、完成すれば、いい代替ソフトウェアになりそうだ。ただ、現時点では、日本語入力ができないなどの問題があり、実用的に使うにはまだ早い。特に必要がなければ、完成まで待つのがいいだろう。

 とはいえ、WSLやcmd.exe、PowerShellでは、大半がASCII文字のコマンド入力なので、この範囲で使う分にはなんとかなる。筆者の使い方だと、プログラムを書くときには日本語で注釈を入れるので日本語入力が必須だが、それ以外は、ほとんどASCIIのコマンド入力で済ませている。このため、最近では、Conhostを使うよりもWindows Terminalの利用頻度が高くなってきた。

 Linux側のCUI系アプリケーションとの相性も悪くない。設定をカスタマイズして、SSHを起動するプロファイルを作れば、リモートログインが簡単になるといったメリットもある。

「Windows 10 The Latest」のインデックス

Windows 10 The Latest

Copyright© Digital Advantage Corp. All Rights Reserved.

ページトップに戻る