Microsoftが開発中の新しいターミナルアプリ「Windows Terminal」のv0.9が公開された。コマンドラインからの起動が可能になるなど、正式版の姿が見えてきた。正式リリースに近づいたWindows Terminalの機能を見ていこう。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
2020年2月13日にWindows Terminal v0.9が公開された。当初の計画通りであれば、最初の正式版であるv1.0とほぼ同じ仕様を取り込んだバージョンとなる。しかし実際にはまだ積み残しがある(Windows 10 The Latest「開発が進む『Windows Terminal』、タブ内の複数ペイン分割や日本語IMEの利用も可能に」で前回のアップデートの内容や、サポートしているキーボードショートカットについて解説しているので参照していただきたい)。
今回のアップデートでは、コマンドラインオプション、ドラッグ&ドロップのサポート、タブの順番入れ替え、PowerShell Coreの検出などが追加されている。これらの機能について解説していこう。
Windows Terminalは、Microsoftストアアプリ(UWPアプリ)で、Microsoft Storeで「Windows Terminal」と検索することでインストールが可能だ。
Microsoftストアアプリには、「アプリ実行エイリアス」という機能があり、開発時に実行ファイル名を登録しておくことで、従来のWin32アプリケーションのようにexeファイル(実体は存在しない)をコマンドラインで指定しての起動が可能になる。
ただし、Microsoftがアプリ実行エイリアス名を管理しているわけではないため、異なるアプリが同じ実行ファイル名を利用する可能性がある。このため、[Windowsの設定]アプリの[アプリ]−[アプリと機能]−[アプリ実行エイリアス]で、アプリごとにアプリ実行エイリアスを有効にするかどうかの設定が行える。
Windows Terminalは、「wt.exe」というアプリ実行エイリアスを利用する。コマンドラインオプションは、この「wt.exe」に起動パラメーターを指定するためのものだ。コマンドラインオプションは、比較的大きな仕様なので後で詳しく解説する。
ここで言う「ドラッグ&ドロップ」とは、エクスプローラーなどからの「ファイル」のドラッグ&ドロップに対応するものだ。ターミナル内のプログラムには、標準入力からパス文字列が渡される。コマンドラインなどでパス指定をする際に使うと便利だ。
PowerShell Coreは、オープンソース版のPowerShellだ。Windows 10付属のPowerShellとは違い、GitHubからインストールイメージをダウンロードしてインストールする必要がある。Windows Terminal v0.9は、このPowerShell Coreのインストールを検出してプロファイルを自動登録できる。
マウスを使ってドラッグ&ドロップでターミナルタブの順番の入れ替えができるようになった。Windows Terminalには、「次のタブ」(右隣のタブ)、「前のタブ」(左のタブ)に移動するキーボードショートカットが登録されているため、タブの順番を入れ替えることで移動を効率化できる。ただし、複数のWindows Terminalウィンドウを開いている場合に、ブラウザのタブページのようにWindows Terminalのタブをウィンドウ間で移動させることはできない。
その他、新しいプロパティとして「confirmCloseAllTabs」が追加された。これは、ウィンドウをクローズするなどの際に、複数タブがある場合に確認を行うかどうかを指定できる。「false」を指定すると、複数タブが開かれている場合でも、確認することなくWindows Terminalを終了させることができる。
コマンドラインオプションは、アプリ実行エイリアスである「wt.exe」で利用できる。複数のタブを開いたり、タブを複数のペインに分割したりするなどの指定が可能だ。これにより、エクスプローラーの右クリックメニューに「ここでWindows Terminalでcmd.exeを開く」といったメニュー項目を登録できるようになる。ただし現時点では、こうした設定はユーザーが手動で行う必要がある。
オプションの書式は、オンラインヘルプの表示とサブコマンドを使った書式に分かれる。
wt.exe --help | -h | -? | /? [ヘルプを表示したいサブコマンド]
記号文字「|」は「または」を表し、これで区切られたオプションのどれかを指定すればいいことを意味する(この記号自体はオプションではなく、オプションの書式を表現するための記号文字である)。つまり、「--help」「-h」「-?」「/?」のどれを指定しても同じく、メッセージボックスでオンラインヘルプが表示される。
オンラインヘルプは、後述するサブコマンドよりも優先度が高く、指定があれば、オンラインヘルプの表示になる。
また、ヘルプオプションに続けてサブコマンドを指定すると(実際にはその前で指定しても)、サブコマンドのヘルプを表示する。また、エラーメッセージも同じくメッセージボックスでの表示となり、コマンドラインには表示されないので注意されたい。ただし、「wt.exe」は、「cmd.exe」などに対してエラーレベルは正しく渡しているようなので、Errorlevelを使ったエラー検出は可能である。
サブコマンドを使う場合の書式は、以下のようにサブコマンドとサブコマンドの引数をセミコロン「;」で区切って複数指定できる。
wt.exe [サブコマンド] [引数] [; [サブコマンド] [引数]]……
サブコマンドには、「new-tab」(新規タブ)、「focus-tab」(タブ選択)、「split-pane」(ペイン分割)の3つがある。サブコマンドとその引数は、下表のようになっている。
意味 | サブコマンド | 引数 | 引数の解説 | |
---|---|---|---|---|
オンラインヘルプをGUIで表示 | --help、-h、-?、/? [サブコマンド] | [サブコマンド]で該当のヘルプを表示 | ||
新規タブ | new-tab | --profile、-p プロファイル名 | プロファイルを名前、GUIDで指定 | |
--startingDirectory,-d 開始フォルダ | 開始フォルダを指定 | |||
コマンドライン | 起動コマンド(シェル)を指定 | |||
既存のタブを選択 | focus-tab | --target、-t タブ番号 | 番号で指定したタブを選択 | |
--next、-n | 次(右側)のタブを選択 | |||
--previous、-p | 前(左側)のタブを選択 | |||
新規ペイン(ペイン分割) | split-pane | --target、-t ペイン番号 | 分割対象のペイン番号 | |
-H または -V | 水平(-H)、垂直(-V)分割。指定なしはauto | |||
--profile、-p プロファイル名 | プロファイルを名前、GUIDで指定 | |||
--startingDirectory,-d 開始フォルダ | 開始フォルダを指定 | |||
コマンドライン | 起動コマンド(シェル)を指定 | |||
new-tabサブコマンドは、新規タブを作るもので、オプションでプロファイルや起動時のディレクトリ(開始フォルダ)、起動時に実行したいプログラムなどが指定できる。
なお、「wt.exe」では、new-tabサブコマンドは省略可能となっていて、サブコマンドが先行しないオプション指定ではnew-tabサブコマンドが省略されていると見なされる。
プロファイル(Windows Terminalの設定ファイル。詳細は後述)は、インデックス番号(設定ファイル内の位置。先頭がゼロ)、GUID、Nameプロパティのどれかで指定が可能だ。
開始フォルダは、「--startingDirectory」または「-d」のどちらかで指定できる。ここで注意すべきは、「wt.exe」のコマンドラインでは、「\(円マーク、英語モードなら逆スラッシュ)」がエスケープ文字となっているため、ファイルパスの区切り文字は「\\」と指定する必要があることだ。
また、タブ内で起動するプログラムをコマンドラインとして記述できる。これは、プロファイル指定のcommandlineプロパティと同じ意味を持つ。
focus-tabサブコマンドは、既に存在しているタブを選択状態とするものだ。左端からのインデックス番号、または次や前のタブの指定が行える。前述のnew-tabで複数のタブを開いた後に、そのうちの1つを選択するときに使う。
split-paneサブコマンドは、選択中のタブにある指定ペイン(ペインには分割ごとにインデックス番号が割り当てられる)を分割するものだ。「-H」で水平分割、「-V」で垂直分割が可能で、この2つをどちらも指定しない場合は「auto」分割が仮定され、縦横のどちらか長い方を分割する。例えば、縦長のペインであれば、水平分割になる。その他のオプションは、new-tabと同じである。
複数のサブコマンドを指定する場合、「;(セミコロン)」でサブコマンド間を区切る。セミコロンがないと、サブコマンドなのかnew-tabサブコマンドのコマンドライン指定の一部なのかが不明になるからだ。一方、コマンドラインなどでセミコロンを指定したい場合には、エスケープ文字である\を使って「\;」と指定する。
コマンドラインを使っていろいろなパターンを試してみよう。次のコマンドラインは、Windows Terminalを起動し、左側が上下に2つ、右側が1つの合計3つのペインでcmd.exe、WSL(Ubuntu)、PowerShellを起動するものだ。
wt.exe new-tab -p "cmd" ; split-pane -V -p "Ubuntu" -d "/" ; split-pane -H -p "powershell"
次のものは、3つペインにそれぞれUbuntuを起動して、vi(テキストエディタ)とtop(実行中のプロセスの情報をリアルタイムで表示する)というコマンドを起動するものだ。なお、現在のWindows Terminalは開発途上であり、各ペインのプログラム起動時間により、カレントペインが移動するタイミングが異なり、複数のペイン分割を指定すると、必ずしも全てのPCで同じ分割位置になるとは限らない点に注意されたい(同一マシンでもタイミングによって違うことがある)。
また、ディストリビューション名やプロファイル名は、インストール状態に依存するため、試す場合には、各自の環境に合わせて引数を変更する必要があることに注意願いたい。
wt.exe new-tab wsl.exe -d Ubuntu -e vi ; split-pane -V wsl.exe -d Ubuntu -e top ; split-pane -H -p "Ubuntu"
WSLを使うときに注意するのは、「wt.exe」のコマンドラインオプションは、Windows OSが解釈するという点だ。つまり、直接Linux側のコマンドを書けないので、「wsl.exe」とコマンド起動のための-eオプションを使うことになる。また、これらは、「wsl.exe」から直接起動されるため、bashが介在しておらず、コマンドの実行が終わるとペインが閉じてしまう。
また、基本的にコマンドラインは、「cmd.exe」上からの起動を想定している。このため、PowerShellなどから起動する場合には、オプション指定やその一部(セミコロンなどの文字)が、PowerShell側で解釈されないようにする必要がある。例えば、セミコロンは「`;」と指定する。
PowerShellに慣れていないと、こうしたルールは難しく感じられるだろう。それでも、どうしてもPowerShellから「wt.exe」をオプション付きで起動したい場合、簡易には、「cmd.exe "wt.exe <オプション>"」といった指定が利用できる。
筆者が試した範囲では、Windows Terminal Version 0.9.433.0では、split-paneサブコマンドの--targetオプションがエラーになるようだ。また、同じコマンドラインでも、ペインが分割できるときとそうでないときがあった。開発途上の製品で、完成しているわけではない。ここはじっくりと完成を待ちたい。
PowerShellやcmd.exeなどで管理業務を行う場合や、SSHを使い複数ホストにログインして作業といったことを繰り返すようなら、コマンドラインを指定したショートカットを作り、スタートメニューなどに登録しておくと便利だ。
Windows Terminalの設定は、同じプロパティを複数の場所で指定でき、その指定位置の優先順位を使って有効な設定を判定する方法が使われている。このような階層的な指定は「カスケード」と呼ばれることがある(WebページのCSS:Cascading Style SheetのCascadeと同じ意味)。Windows Terminalの開発コード名である「Cascadia」はこのCascadeに由来するという。
設定場所 | セクション | 優先順位 | 編集/変更 | 設定項目 |
---|---|---|---|---|
デフォルト値(defaults.json) | 6(最低) | × | 全設定が指定可 | |
設定ファイル(profiles.json) | 5 | ○ | 全設定が指定可 | |
設定ファイル(profiles.json) | defaults | 4 | ○ | profile設定 |
設定ファイル(profiles.json) | profile | 3 | ○ | profile設定 |
コマンドラインオプション | 2 | ○(起動時に適用) | profile設定の一部 | |
設定ファイル(profiles.json) | keybindings | 1(最高) | ○(適用は実行時) | profile設定の一部 |
Windows Terminalの設定の優先順位 |
Windows Terminalの設定には、「デフォルト値(defaults.json)」「設定ファイル(profiles.json)」「コマンドラインオプション」の3段階がある。最も優先度が高いのがコマンドラインオプションである。
また、デフォルト値は、defaults.jsonファイルとして出力させることはできるものの、これを編集することはできない(defaults.jsonについては、Windows 10 The Latest「PowerShellとLinuxシェルをタブ切り替え可能になる『Windows Terminal』を試用する」参照のこと)。
設定ファイル(profiles.json)には、複数のセクションがある。タブで起動するプログラムと関連設定は、profileセクションで行う。このセクションのプロパティは、全profileのデフォルト値を設定するdefaultセクションのプロパティを上書きする。キー割り当てのkeybindセクションのnewTabやsplitPaneでは、profileセクションの指定の一部を実行時に上書きして適用できる。例えば、profileの指定とは違う起動ディレクトリを使うなどである。v0.9で実装されたコマンドラインも、new-tab、split-paneサブコマンドで、profile設定の一部を上書きすることが可能だ。こちらは、Windows Terminalの起動時に有効になる。
最後にWindows Terminal v0.9時点のキー割り当てを下表で示す。
分類 | 動作 | デフォルトキー | keybindingsで指定するcommand | |
---|---|---|---|---|
フォント | フォントサイズ拡大 | [Ctrl]+[=] | increaseFontSize | |
フォントサイズ縮小 | [Ctrl]+[−] | decreaseFontSize | ||
フォントサイズリセット | [Ctrl]+[0] | resetFontSize | ||
ペイン | ペインを垂直分割 | [Alt]+[Shift]+[+] | { "action": "splitPane", "split": "horizontal"} | |
ペインを水平分割 | [Alt]+[Shift]+[−] | { "action": "splitPane", "split": "vertical"} | ||
ペインを上に拡大 | [Alt]+[Shift]+[↑] | { "action": "resizePane", "direction": "[↑]" } | ||
ペインを下に拡大 | [Alt]+[Shift]+[↓] | { "action": "resizePane", "direction": "[↓]" } | ||
ペインを左に拡大 | [Alt]+[Shift]+[←] | { "action": "resizePane", "direction": "[←]" } | ||
ペインを右に拡大 | [Alt]+[Shift]+[→] | { "action": "resizePane", "direction": "[→]" } | ||
ペインを閉じる | [Ctrl]+[Shift]+[W] | closePane | ||
上のペインへ | [Alt]+[↑] | { "action": "moveFocus", "direction": "[↑]" } | ||
下のペインへ | [Alt]+[↓] | { "action": "moveFocus", "direction": "[↓]" } | ||
左のペインへ | [Alt]+[←] | { "action": "moveFocus", "direction": "[←]" } | ||
右のペインへ | [Alt]+[→] | { "action": "moveFocus", "direction": "[→]" } | ||
スクロール | 1画面上スクロール | [Ctrl]+[Shift]+[PgUp] | scrollUpPage | |
1画面下スクロール | [Ctrl]+[Shift]+[PgDn] | scrollDownPage | ||
1行上スクロール | [Ctrl]+[Shift]+[↑] | scrollUp | ||
1行下スクロール | [Ctrl]+[Shift]+[↓] | scrollDown | ||
タブ | 同じプロファイルで新規タブ | [Ctrl]+[Shift]+[D] | duplicateTab | |
カレントタブを閉じる | 割り当てなし | closeTab | ||
新規タブ(デフォルト) | [Ctrl]+[Shift]+[t] | newTab | ||
タブ0〜8に切り替え | [Alt]+[Ctrl]+[1]〜[9] | { "action": "switchToTab", "index":<0〜8> } | ||
次のタブを選択 | [Ctrl]+[Tab] | nextTab | ||
プロファイル0〜8で新規タブ | [Ctrl]+[Shift]+[1]〜[9] | { "action": "newTab", "index":<0〜8> } | ||
前のタブを選択 | [Ctrl]+[Shift]+[Tab] | prevTab | ||
ウィンドウ | ウィンドウを閉じる | [Alt]+[F4] | closeWindow | |
全画面モードオン/オフ | [Alt]+[Enter]、[F11] | toggleFullscreen | ||
編集、その他 | 検索 | [Ctrl]+[Shift]+[F] | find | |
コピー | [Ctrl]+[Shift]+[C] | copy | ||
コピー | [Ctrl]+[Insert] | copy | ||
改行なしのコピー | 割り当てなし | copyTextWithoutNewlines | ||
貼り付け | [Ctrl]+[Shift]+[V] | paste | ||
貼り付け | [Shift]+[Insert] | paste | ||
メニューを開く | [Ctrl]+[Shift]+[Space] | openNewTabDropDown | ||
設定を開く | [Ctrl]+[,] | openSettings | ||
デフォルト値を開く | [Alt]+[Ctrl]+[,] | (不明) | ||
キー割り当て(keybindings)は、profiles.json内で行う。機能を表すコマンド名やAction/パラメーターの組み合わせでキーの機能を指定できる。
コピー([Ctrl]+[Shift]+[C]キー)と貼り付け([Ctrl]+[Shift]+[V]キー)は、v0.9で[Ctrl]+[Insert]キー、[Shift]+[Insert]の割り当てが追加された。これは、MS-DOS/Windows OSでは伝統的なキー割り当てである。
[Ctrl]+[C]キーや[Ctrl]+[V]キーは、Windows Terminal内で動作するシェルプログラムなどで既に利用されている可能性が高く、Windows Terminalでは、これを避けてキー割り当てを行っている。
Windows Terminalでは、原則[Ctrl]キーとアルファベットキーの組み合わせはデフォルトのキーボードショートカットに割り当てていない。これは、ターミナル内で実行されるコマンドライン側で利用することが多いからである。
cmd.exe、PowerShell、WSL(Linux Bash)に関しては、特定アプリが使うキーボードショートカットなど特殊な場合を除き基本的な衝突はないようである。ユーザーが独自のキーを割り当てる場合には、利用しているシェルなどのキーボードショートカットを考慮してWindows Terminalのキー割り当てを変更する必要がある。
Windows Terminalは、当初のロードマップによれば、2020年4月に正式版v1.0が完成予定である。もっとも、そこで開発が終わりということではなく、取りあえず正式版としてのスタートということになり、その後も改良が続けられるようだ。
v0.9では主要な機能が実装されたものの、一部の機能が未実装のままのようである。しかし、仕様としてはかなり完成に近いところまできているようだ。コマンドラインオプションが使えるようになったため、特殊な用途(例えば、Visual Studio付属のコマンドライン開発環境やSSHによるホスト接続、特定のプロファイルを読み込むPowerShellなど)を起動するショートカットやタイルをスタートメニューに登録できるようになった。コンソールを多用するユーザーであれば、これで自分の好きなようにタブやペインを配置したWindows Terminalを起動できるようになるだろう。
Copyright© Digital Advantage Corp. All Rights Reserved.