Microsoftが開発した端末エミュレーターソフトウェア「Windows Terminal」のプレビュー版が公開された。早速、このWindows Terminalを使ってみた。これまでの端末エミュレーター(コンソール)との違いなどを含めて解説する。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
Windows Terminalは、Microsoftが開発した「端末エミュレーター」ソフトウェアだ。端末エミュレーターとは、ハードウェアである端末装置をソフトウェアで実現するものだ。
端末エミュレーターソフトウェアは、外部のコンピュータシステムと接続して利用することが前提であり、シリアルインタフェースやネットワークプロトコル(SSHやTELNETなど)で接続を行うことが多い。
Windows XPまでは、Microsoftも「Hyper-Terminal(ハイパーターミナル)」という端末エミュレーターを提供していたことがあった。だが、シリアルインタフェースがUSBに置き換わるにつれて、利用場面が減り、標準ソフトウェアから外された。
Windows Terminalは、Windows 10 October 2018 Update(バージョン1809)で実装された仮想コンソール(ConPTY)を使い、PowerShellやcmd.exe、WSLといったWindows 10のコンソールアプリケーションで利用するものだ。ただし、Windows Terminalが利用できるのは、Windows 10 May 2019 Update(バージョン1903)以降となっている。
Windows Terminalは、Microsoft Storeから配布される無償のオープンソースソフトウェアで、原稿執筆時点ではプレビュー版が公開されている。ソフトウェア開発プラットフォームのGitHubでソースコードが公開されている(GitHubのWindows Terminalページ「microsoft/terminal」)。
あくまでもWindows Terminalは、オプションのソフトウェアという位置付けで、Windows 10自体には従来と同じくコンソールウィンドウが付属する。コンソールウィンドウは、Windows 10のコンソール処理の仕組みと一体になっており、これだけを廃止するというわけにもいかないからだ。
Windows Terminalは、コンソールウィンドウとは違い、UTF-8による文字コード表示が可能な端末セッションをタブにより複数同時に扱うことが可能だ。これにより、従来のcmd.exeやPowerShellだけでなく、WSL/WSL 2のコンソールとしても利用できる(WSL 2については、Windows 10 The Latest「完全なLinuxがWindows 10上で稼働する? 『WSL 2』とは」参照のこと)。
ここでは、Microsoft Storeで公開されたプレビュー版のWindows Terminalを見ていくことにする。Windows Terminal自体は現在でも開発が続いており、現時点では完成状態ではないこと、また今後の開発に応じて仕様などが変わる可能性があることは理解していただきたい。
Windows Terminalが登場したのは、1つには、WSL/WSL 2により、Windows OS内で、Linux系のアプリケーションの比重が高まっているからだ。Microsoftは、Windowsのコンソールを改良し、エスケープシーケンスなどに対応してきたが、現状のコンソールの設計は古く、段階的に改良していたのでは、時間がかかり過ぎる。
また、改良する際には、従来のWindowsコンソールアプリと互換性を持たせる必要がある。このためMicrosoftは、Windows OSのコンソールAPIと、UNIX/Linux型の仮想端末型の両方の要求を満たすために、ConPTY(Pseudo Console:疑似端末)とそれを使うWindows Terminalの提供に踏み切ったと考えられる。
Windows OSでコンソールアプリケーションは、APIを介してコンソールウィンドウを制御している。Windows OSでは、GUIを使うアプリケーションが通常形式であり、コンソールを利用するアプリケーションは、アプリケーションを開発者が「コンソールアプリケーション」として、GUIアプリケーションとは別に開発する必要がある。また、常にAPIを介して制御が可能であるため、表示する文字色などを自由に指定できる。いつでもコンソール状態を取得できるため、アプリケーションは現在のコンソールの状態などを意識したり、保存したりしておく必要はない。
一方、UNIX/Linux系のアプリケーションは、歴史的な経緯から、アプリケーションは、STDOUT(標準出力)/STDIN(標準入力)を使ってテキストやエスケープシーケンスを入出力する形で表示を行ってきた。かつては、端末装置をシリアルインタフェースなどでコンピュータに接続していたため、この仕組みにTTYデバイスが使われていた。
のちにマルチウィンドウ表示が可能なUNIXワークステーションなどが使われるようになると、仮想的なTTYデバイスであるPTY(Pseudo-TTY)を介して接続するようになった。こうした構造であるため、アプリケーション側では、常にコンソールの状態を管理しておく必要があった。ただし、UNIX/Linuxでは端末によるコードの違いなどを含め、画面制御用のライブラリが整備されているため、ソフトウェアの開発自体は、それほど面倒なことではない。
Copyright© Digital Advantage Corp. All Rights Reserved.