Microsoftがオープンソースで開発を進めていた新しいターミナルアプリ「Windows Terminal」がついにVer.1.0となり正式リリースとなった。このWindows Terminalの主な機能と使い方をまとめてみた。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
Microsoftがオープンソースソフトウェアとして開発を進めている「Windows Terminal」の正式リリース版となるVer.1.0が配布された。Microsoftが開催している開発者向けのイベント「Microsoft Build 2020」に合わせて公開されたようだ。
原稿執筆時点で公開されているのは、v1.0.1401.0で、日本時間の2020年5月20日に公開された。既にMicrosoft Storeからダウンロードが可能な他、ソースコートなどが公開されているGitHubからもMSIX形式のパッケージでダウンロード可能となっている。
Windows Terminalでは、これまでもプレビュー版をベースに機能などについて紹介してきたが、今回は正式版をベースに基本的な使い方などをまとめることにする。なお、設定ファイルによるカスタマイズに関しては、複雑な機能なので別記事で解説する予定だ。
Windows OSでは、テキストベースのアプリケーションを「コンソールアプリケーション」と呼び、長らく「conhost.exe」というプログラムが表示するウィンドウが使われてきた。conhost.exeは、古くはWindows 1.01のMS-DOS Executiveにさかのぼり、MS-DOSアプリケーションをWindows OSの中で動作させるために作られたウィンドウアプリケーションがベースである。32bit化やNTカーネルでの動作など、Windows OSの最初から使われてきたプログラムだが、設計が古く、かなり長い間「オマケ」的な扱いで、管理者向けのコマンドなどを実行するためのものだった。
その一方で、PowerShellやWSL(Windows Subsystem for Linux)の登場で、Windows OSでも再びコンソールの重要性が高まってきている。しかし、conhost.exeはこうした新しい環境には追従しにくい機構のため、改良がなかなか進まなかった。
そもそも、IBM PCのディスプレイだったMDAやCGAといったハードウェアのテキストモードをエミュレーションするように作られていたため、文字コードは8bitでコードページにより文字セットを切り替えといった構造だった(日本語は2文字を使って16bitで表示していた)。Windows 10でも改良が続けられたものの、互換性を保ちながらの改良は困難とMicrosoftは判断したのだろう。それで登場したのが「Windows Terminal」だ。
なおconhost.exeは、互換性のため今後も残る。Windows Terminalは、Microsoftの製品ではあるものの、オープンソースによるフリーソフトウェアという位置付けになる。
余談になるが、最近のMicrosoftはWindows OSの標準アプリやアドオンアプリのオープンソース化を進めている。例えば、既に「電卓」アプリはオープン化されているし、Windows 10 The Latest「Windows 10をより使いやすくするMicrosoft製ツール『PowerToys』とは」で紹介している「PowerToys」のようなアドオンアプリもオープンソースで開発が進められている。
おそらく、Windows OSの起動や処理に直接関わらない付属アプリは、最終的には、オープンソース化されてWindows OSから切り離され、Microsoft Storeからユーザーがインストールする方向になるのではないかと思われる。オープンソース化によって、Microsoftが付属アプリの開発やサポートから手を引いてしまうのかと心配になるが、「電卓」アプリもオープンソース化してから機能が追加されるなど、放置されるわけではないようだ。
Windows Terminalも、2020年7月から毎月アップデートすることが明らかにされており、機能強化も期待できる。バグなどの報告や追加してほしい機能などのフィードバックは、GitHubなどを通じても行うことは可能だ。
Windows Terminalのインストールは前述の通り、Microsoft Storeから行える。「Microsoft Store」アプリを起動し、検索ボックスに「Windows Terminal」と入力すれば、「アプリ」欄の先頭に「Windows Terminal」が表示されるはずだ。これをクリックして、インストールを実行すればよい。
Windows Terminalは基本的には、キーボードショートカット(後述)を使って操作するのを原則としている。ただし、タブやウィンドウサイズの変更といった操作や、メニューなど最低限のGUI操作も備える。
以下の画面はWindows Terminalのウィンドウだ。Windows Terminalでは、タブで複数の実行プログラムの出力を切り替えるようになっている。また、1つのタブを複数のペインに分割して、そのそれぞれでプログラムを実行させることも可能だ。
プログラムは、cmd.exeやPowerShellのような「シェル」アプリケーションが想定されているが、基本的にはコンソールアプリケーションであれば、何でも実行できる。
ただし、[スタート]メニューなどからコンソールアプリケーションを直接起動すると、conhost.exeを使ってウィンドウを表示してしまう。このため、Windows Terminalは、自身を使って起動するコンソールアプリケーションをプロファイルと呼ばれる情報として定義する。ここに登録することで、コンソールアプリケーションをWindows Terminal内で起動させることが可能になる。
プロファイルからのコンソールアプリケーション起動は、キーボードショートカット([Ctrl]+[Shift]+[1]〜[9]キー)やコマンドラインから指定できる。また、コマンドラインの性質から、いったんシェルプログラムを起動すれば、そこから他のシェルプログラムを起動することが可能だ。例えば、プロファイルでPowerShellをタブで開き、さらにコマンドラインでwsl.exeを実行すれば、タブ内でLinuxが起動する。
また1つのタブは、キーボードショートカットにより複数のペインに分割できる。ペインも前述のプロファイルに関連付けられており、任意のプロファイルをペイン内で実行することができる。ただし、起動中のWindows Terminalでこれを行うには、キーボードショートカットに割り当ておく必要がある。
後述する起動オプションを使えば、任意のコンソールアプリケーションでペインを開くことは可能だ。ペインは、タブを水平、垂直に分割することができ、開いた後、領域の拡大や縮小が可能だ。これを使うことで、タブを左右に分割して、右側のペインにコマンドのオンラインヘルプを表示させ、これを見ながら左側のペインで実行するといったことが可能になる。
タブは、マウスでドラッグして並び替えることもできる。Windows Terminalには、「前」「次」のタブへ移動するというキーボードショートカットがあるため、並び替えることで、タブ間の移動が楽になる。ただし、現時点では、個別に起動し、別ウィンドウとなったWindows Terminal間でタブを移動させることはできない。
Windows Terminalは設定画面を持たないため、設定を行うにはJSON形式の設定ファイル(形式としてはUTF-8のテキストファイル)を外部のエディタで編集する必要がある。JSONとは、JavaScript Object Notationの略で、もともとはJavaScriptからオブジェクトデータをテキスト型式で入出力するための仕様だった。
しかし、JSONは多くの用途には十分でかつ、XMLのように複雑な仕組みが必要ないため、このところJavaScript以外でも広く使われるようになってきた。ただし、もともとが簡易な利用を想定していたため、注釈を含めることができないなど、一般的に使う仕様としては少々使いにくい面があった。
Windows Terminalでは、「JSON-Schema」と呼ばれる仕様に準拠することにより、この使いにくさをカバーしている。拡張子は「.json」なのだが、このJSON-Schemaに対応したエディタ(Microsoftの「Visual Studio Code」など)があれば、キーワードの補完などの機能が利用できるようになる。もちろん、単なるUTF-8のテキストファイルとしてメモ帳でも編集は可能だ。
なお、JSONは、改行コードについては何も規定していない(入っていなくても文法上構わない)ため、編集するエディタの都合でWindows OS標準の「CR+LF」になってしまってもいい。ただし、Windows Terminalが最初に保存するJSONファイルの行末コードは「LF」のみである。
Windows Terminalのタブの右側にある[v]アイコンをクリックしてドロップダウンメニューを開いて[設定]を選択するか、[Ctrl]+[,(カンマ)]キーを押すと、Windows 10で「.json」ファイルに関連付けられたエディタが起動する(関連付けられたエディタがない場合は、「メモ帳」アプリ)。このとき編集状態になるファイルが「settings.json」で、以下のフォルダに保存されている。
%UserProfile%\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState
このファイルを編集して保存することでWindows Terminalの設定変更が行える。なお、記述にエラーがあった場合には、Windows Terminal側にそのエラーの表示が出る。
また、settings.jsonに記述できるキーワードなどについては、Microsoft Docs「Windows Terminal Global Settings」[英語]などを参照してほしい。
設定は、変更ができないデフォルト値とsettings.jsonによる上書き設定の大きく2種類ある。デフォルト値は、Windows Terminalのプログラムにハードコードされているため、ユーザーが変更することはできない。
しかし、参照することは可能で、[v]アイコンをクリックして、ドロップダウンメニューを開き、[Alt]キーを押しながら「設定」をクリックする(現時点ではキーボードショートカットでは呼び出せない)。このとき、エディタで開かれるのが「defaults.json」というファイルだ。このファイルを書き換えて保存してもWindows Terminalは読み込まないので注意が必要だ。設定の変更は、全てsettings.json側で行う。default.jsonにある記述と異なる記述を行ってもsettings.jsonの記述のみが有効になるので問題ない。
この「defaults.json」には、Windows Terminalの全ての設定がある。後述するキーボードショートカットのデフォルト割り当てなどを確認するには、この「defaults.json」ファイルで行う。
「settings.json」には、起動するプログラムをプロファイルとして定義する。Windows Terminalでは、「settings.json」に登録したプロファイルをメニューから選択し、キーボードショートカットに割り当てて起動することが可能な他、後述するコマンドラインオプションで指定して起動することもできる。また、この他にも、Windows Terminalの動作を指定する記述を「settings.json」で行うことが可能だ。
{
// Make changes here to the cmd.exe profile
// プロファイル名は"CMD Test"
"name": "CMD Test",
// cmd.exeを起動
"commandline": "cmd.exe",
// フォントはMS明朝
"fontFace": "MS 明朝",
// 起動時のディレクトリはC:\
"startingDirectory": "c:\\",
// フォントサイズは18(ポイント)
"fontSize": 18,
// 背景を半透明(Acrylic)で表示
"useAcrylic": true,
// 文字色は白(#FFFFFF)
"foreground": "#FFFFFF",
// 背景の不透明度は0.7
"acrylicOpacity": 0.7,
// 背景色は、暗い緑(#007F00)
"background": "#007F00",
// 背景用イメージファイルのパス
"backgroundImage": "c:\\temp\\00-WindowsTerminal\\cmdr.png",
// 背景イメージファイルの不透明度は0.5
"backgroundImageOpacity": 0.5,
// プロファイルはメニューに表示
"hidden": false
},
Windows Terminalは原則、キーボードショートカットで操作することになる。Windows Terminal内で動かしているシェルプログラムやコンソールアプリケーションもキー操作が前提なので、これについての違和感はないだろう。Windows Terminal v1.0は、下表のキーボードショートカットをデフォルトとして持っている。
動作 | キー |
---|---|
Windows Terminalウィンドウを閉じる | [Alt]+[F4] |
フルスクリーンモードのオンオフ | [Alt]+[Enter] |
フルスクリーンモードのオンオフ | [F[1][1]] |
メニューを開く | [Ctrl]+[Shift]+[Space] |
設定を開く | [Ctrl]+[,(カンマ)] |
端末バッファー内の検索 | [Ctrl]+[Shift]+[F] |
単一行のコピー | [Ctrl]+[Shift]+[C] |
単一行のコピー | [Ctrl]+[Insert] |
貼り付け | [Ctrl]+[Shift]+[V] |
貼り付け | [Shift]+[Insert] |
コピー(settings.jsonで定義) | [Ctrl]+[C] |
貼り付け(settings.jsonで定義) | [Ctrl]+[V] |
ペインを閉じる | [Ctrl]+[Shift]+[W] |
水平ペイン分割してデフォルトプロファイルを開く | [Alt]+[Shift]+[-(マイナス)] |
垂直ペイン分割してデフォルトプロファイルを開く | [Alt]+[Shift]+[+(プラス)] |
カーソルのあるペインを下に拡大 | [Alt]+[Shift]+[↓] |
カーソルのあるペインを左に拡大 | [Alt]+[Shift]+[←] |
カーソルのあるペインを右に拡大 | [Alt]+[Shift]+[→] |
カーソルのあるペインを上に拡大 | [Alt]+[Shift]+[↑] |
下のペインに移動 | [Alt]+[↓] |
左のペインに移動 | [Alt]+[←] |
右のペインに移動 | [Alt]+[→] |
上のペインに移動 | [Alt]+[↑] |
ペインを自動分割で開く(settings.jsonで定義) | [Alt]+[Shift]+[D] |
1行スクロールダウン | [Ctrl]+[Shift]+[↓] |
1ページスクロールダウン | [Ctrl]+[Shift]+[PgDn] |
1行スクロールアップ | [Ctrl]+[Shift]+[↑] |
1ページスクロールアップ | [Ctrl]+[Shift]+[PgUp] |
デフォルトプロファイルで新規タブを開く | [Ctrl]+[Shift]+[T] |
プロファイル1で新規タブ | [Ctrl]+[Shift]+[1] |
プロファイル2で新規タブ | [Ctrl]+[Shift]+[2] |
プロファイル3で新規タブ | [Ctrl]+[Shift]+[3] |
プロファイル4で新規タブ | [Ctrl]+[Shift]+[4] |
プロファイル5で新規タブ | [Ctrl]+[Shift]+[5] |
プロファイル6で新規タブ | [Ctrl]+[Shift]+[6] |
プロファイル7で新規タブ | [Ctrl]+[Shift]+[7] |
プロファイル8で新規タブ | [Ctrl]+[Shift]+[8] |
プロファイル9で新規タブ | [Ctrl]+[Shift]+[9] |
現在と同じプロファイルで新規タブを開く | [Ctrl]+[Shift]+[D] |
次のタブに移動 | [Ctrl]+[Tab] |
前のタブに移動 | [Ctrl]+[Shift]+[Tab] |
先頭のタブに移動 | [Ctrl]+[Alt]+[1] |
2番目のタブに移動 | [Ctrl]+[Alt]+[2] |
3番目のタブに移動 | [Ctrl]+[Alt]+[3] |
4番目のタブに移動 | [Ctrl]+[Alt]+[4] |
5番目のタブに移動 | [Ctrl]+[Alt]+[5] |
6番目のタブに移動 | [Ctrl]+[Alt]+[6] |
7番目のタブに移動 | [Ctrl]+[Alt]+[7] |
8番目のタブに移動 | [Ctrl]+[Alt]+[8] |
9番目のタブに移動 | [Ctrl]+[Alt]+[9] |
フォントサイズを拡大 | [Ctrl]+[=(イコール)] |
フォントサイズを拡大縮小 | [Ctrl]+[-(マイナス)] |
フォントサイズをデフォルトに戻す | [Ctrl]+[0] |
Windows Terminalのキーボードショートカット |
現在のところWindows Terminalにはオンラインヘルプ機能はなく、キー割り当てを知るためには、前述のdefaults.jsonファイルを見る必要がある。前述のsettings.jsonファイルで全ての割り当てを変更することが可能だが、シェルプログラムやコンソールアプリケーションでの利用を想定して、デフォルトでは、[Ctrl]+英字のキーへの割り当ては控えられている(例外は、クリップボード用の[Ctrl]+[C]キーと[Ctrl]+[V]キー。defaults.jsonでは定義されておらず、settings.json側で定義されている)。
具体的には、キーボード割り当ては、以下のリストのような感じで、キーストロークと実行するWindows Terminalの機能を組み合わせて定義する。一部の機能は、引数で動作を変えることも可能だ。このWindows Terminalの機能については、Microsoft Docs「Windows Terminal Key Bindings」[英語]にドキュメントがある。
// Ctrl+VにWindows Terminalの機能"paste"(クリップボード貼り付け)を割り当て
{ "command": "paste", "keys": "ctrl+v" },
// Ctrl+CにWindows Terminalの機能"copy"(クリップボードコピー)を割り当て
//copyは、改行を含むことができる("singleLine": false)
{ "command": {"action": "copy", "singleLine": false }, "keys": "ctrl+c" },
キーボードショートカットは、「Windows Terminal自体の操作」「クリップボード」「ペイン」「スクロール」「タブ」「表示」の大きく6種に分類できる。取りあえずは、バッファー内の検索機能である[Ctrl]+[Shift]+[F]キー、ペイン自動分割の[Alt]+[Shift]+[D]キーなどを覚えておけばいいだろう。
なお、今後、キーボードのカスタマイズなどを行うときに、割り当て済みのキーボードショートカットを判断しやすいように、キーストローク順の一覧を下表に示しておく。利用しているコンソールアプリケーションなどとの衝突を回避する場合などに利用してほしい。
キー | 動作 |
---|---|
[Alt]+[Ctrl]+[1] | 先頭のタブに移動 |
[Alt]+[Ctrl]+[2] | 2番目のタブに移動 |
[Alt]+[Ctrl]+[3] | 3番目のタブに移動 |
[Alt]+[Ctrl]+[4] | 4番目のタブに移動 |
[Alt]+[Ctrl]+[5] | 5番目のタブに移動 |
[Alt]+[Ctrl]+[6] | 6番目のタブに移動 |
[Alt]+[Ctrl]+[7] | 7番目のタブに移動 |
[Alt]+[Ctrl]+[8] | 8番目のタブに移動 |
[Alt]+[Ctrl]+[9] | 9番目のタブに移動 |
[Alt]+[↓] | 下のペインに移動 |
[Alt]+[Enter] | フルスクリーンモードのオンオフ |
[Alt]+[F4] | Windows Terminalウィンドウを閉じる(Windows標準) |
[Alt]+[←] | 左のペインに移動 |
[Alt]+[→] | 右のペインに移動 |
[Alt]+[Shift]+[-(マイナス)] | 水平ペイン分割してデフォルトプロファイルを開く |
[Alt]+[Shift]+[D] | ペインを自動分割で開く(settings.jsonで定義) |
[Alt]+[Shift]+[↓] | カーソルのあるペインを下に拡大 |
[Alt]+[Shift]+[←] | カーソルのあるペインを左に拡大 |
[Alt]+[Shift]+[+(プラス)] | 垂直ペイン分割してデフォルトプロファイルを開く |
[Alt]+[Shift]+[→] | カーソルのあるペインを右に拡大 |
[Alt]+[Shift]+[↑] | カーソルのあるペインを上に拡大 |
[Alt]+[↑] | 上のペインに移動 |
[Ctrl]+[-(マイナス)] | フォントサイズを拡大縮小 |
[Ctrl]+[,(カンマ)] | 設定を開く |
[Ctrl]+[=(イコール)] | フォントサイズを拡大 |
[Ctrl]+[0] | フォントサイズをデフォルトに戻す |
[Ctrl]+[C] | コピー(settings.jsonで定義) |
[Ctrl]+[V] | 貼り付け(settings.jsonで定義) |
[Ctrl]+[Insert] | 単一行のコピー |
[Ctrl]+[Shift]+[1] | プロファイル1で新規タブ |
[Ctrl]+[Shift]+[2] | プロファイル2で新規タブ |
[Ctrl]+[Shift]+[3] | プロファイル3で新規タブ |
[Ctrl]+[Shift]+[4] | プロファイル4で新規タブ |
[Ctrl]+[Shift]+[5] | プロファイル5で新規タブ |
[Ctrl]+[Shift]+[6] | プロファイル6で新規タブ |
[Ctrl]+[Shift]+[7] | プロファイル7で新規タブ |
[Ctrl]+[Shift]+[8] | プロファイル8で新規タブ |
[Ctrl]+[Shift]+[9] | プロファイル9で新規タブ |
[Ctrl]+[Shift]+[C] | 単一行のコピー |
[Ctrl]+[Shift]+[D] | 現在と同じプロファイルで新規タブを開く |
[Ctrl]+[Shift]+[↓] | 1行スクロールダウン |
[Ctrl]+[Shift]+[F] | 端末バッファー内の検索 |
[Ctrl]+[Shift]+[PgDn] | 1ページスクロールダウン |
[Ctrl]+[Shift]+[PgUp] | 1ページスクロールアップ |
[Ctrl]+[Shift]+[Space] | メニューを開く |
[Ctrl]+[Shift]+[T] | デフォルトプロファイルで新規タブを開く |
[Ctrl]+[Shift]+[Tab] | 前のタブに移動 |
[Ctrl]+[Shift]+[↑] | 1行スクロールアップ |
[Ctrl]+[Shift]+[V] | 貼り付け |
[Ctrl]+[Shift]+[W] | ペインを閉じる |
[Ctrl]+[Tab] | 次のタブに移動 |
[F11] | フルスクリーンモードのオンオフ |
[Shift]+[Insert] | 貼り付け |
割り当て済みのキーボードショートカット |
Windows Terminalは、UWPアプリケーションだがアプリ実行エイリアスが定義されているため、「wt.exe」で起動することができ、このとき、起動オプションで、タブやペインの表示、利用するプロファイルの指定などが可能だ。
起動オプションは大きく4つに分類できる。1つは、コマンドラインのヘルプ機能(「--help」「-h」「-?」「/?」)である。ヘルプは、後述するサブコマンドを続けて書くことでサブコマンドのヘルプを表示できる。
サブコマンドは、「new-tab」「split-pane」「focus-tab」の3つがあり、それぞれ「新規タブ作成」「ペイン分割」「タブ選択」の機能を持つ。コマンドラインを指定することで、例えばcmd.exeとPowerShellをタブで起動するショートカットや、最初から左右2つのペインに分割されたPowerShellのタブを開くタイルなどを作成できる。
意味 | サブコマンド | 引数指定 | 引数の解説 | |
---|---|---|---|---|
オンラインヘルプ | --help、-h、-?、/? [サブコマンド] | [サブコマンド]で該当のヘルプを表示 | ||
新規タブ | new-tab | --profile、-p <プロファイル名> | プロファイルを名前、GUIDで指定 | |
--startingDirectory,-d <フォルダ名> | 開始フォルダを指定 | |||
コマンドライン | 起動コマンド(シェル)を指定 | |||
タブを選択 | focus-tab | --target、-t <タブ番号> | 番号で指定したタブを選択(排他) | |
--next、-n | 次(右側)のタブを選択(排他) | |||
--previous、-p | 前(左側)のタブを選択(排他) | |||
新規ペイン(ペイン分割) | split-pane | -H または -V | 水平(-H)、垂直(-V)分割。指定なしはauto | |
--profile、-p <プロファイル名> | プロファイルを名前、GUIDで指定 | |||
--startingDirectory,-d <フォルダ名> | 開始フォルダを指定 | |||
コマンドライン | 起動コマンド(シェル)を指定 | |||
サブコマンドの一覧 |
このあたり、必要な人は必要だが、コマンドラインはサッパリという人も少なくないので、起動オプションがあるいうことに話をとどめ、簡単なサンプルを挙げておくにとどめる。また、起動オプションの公式ドキュメントは、Microsoft Docs「Windows Terminal Command Line Arguments」[英語]にある。
Windows Terminalには、Cascadia Codeと呼ばれる等幅フォントが付属する。これは、コンソールでの利用を想定したフォントで、プログラミングリガチャーと呼ばれる表示に対応している(Cascadia Codeについては、Windows 10 The Latest「【Windows Terminal開発動向】Cascadia codeフォント搭載とJSONスキーマ対応の意味とメリット」参照のこと)。
プログラミングリガチャーとは多くのプログラム言語で使われる記号文字の組み合わせを分かりやすくするように合字で表示する機能だ。例えば、C言語などで等しくないという意味を持つ「!=」という記号を「≠」と表示できる。現在のWindows Terminalには、このCascadia Codeとそのバリエーション版が含まれており、Microsoft Storeからインストールすると、このフォントもインストールされ、Windows Terminalの標準表示フォントになる。
この他、設定で背景を半透明にする、ビットマップやGIF画像を背景に表示するといった機能もある。また、Windows Terminal(やconhost.exeも)で標準となるVT100エスケープシーケンスでは、文字に16色、背景色に8色を指定できるが、設定で、どの16色を使うか、いわゆるカラーパレットを指定できる。これはColor Schemaと呼ばれており、16色の他に標準の文字色や選択時の反転を示す色などをまとめて定義して名前を付け、これを指定することで利用する色のセットを切り替えることも可能だ。
Windows Terminalは、コンソールプログラムではあるが、実用一辺倒というわけでもなく、カスタマイズの余地は大きく、ちょっとした遊びもある。
Windows Terminalは、v1.0となり、一応の完成を見たが、開発はこれで終了というわけではなく、今後もバージョンアップが行われる予定だ。最終版で使ってみたが、フォントをデフォルトから「MS明朝」などに置き換えると、そこそこちゃんとした表示になる。正式版になったということなので、コマンドラインの利用頻度が高いなら導入してもいいだろう。
Copyright© Digital Advantage Corp. All Rights Reserved.