このページの本文へ

前へ 1 2 次へ

Windows Info 第307回

Windows 11では標準コンソールの変更が可能になったのでWindows Terminalを設定する

2021年12月26日 10時00分更新

文● 塩田紳二 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

 Windows 11では、Windows Terminalを標準コンソールにすることが可能になった。これにより、直接コマンドプロンプトやWindows PowerShellをスタートメニューから起動してもWindows Terminalが開くようになる。

Windows 11では、コンソールウィンドウを表示するプログラムをWindows Terminalに切り替えることが可能になった

そもそも標準コンソールとはなんぞや?

 Windowsのアプリケーションには大きく分けて2つある。1つは、自分でウィンドウを開いて表示するもの。GUIアプリケーションなどとも言う。もう1つは、自分ではウィンドウを開かず、コンソールウィンドウの中で動作するもの。コンソールウィンドウという汎用のウィンドウを開くWindowsアプリケーションと言えなくもないが、一般的には、コマンドやコンソールアプリケーションなどと呼んで、GUIアプリケーションと区別する。

 このコンソールアプリケーションを起動するとコンソールウィンドウが開く。これはWindows 10/11では「conhost.exe」というプログラムが行なう。コンソールアプリケーションは、コンソールAPIを通じてコンソールに文字を表示できる。このAPIを処理するのがconhost.exeだ。このあたりについては過去の記事を参照されたい(「Windows 10までほとんど手が入れられてこなかったWindowsのコンソール機能」)。

cmd.exeを起動すると、conhost.exeが起動される。Windows 10では、このconhost.exeがコンソールウィンドウ(コマンドプロンプトウィンドウ)を開く

 ただし、Windows 10 Ver.1809(RS5、Windows 10 October 2018 Update)からは、conhost.exeに「ConPTY」という機能が搭載された。これは外部のターミナルエミュレータープログラムを接続するためのインターフェースだ。

 ConPTYを使うことで、conhost.exeが表示する「コンソールウィンドウ」の代わりにWindows Terminalなど外部のコンソールプログラムでの表示が可能になる。なぜ、この機能がconhost.exeにあるのかというと従来のコンソールプログラム(たとえばcmd.exeやPowerShellなど)はWindowsのコンソールAPIを使っているため、直接コンソールプログラムを起動したときに自動的にconhost.exeと接続されるからだ(「Windows 10に“まとも”に使えるコンソール「Windows Terminal」が登場する」)。

 Windows 11の標準コンソールウィンドウの切り替え機能はConPTYを使い、ウィンドウを表示するプログラムを選択できるようにしているのだと考えられる。Windows 11で、標準コンソールをWindows Terminalに切り替えた場合、cmd.exeからconhost.exeが起動するのは同じだが、同時にWindowsTerminal.exeが起動する。

Windows 10でもcmd.exeはconhost.exeを起動するが、Windows Terminalが起動され、そこにcmd.exeのコマンドラインが表示される

 Windows Terminalは、Windows 10のときに開発されたため、conhost.exe/ConPTYを使わずにcmd.exeなどのコンソールアプリケーションを表示する機能を持っている。というのも、Windows Terminalに含まれる「OpenConsole.exe」が、コンソールAPI処理しているためだ。

Windows Terminal内でプロファイルからcmd.exeを起動するとconhost.exeは起動せず、コンソールAPIは、OpenConsole.exeが処理するようになる。これは、Windows 10でも11でも同じ

 この仕組みは、Windows 11でも同じ。OpenConsole.exeはWindows Terminalの本体とでも言うべきプログラムで、UWPアプリであるWindowsTerminal.exeはユーザーインターフェース側だけを受け持ち、実際の処理はOpenConsole.exe側で行なっている。なお、WSLの場合、実際のLinux側プロセスは仮想マシン内になるため、wsl.exeからwslhost.exeが起動され、ここからconhost.exeが起動する仕組みになっているようだ。おそらくWindows 10でも、WSLの場合にはConPTYを使って、Windows Terminalがウィンドウとして接続していると考えられる。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン