コマンドプロンプトの根強い人気
Microsoftから正式に「PowerShell 7.0」が公開された。このバージョンはこれまでWindows 10に互換性確保の目的で保持されてきた「Windows PowerShell 5.1」の正式な後継と位置付けられており、Windows 10の正式なシェルということになる。
Windowsには長らくコマンドプロンプト(cmd)というシェルが搭載されている。MS-DOS時代から存在するシェルだ。現在でもこのシェルを使っているユーザーは少なくない。しかし、Microsoftの開発者はできればもうコマンドプロンプトは使わないでほしいと説明している(参考:MS開発者がツイート「コマンドプロンプトじゃなくPowerShellを使ってね」)。その理由として、主に次の事柄が挙げられている。
- もともとコマンドプロンプトはMS-DOSやWindows 9xからWindows NTに移行してくるユーザーに対し、MS-DOSスクリプトやMS-DOSコマンドを実行する環境を提供するという目的で存在していた
- コマンドプロンプトはMS-DOS時代のスクリプトとの互換性を維持するということが至上命題になっているため、すでに少しでも変更することはできない。メンテナンスモードにあるということであり、ユーザーがこのシェルをコマンドラインシェルとして利用することはお薦めできない
コマンドプロンプトは長きに渡って変更されていない。互換性維持が目的で提供されたシェルであるだけに、変更するわけにはいかないためだ。Linuxのシェルと比べても提供されている機能はまるで足りず、インタラクティブシェルとして使いやすいとは言えない。しかし、コマンドプロンプトは現在でも次のような理由で一定の人気がある。
- コマンドプロンプトは動作が軽快で高速。それに比べるとPowerShellは動作がもっさりしている。コマンドを実行したいと思ったときにサクッと起動できるコマンドプロンプトのほうが便利
- PowerShellはコマンドレットの出力がオブジェクトであり、扱いにくい
- コマンドレットが長すぎて覚えられない
- PowerShellはやりたいことをどのようにやればよいのか調べるのが難しい
コマンドプロンプトは、現状、スクリプトとして使うには制限が多すぎてかなり使いにくい。その点では、プログラミング言語として.NETやC#とともに発展を続けているPowerShellとは比べものにならないのだが、コマンドプロンプトのシンプルさは何事にも代えがたい魅力にもなっている。
多くの方がMicrosoftの主張は理解している。確かに、時代的にはPowerShellへ移行するべきなのだろうと。しかし、実際には使い慣れたコマンドプロンプトを使っている。指摘されているように、PowerShellは学習が難しい。パイプラインを流れるデータはオブジェクトだし、コマンドレット名の長さやパラメータの長さには辟易する。Microsoft側も補完機能を充実させることで改善してはいるのだが、それでもこうした難点は初見者をはねのけるに十分な威力を持っている。
Microsoftがbashやzsh、fish辺りがシステム標準のシェルになる日が来るかどうかはわからない。WSL2の導入を行っているくらいだから、もしかするといずれはbashやzshあたりがシステム標準のシェルになるかもしれないが、それまでは「PowerShell 7」が公式のシェルだ。Windows Terminal 1.0もリリースされたことだし、しばらくは「PowerShell 7をインタラクティブシェルとして使う」という視点から連載を進めていこうと思う。
Windows Terminal 1.0を新しいプラットフォームに
まず、PowerShell 7を利用する環境を整えよう。ちょうど1年ほど前、本連載の第56回で、当時プレビューの段階にあった「Windows Terminal」を取り上げた。Windows Terminalはその後順調に開発が進み、先日初のメジャーバージョンとなる「Windows Terminal 1.0」が公開された。今後はこのアプリケーションがPowerShell 7のお薦め環境となる。
本稿執筆時点(2020年6月)において、「Windows Terminal 1.0」はMicrosoft Store経由でインストールできる。「Windows Terminal」で検索すればすぐに見つかるはずだ。
Windows Terminalはいわゆる「ターミナルエミュレータ」だ。ターミナルエミュレータは、「ターミナルアプリケーション」「ターミナル」「ターミナルウィンドウ」「端末エミュレータ」「端末アプリケーション」などとも呼ばれる。
PowerShell 7がインストールされていれば、Windows Terminalを起動すると次のようにPowerShell 7が利用できる状態になる。
MicrosoftはこれまでコンソールアプリケーションやテキストベースユーザインタフェースとしてWindows APIベースのインフラストラクチャ「Windows Console」を提供しており、これをベースとしたアプリケーションが利用されてきた。だが、Windows Consoleをベースに開発されたアプリケーションは「ターミナルエミュレータ」とはちょっと違う。
そのため、「Windows Terminal」はこれまでWindowsしか使ってこなかったユーザーにとっては若干とっつきにくいものになっている。今回は、この辺りを整理しよう。
普段見ているコマンドプロンプトやWindows PowerShellは同梱モノ
これまでコマンドプロンプトやWindows PowerShellを使ってきたユーザーからすれば、コマンドプロンプトやWindows PowerShellはスタートメニューから専用のアプリケーションとして起動する実行環境ということになる。これらはWindows Consoleをベースに開発されたものだ。
そうしたアプリケーションは、前述した「ターミナルエミュレータ」と「シェル」が同梱された状態にある。コマンドプロンプトはWindows Consoleをベースに開発されたターミナルエミュレータで「cmd.exe」を実行したものであり、Windows PowerShellはWindows Consoleをベースに開発されたターミナルエミュレータで「powershell.exe」を実行したものだ。専用で開発されたターミナルエミュレータでシェルを実行した状態で起動したもの、それが普段見ているコマンドプロンプトでありWindows PowerShellのウィンドウということになる。
Windows TerminalはこのWindows Consoleを引き継ぎつつ、Windows Consoleのターミナルエミュレータとしての機能のみを特化させていったアプリケーションだ。Windows Terminalは、シェルを含まない純粋なターミナルエミュレータである。
macOSやLinuxではこうしたターミナルエミュレータのみのアプリケーションが多数存在しており、提供されている機能は多岐にわたる。ターミナルエミュレータは開発者や管理者に欠かすことのできないものであり、日々の作業効率を左右する重要なアプリケーションだ。Windows Terminalはそうしたターミナルエミュレータの一つであり、Microsoftが初めて公開したモダンなターミナルエミュレータということになる。
Windows Terminalはcmd.exeにもpowershell.exeにも対応しているし、当然PowerShell 7 (pwsh.exe)にも対応している。WSLにも対応しているし、sshやbash、zsh、fishといったシェルにも対応している。後発のターミナルエミュレータだけあって内容もよく整理されており、「Cascadia Code」と呼ばれるフォントまで同梱している。かなりバランスの良いターミナルエミュレータだと思う。
シェルの新たなプレーグラウンドが「Windows Terminal」
では、Windows Terminalと、これまでのコマンドプロンプトやWindows PowerShellのターミナルエミュレータ機能は何が違うのか。ずばり、「汎用性が違う」と言えるだろう。そもそも、Windows Terminalのほうがターミナルエミュレータとしての機能が比較にならないほど豊富であるほか、当然ながら最初から複数のシェルに対応している。
デフォルトで起動するシェルは設定によって変更することができる。また、タブの隣りにある「∨」をクリックすると表示される候補からシェルを選択すれば、そのシェルが新規タブで起動する。コマンドプロンプトウィンドウやWindows PowerShellウィンドウと違って、Windows Terminalはあくまでもシェルに対して中立的なターミナルエミュレータなのだ。
今後、Windows 10では、Windows TerminalでPowerShell 7を実行するというのがスタンダードになっていくと見られる。Windows Terminal 1.0もPowerShell 7.0も公開されたこのタイミングは、新しい環境に移行する良いタイミングだと言えるだろう。
PowerShell 7をインタラクティブシェルとして扱っていくとともに、Windows 10を使っている場合にはこのWindows Terminalについても基本的な操作方法や設定方法は覚えておきたい。特にタブとペイン、設定ファイルの書き方は最初に覚えたいところだ。macOSやLinuxで行っているような作業をWindowsでも簡単に実現できるようになる。