コマンドプロンプトまたはWindows PowerShell
WindowsでPowerShell Coreを利用するにはコンソールアプリケーション(またはターミナルアプリケーションと呼ばれることも多い)が必要になる。PowerShell CoreはCUIアプリケーションであり、それを実行するには基盤となるコンソールがなければならない。
WindowsにはコマンドプロンプトやWindows PowerShellといったコンソールアプリケーションがあり、ここでPowerShell Coreを起動して利用するというのが、WindowsでPowerShell Coreを使う場合の一般的な使い方ということになる。
Windowsプラットフォームがデフォルトで提供しているコンソールアプリケーション(ターミナルアプリケーション)は、macOSやLinuxでよく使われているターミナルアプリケーションと比べると、いささか機能が貧弱だ。コマンドプロンプトは互換性を重視する傾向が強いためそもそも機能が少なく、Windows PowerShellはコマンドプロンプトよりはマシだが、サードパーティ製ターミナルアプリケーションと比べると見劣りしてしまう。
しかし、この状況は変わろうとしている。
MicrosoftはコマンドプロンプトやWindows PowerShellといったコンソールアプリケーションをオープンソースソフトウェアとして公開するとともに、「Windows Terminal」というアプリケーションの開発に着手した。
Windows Terminalはすでにオープンソースソフトウェアとして公開されている。このアプリケーションは今後PowerShell CoreやPowerShell 7でデフォルトのプラットフォームとなる可能性が高い。
今回はWindows Terminalを取り上げる。
Windows Console
Windows Terminalについて話をはじめる前に、『Windows Console』という言葉を理解する必要がある。
というのも、Windows Consoleというアプリケーションがあるわけではない。Windows ConsoleとはCUIベースのコマンドやアプリケーション向けのWindows APIベースインフラストラクチャのことを意味している。
『Windows Console』というのはアプリケーションの種類のようなもので、WindowsのCUIアプリケーションを実行するためのターミナルアプリケーションの総称を『Windows Console』と呼んでいる。
つまり、Windows Consoleの実態というか実装系はひとつではないということだ。コマンドプロンプトもWindows Consoleの実装系だし、Windows PowerShellもWindows Consoleの実装系ということになる。
macOSやLinuxであればターミナルアプリケーションは一つで、そこでシェルやPowerShell Coreを実行する。対して、WindowsではコマンドプロンプトやWindows PowerShellはGUIアプリケーションでありシェルでもある。両方含んだ状態になっているわけだ。
Windowsにおけるコンソールアプリケーションとシェルという概念がわかりにくいのは、このような癒着した状態で提供されているからだ。
たとえば上記スクリーンショットはWindows PowerShellの実行例だ。Windows PowerShellは『Windows Console』としてのGUIアプリケーション(コンソールアプリケーション/ターミナルアプリケーション)と、シェルとしてのPowerShell 5 (powershell.exe)の双方が含まれている。つまり、Windows ConsoleとしてのGUIアプリケーションが起動したあとに、自動的にPowerShell 5 (powershell.exe)が実行されている。
上記スクリーンショットでは、PowerShell 5から、さらにPowerShell Core 6.1を起動して使っている。このあたりが状況をさらにややこしくしているのだが、そういった使い方も当然できるようになっている。
Windows Consoleという言葉は、特にWindows Terminalが登場してから使われることが増えてきた。Windows TerminalとこれまでのコマンドプロンプトやWindows PowerShellを理解する流れにおいて、「Windows Console」という言葉を使うと都合がよいためではないかと考えられる。
Windows Terminal
そして『Windows Terminal』だ。
macOSやLinuxでよく使われているターミナルアプリケーションのMicrosoft版だと考えればよい。コマンドプロンプトやWindows PowerShellと癒着するのではなく、さまざまシェルを実行するための汎用目的のターミナルアプリケーションだ。Microsoftは従来のコマンドプロンプトやWindows PowerShellは互換性目的で維持するが、今後は基本的にWindows Terminalの開発を進めていくとしている。
Windows Terminalはまだ開発段階だがプレビュー版がすでにMicrosoft Storeに登録されており、一般ユーザも利用できる状態になっている。
プレビュー版のWindows Terminalはお世辞にも優れたアプリケーションとは言い難い。提供されている機能は必要最低限でモダンなターミナルアプリケーションが提供している機能の基本は抑えているといった感じだが、GUIはまだまだ荒削りだし、設定も一般ユーザ向けとは言えない。
現段階でのWindows Terminalの特徴はタブUIに対応していることにある。今さらタブUIが話題になるのかと思うかもしれないが、Microsoftにおいては話題になる。これまでMicrosoftの提供するWindows ConsoleインスタンスはタブUIを提供してこなかった。Windows 10でもっと汎用的なタブUIの導入を模索していることも関係しているのだろうが、そもそも最近のターミナルアプリケーションでタブUIが提供されていないというのは致命的なので、そうした背景もあるのだろう。
Windows Terminalで新規タブを作成しようとした場合、上記スクリーンショットのようにインストールされているシェルの中から対象を選ぶことができる。このあたりもWindows Terminalがcmd.exeやpowershell.exeになど特定のシェルに特化したものではなく、汎用的なターミナルアプリケーションであることを示している。
Windows Terminaklの設定は次のようにJSONファイルになっている。JSONファイルを編集することがWindows Terminalの設定を変更することになっている。
設定ファイルがJSONファイルになっているというのは最近のアプリケーションにはよくあることだ。MicrosofotはVisual Studio Codeなどのオープンソースソフトウェア開発を通じてこうした最新のスタイルを取り込んでいるものと見られる。
* * *
これまでWindows Consoleの実装系はそれほど便利なものとはいえない面が強かった。UNIX系コマンドを実行するための互換性改善が図られてきたとはいえ、サードパーティ製のターミナルアプリケーションと比べてしまうと、どうしても機能不足が目立っていた。
しかし、Windows Terminalの登場で状況は変わろうとしている。まだまだ荒削りな状態だが、今後Windows TerminalがWindowsにおけるデフォルトのターミナルアプリケーションとして広く使われていく可能性が高い。提供される機能は時間とともに増えるだろう。今後しばらくはWindows Terminalの発展から目が離せないことになりそうだ。