Windows Subsystem for Linuxの搭載で
必要になったコンソールの進化
しかし時は流れて、マイクロソフトはWindows XPではMS-DOSを捨て、64bit版Windowsは16bitモードを捨てた。このため、もはやIBM PCのテキストディスプレイとはなんの関係もないはずにも関わらず、コンソールAPIの仕様はそのまま残っているのである。
WSLが搭載されたことで、VT100互換のエスケープシーケンスを受け付けるようになった。そもそも、MS-DOS時代の「コンソール」は、VT互換のエスケープシーケンス(当時はANSIエスケープシーケンスと呼んだ)機能を持っていた。それが、NTカーネルと統合された段階で廃止となり、以来ずっと、コンソールAPIを使ってアプリケーションが開発されてきた。
このVT互換の端末装置(ターミナル)にもカラー表示が可能なものがあり、やはり文字、背景それぞれに16色を指定することができる。ただし、VT互換のエスケープシーケンスは、デフォルトカラーという概念を持つ。これは、黒地に白文字などのデフォルトの文字色、背景色に色指定を戻すもので、文字色/背景色指定のエスケープシーケンスでデフォルトカラーに戻すことができるようになっている。
これに対して、コンソールAPIでは、いつでも好きな色で文字と背景を表示できるため、デフォルトカラーという概念がなく、カラーパレットにより、16色のカラーコードにそれぞれ独立して24bitのRGBを設定できる。つまり、文字色も背景色も1677万7216色の任意の色に設定できる。
Windowsでは、1つのコンソールでWin32アプリを起動し、そこからWSL側のコマンドを起動することもできる。このため、WSLのコマンドが動作しているとき、すでにWin32アプリにより文字色や背景色が設定されていたり、カラーパレットが変更されている可能性がある。WSL側が文字色や背景色を16個のカラーコードから指定しても、望み通りの色になることは保証できない。そればかりか、カラーパレットの状態によっては黒地に黒文字などユーザーには見えない表示になってしまう可能性さえある。
このために作られたのが、19H1にある「前景分離」「背景分離」の機能だ。この設定をオンにすると、設定した色が文字と背景のデフォルトカラーになる。初期状態がこの色になるのと、エクスケープシーケンスでデフォルトカラーを選択したときにカラーパレットの状態にかかわらず、指定した色が使われる。
色の問題は解決したが、Windowsコンソールが対応しなければならない問題はいくつもある。そのうちの1つが文字コードの問題だ。
簡単に言えば、現時点では8bitまたは16bitにエンコードされた文字コードしか扱うことができない。たとえばUTF-8では1文字を表すのに1~4バイトが必要になる。さらに、絵文字などの表示では、指定されたフォントセットにない文字を他のフォントセットから切り替えて使う「Font-fallback」といった仕組みが必要になる。
さらに細かく見ていくと、絵文字では、男女や肌の色などを切り替えるために文字の合成機能を使う。そこで複数の文字を組みあわせて1つの文字として表示する機能などが必要になる。コンソールは、このあたりが今のところまったく対応できていない。マイクロソフトのブログなどによれば、「October 2018 Update」(RS5、Windows 10 Ver.1809)には、UTF-8を扱うための基本的な仕組みは組み込まれたものの、完全なかたちでUTF-8をサポートするところまでは到達していないという。コンソール改良の道はまだ半ばというところか。

この連載の記事
-
第520回
PC
WindowsターミナルのPreview版 v1.25では「操作」設定に専用エディタが導入 -
第519回
PC
「セキュアブート」に「TPM」に「カーネルDMA保護」、Windowsのセキュリティを整理 -
第518回
PC
WindowsにおけるUAC(ユーザーアカウント制御)とは何? 設定は変えない方がいい? -
第517回
PC
Windows 11の付箋アプリはWindowsだけでなく、スマホなどとも共有できる -
第516回
PC
今年のWindows 11には26H2以外に「26H1」がある!? 新種のCPUでのAI対応の可能性 -
第515回
PC
そもそも1キロバイトって何バイトなの? -
第514回
PC
Windows用のPowerToysのいくつかの機能がコマンドラインで制御できるようになった -
第513回
PC
Gmailで外部メール受信不可に! サポートが終わるPOPってそもそも何? -
第512回
PC
WindowsのPowerShellにおけるワイルドカード -
第511回
PC
TFS/ReFS/FAT/FAT32/exFAT/UDF、Windows 11で扱えるファイルシステムを整理する -
第510回
PC
PowerShellの「共通パラメーター」を理解する - この連載の一覧へ











