PowerShellとLinuxシェルをタブ切り替え可能になる「Windows Terminal」を試用する:Windows 10 The Latest
Microsoftが開発した端末エミュレーターソフトウェア「Windows Terminal」のプレビュー版が公開された。早速、この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から配布
Windows Terminalは、Microsoft Storeから配布される無償のオープンソースソフトウェアで、原稿執筆時点ではプレビュー版が公開されている。ソフトウェア開発プラットフォームのGitHubでソースコードが公開されている(GitHubのWindows Terminalページ「microsoft/terminal」)。
Windows TerminalはMicrosoft Storeで配布
Microsoft Storeを開き、「Windows Terminal」で検索すると、Windows Terminalのベータ版が見つかる。
Windows TerminalはMicrosoft Storeで配布
[入手]ボタンをクリックすると、[複数のデバイスで使用する]ダイアログが表示され、Microsoftアカウントの入力が求められるが、[必要ありません]をクリックすればよい。ただし利用できるのはWindows 10 May 2019 Update(バージョン1903)以降に限られる。
従来のコンソールウィンドウとは「併存」
あくまでもWindows Terminalは、オプションのソフトウェアという位置付けで、Windows 10自体には従来と同じくコンソールウィンドウが付属する。コンソールウィンドウは、Windows 10のコンソール処理の仕組みと一体になっており、これだけを廃止するというわけにもいかないからだ。
WSLで利用可能なWindows Terminal
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 OSのコンソールアプリケーションとは
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を介して制御が可能であるため、表示する文字色などを自由に指定できる。いつでもコンソール状態を取得できるため、アプリケーションは現在のコンソールの状態などを意識したり、保存したりしておく必要はない。
Windows OSのコンソールアプリとLinuxのコンソールアプリ
Windows OSでは、コンソールアプリは、APIで直接コンソールウィンドウを制御できる。これに対してUNIX/Linux系では、端末装置からコンピュータを利用していたため、プログラムからの文字出力と文字入力は、常にテキストベースでのやりとりになる。
一方、UNIX/Linux系のアプリケーションは、歴史的な経緯から、アプリケーションは、STDOUT(標準出力)/STDIN(標準入力)を使ってテキストやエスケープシーケンスを入出力する形で表示を行ってきた。かつては、端末装置をシリアルインタフェースなどでコンピュータに接続していたため、この仕組みにTTYデバイスが使われていた。
のちにマルチウィンドウ表示が可能なUNIXワークステーションなどが使われるようになると、仮想的なTTYデバイスであるPTY(Pseudo-TTY)を介して接続するようになった。こうした構造であるため、アプリケーション側では、常にコンソールの状態を管理しておく必要があった。ただし、UNIX/Linuxでは端末によるコードの違いなどを含め、画面制御用のライブラリが整備されているため、ソフトウェアの開発自体は、それほど面倒なことではない。
Windows OSのコンソールアプリケーションの構造と進化
Copyright© Digital Advantage Corp. All Rights Reserved.