コマンドラインからの起動に対応、最終形が見えてきた「Windows Terminal」Windows 10 The Latest

Microsoftが開発中の新しいターミナルアプリ「Windows Terminal」のv0.9が公開された。コマンドラインからの起動が可能になるなど、正式版の姿が見えてきた。正式リリースに近づいたWindows Terminalの機能を見ていこう。

» 2020年03月09日 05時00分 公開
[塩田紳二]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「Windows 10 The Latest」のインデックス

連載目次

Windows Terminal v0.9はコマンドラインオプションを実装 Windows Terminal v0.9はコマンドラインオプションを実装
Windows Terminal v0.9では、コマンドラインオプションを実装し、複数タブを同時に開いて複数ホストにSSHで同時接続するショートカットをスタートメニューやタスクバーに登録できるなど、便利な使い方が可能になった。

 2020年2月13日にWindows Terminal v0.9が公開された。当初の計画通りであれば、最初の正式版であるv1.0とほぼ同じ仕様を取り込んだバージョンとなる。しかし実際にはまだ積み残しがある(Windows 10 The Latest「開発が進む『Windows Terminal』、タブ内の複数ペイン分割や日本語IMEの利用も可能に」で前回のアップデートの内容や、サポートしているキーボードショートカットについて解説しているので参照していただきたい)。

 今回のアップデートでは、コマンドラインオプション、ドラッグ&ドロップのサポート、タブの順番入れ替え、PowerShell Coreの検出などが追加されている。これらの機能について解説していこう。

Windows Terminal v0.9の新機能

 Windows Terminalは、Microsoftストアアプリ(UWPアプリ)で、Microsoft Storeで「Windows Terminal」と検索することでインストールが可能だ。

Windows Terminalをインストールする Windows Terminalをインストールする
Windows Terminalは、Microsoft Storeで提供されている。Microsoft Storeを起動し、「Windows Terminal」と検索し、[入手]ボタンをクリックすればよい。

新機能のコマンドラインオプションに必須の「アプリ実行エイリアス」とは?

 Microsoftストアアプリには、「アプリ実行エイリアス」という機能があり、開発時に実行ファイル名を登録しておくことで、従来のWin32アプリケーションのようにexeファイル(実体は存在しない)をコマンドラインで指定しての起動が可能になる。

 ただし、Microsoftがアプリ実行エイリアス名を管理しているわけではないため、異なるアプリが同じ実行ファイル名を利用する可能性がある。このため、[Windowsの設定]アプリの[アプリ]−[アプリと機能]−[アプリ実行エイリアス]で、アプリごとにアプリ実行エイリアスを有効にするかどうかの設定が行える。

アプリ実行エイリアス名を確認する(1) アプリ実行エイリアス名を確認する(1)
[Windowsの設定]アプリを起動し、[アプリ]をクリックしたら、[アプリ]画面の左ペインで[アプリと機能]を選択する。右ペインの[アプリ実行エイリアス]をクリックすると、[アプリ実行エイリアス]画面に切り替わる。
アプリ実行エイリアス名を確認する(2) アプリ実行エイリアス名を確認する(2)
[アプリ実行エイリアス]画面には、エイリアスが設定されているアプリの一覧が表示される。エイリアスを無効にしたい場合は、スイッチを「オフ」にすればよい。アプリ名の下にはエイリアス名が表示されているので、これを見ることでエイリアスが確認できる。

 Windows Terminalは、「wt.exe」というアプリ実行エイリアスを利用する。コマンドラインオプションは、この「wt.exe」に起動パラメーターを指定するためのものだ。コマンドラインオプションは、比較的大きな仕様なので後で詳しく解説する。

ファイルのドラッグ&ドロップでパスを指定可能に

 ここで言う「ドラッグ&ドロップ」とは、エクスプローラーなどからの「ファイル」のドラッグ&ドロップに対応するものだ。ターミナル内のプログラムには、標準入力からパス文字列が渡される。コマンドラインなどでパス指定をする際に使うと便利だ。

PowerShell Core向けプロファイルをサポート

 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」「-?」「/?」のどれを指定しても同じく、メッセージボックスでオンラインヘルプが表示される。

Windows Terminalのオンラインヘルプを表示する Windows Terminalのオンラインヘルプを表示する
「wt.exe」に「-h」などのヘルプオプションを付けるとオンラインヘルプを示すウィンドウが開く。また、「-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 開始フォルダ 開始フォルダを指定
コマンドライン 起動コマンド(シェル)を指定
Windows Terminalのコマンド
赤文字は仕様にはあるもののv0.9では未実装な機能を表している。

 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つのペインでcmd.exe、WSL(Ubuntu)、PowerShellを起動するコマンド

コマンドラインで複数タブを開いた状態でWindows Terminalを起動 コマンドラインで複数タブを開いた状態でWindows Terminalを起動
コマンドラインを使うと複数のタブだけでなく、タブ内をペインに分割できて、複数の実行環境を同時に起動することも可能だ。

 次のものは、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"


3つのペインにUbuntuを起動してコマンドを実行する例

Linuxコマンドを起動させたペインを開くことも可能 Linuxコマンドを起動させたペインを開くことも可能
コマンドラインでwsl.exeコマンドなどを指定すれば、Linuxコマンドを起動させたペインを開くことも可能になる。

 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のキー割り当て

 最後に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]+[,] (不明)
Windows Terminal v0.9時点のキー割り当て
赤字は、v0.9で変更があった部分を表す。

 キー割り当て(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.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。