おれさまラボの実験ノート

実際に手を動かして理解を深めるブログ。

Windows Terminal (Preview) を試してみる

はじめに

Windows Terminal とは、2019年5月に行われた Microsoft Build 2019 でマイクロソフトが発表したオープンソースのターミナルソフトウェアです。Windows のターミナル機能( Powershellコマンドプロンプト、WSL )をひとつのインターフェースに統合できます。現在は v0.9 が公開したところで正式リリースはもう少し先です。とはいえ、搭載予定の機能はすべて実装された状態なのでいろいろ試してみました。

www.publickey1.jp

環境

Windows Terminal は v0.9 を使用して検証しました。

インストール手順

オープンソースなので、ソースコードGitHub で公開されています。

github.com

GitHub ページの README ファイルに 'Installing and runninng windows Terminal' という項目があります。ここに Microsoft Store へのリンクが記載されているのでリンクを押下します。

Microsoft Store の言語設定に関するポップアップが出た場合は 日本 - 日本語 に移動 を選択してください。

Microsoft Store の該当ページに飛ばされるので 入手 ボタンを押下します。

Microsoft Store の起動確認に関するポップアップが出た場合、Microsoft Store を開く を押下します。

Microsoft Store アプリが起動するので、入手 ボタンを押下します。

ダウンロードが終わると上部に 起動 ボタンが起動するので押下します。

無事、Windows Terminal を起動することができました。

使ってみる

基本的な使い方をみていきます。

タブ補完

フォルダパスはいい感じに補完されます。これは Powershell の機能と思いますが、Bash などとの垣根がなくて助かりますね。 `\C:` を入力するのは億劫なのでありがたい。

新しいタブ

ボタンを押すと新しいタブが開きます。素晴らしい。ただ、基本的に新しいタブは Powershell となります。

違うターミナル環境を開きたい場合は、 ボタンの横のプルダウンメニューを開くと使用できるターミナルがズラッとでてきます。

ここでは Powershellコマンドプロンプト、 WSL としてインストールされているUbuntuUbuntu-18.04 、Azure Cloud Shell が表示されています。後述する設定ファイルでターミナルを変更したり追加したりできそうです。

なお、新規タブを開いたときに Powershell 以外を表示したい場合も、設定で変更可能です。詳細は後述します。

絵文字の入力

ターミナル入力上では ?? と表示されてしまいますが、コマンド実行結果には絵文字が表示されました。

ちなみに通常の Powershell を起動して絵文字を含んだコマンドを実行しても絵文字は表示されません。

文字サイズの変更

設定からでも変更可能ですが、Ctrl キーを押しながらマウスホイールをグリグリすることでリサイズすることができます。また、Ctrl + 0 を押下するとデフォルトサイズに戻ります。

注)背景画像の変更方法は後述します。

なお、マウスホイールで変更したサイズは、設定に書き込まれるわけではないので再起動等するともとの文字サイズに戻ります。

画面分割

Windows Terminal には tmux のような画面分割機能がついています。

[Alt] + [Shift] + [+] で横に分割、 [Alt] + [Shift] + [-] で上下に分割されます。

分割した画面を閉じたい場合は、該当のターミナルで exit コマンドを打てばその画面だけ閉じます。

設定

将来的にどうなるかわかりませんが、現時点では設定用の GUI は用意されておらず、JSON ファイルを直接編集する必要があります。

設定変更方法については、GitHub に詳しく書いてあるのでここで紹介する以外の設定もぜひ見てみてください。

github.com

以下、v0.9 のデフォルト設定を記載しておきます。

// To view the default settings, hold "alt" while clicking on the "Settings" button.
// For documentation on these settings, see: https://aka.ms/terminal-documentation

{
    "$schema": "https://aka.ms/terminal-profiles-schema",

    "defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",

    "profiles":
    {
        "defaults":
        {
            // Put settings here that you want to apply to all profiles
        },
        "list":
        [
            {
                // Make changes here to the powershell.exe profile
                "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
                "name": "Windows PowerShell",
                "commandline": "powershell.exe",
                "hidden": false
            },
            {
                // Make changes here to the cmd.exe profile
                "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
                "name": "cmd",
                "commandline": "cmd.exe",
                "hidden": false
            },
            {
                "guid": "{2c4de342-38b7-51cf-b940-2309a097f518}",
                "hidden": false,
                "name": "Ubuntu",
                "source": "Windows.Terminal.Wsl"
            },
            {
                "guid": "{c6eaf9f4-32a7-5fdc-b5cf-066e8a4b1e40}",
                "hidden": false,
                "name": "Ubuntu-18.04",
                "source": "Windows.Terminal.Wsl"
            },
            {
                "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
                "hidden": false,
                "name": "Azure Cloud Shell",
                "source": "Windows.Terminal.Azure"
            }
        ]
    },

    // Add custom color schemes to this array
    "schemes": [],

    // Add any keybinding overrides to this array.
    // To unbind a default keybinding, set the command to "unbound"
    "keybindings": []
}

設定変更

いくつか設定変更を試してみます。

変更方法

プルダウンメニューから Setting を選択するかキーボードで Ctrl + , を押下してください。JSON ファイルが開くので編集し、上書き保存します。

JSON ファイルを保存した瞬間に Windows Terminal の方もリロードされます。

リロードされなかった場合は、Windows Terminal アプリを再起動してください。

設定ミスをした場合

設定が間違っていた場合はエラー画面が表示されます。JSONファイルをいじっていると , など忘れがちなのでご注意ください。

エラーは割と詳細に何が悪いか教えてくれるようで、カラースキームの設定をミスった時には以下のエラーが表示されました。

背景画像の変更

Powershell の背景を画像ファイルに変更するには backgroundImagebackgroundImageOpacitybackgroundImageStrechMode を追記します。

backgroundImage のファイルパスはエスケープ(見た目はバックスラッシュ2本 \\)にするのをお忘れなく。

例えば Powershell の背景を変える場合は Powershell のプロファイルに背景に関する設定を追記します。

{
    // Make changes here to the powershell.exe profile
    "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
    "name": "Windows PowerShell",
    "commandline": "powershell.exe",
    "hidden": false,
    "backgroundImage": "C:\\Users\\skksky\\Pictures\\wallpaper\\kabigon.jpg",
    "backgroundImageOpacity": 0.75,
    "backgroundImageStrechMode": "fill"
},

背景が設定できました。かわいいですね。

デフォルトプロファイル

JSON ファイルの中に defaultProfile というセクションがあります。ここで、Windows Terminal 起動時や新規タブを開いたときに起動するターミナルの種類を指定できます。

デフォルトでは Powershell の uid が指定されています。

"defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",

たとえばこれを WSL の uid に書き換えてあげると Powershell ではなく WSL が起動するようになります。

"defaultProfile": "{2c4de342-38b7-51cf-b940-2309a097f518}",

配色の設定

JSON ファイルの schemes セクションに自分で配色を追加する必要があります。

// Add custom color schemes to this array
"schemes": [],

以下サイトが参考になるので、変更したい方は見てみてください。

dev.classmethod.jp

キーバインドの設定

JSON ファイルの最下部に keybindings というセクションがあります。ここに、好みのキーバインド(ショートカットキー)を登録することができます。

以下は、新しいタブを開くときに [Ctrl] + [t]を使うという指定の例です。

"keybindings": [
    { "command":"newTab", "keys": ["Ctrl+t"]}
]

あとはコピペも登録しておくと便利そうなので追記するとこんな感じになります。

"keybindings": [
    { "command":"newTab", "keys": ["Ctrl+t"]},
    { "command": "copy", "keys": ["ctrl+shift+c"] },
    { "command": "paste", "keys": ["ctrl+shift+v"] }
]

ちなみに、[Ctrl] + [c] を登録してしまうとエスケープシーケンスを送ることになってしまうのでご注意ください。

👉 Note: If you set your copy keybinding to "ctrl+c", you'll only be able to send an interrupt to the commandline application using Ctrl+C when there's no text selection. Additionally, if you set paste to "ctrl+v", commandline applications won't be able to read a ctrl+v from the input. For these reasons, we suggest "ctrl+shift+c" and "ctrl+shift+v"

参考:https://github.com/microsoft/terminal/blob/master/doc/user-docs/UsingJsonSettings.md

ホームディレクトリの設定

JSON ファイルの各ターミナルのプロファイルに startingDirectory を設定するとホームディレクトリを指定することができます。

以下は WSL のプロファイルに追記してみた例です。

{
    "guid": "{c6eaf9f4-32a7-5fdc-b5cf-066e8a4b1e40}",
    "hidden": false,
    "name": "Ubuntu-18.04",
    "source": "Windows.Terminal.Wsl",
    "backgroundImage": "C:\\Users\\skksky\\Pictures\\wallpaper\\kabigon.jpg",
    "backgroundImageOpacity": 0.75,
    "backgroundImageStrechMode": "fill",
    "startingDirectory" : "//wsl$/Ubuntu-18.04/tmp"
},

おわりに

Windows OS 環境では PuTTY や Tera Term 、 Pedorosa などが親しまれてきたので、いまのままではまだまだ乗り換えるには値しないかなぁといった感じです。ただ、WSL や Powershellコマンドプロンプトをひとつのソフトウェアで扱えるのは便利ですね。

Windows OS としての決定版になることを期待しています!

以上

追記(2020/03/01)

現時点での設定ファイルをメモしておく。

// To view the default settings, hold "alt" while clicking on the "Settings" button.
// For documentation on these settings, see: https://aka.ms/terminal-documentation

{
    "$schema": "https://aka.ms/terminal-profiles-schema",

    "defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",

    "profiles":
    {
        "defaults":
        {
            // Put settings here that you want to apply to all profiles
        },
        "list":
        [
            {
                // Make changes here to the powershell.exe profile
                "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
                "name": "Windows PowerShell",
                "commandline": "powershell.exe",
                "hidden": false,
        "backgroundImage": "C:\\Users\\skksky\\Pictures\\wallpaper\\kabigon.jpg",
        "backgroundImageOpacity": 0.75,
        "backgroundImageStrechMode": "fill"
            },
            {
                // Make changes here to the cmd.exe profile
                "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
                "name": "cmd",
                "commandline": "cmd.exe",
                "hidden": false,
        "backgroundImage": "C:\\Users\\skksky\\Pictures\\wallpaper\\kabigon.jpg",
        "backgroundImageOpacity": 0.75,
        "backgroundImageStrechMode": "fill"
            },
            {
                "guid": "{2c4de342-38b7-51cf-b940-2309a097f518}",
                "hidden": false,
                "name": "Ubuntu",
                "source": "Windows.Terminal.Wsl",
        "backgroundImage": "C:\\Users\\skksky\\Pictures\\wallpaper\\kabigon.jpg",
        "backgroundImageOpacity": 0.75,
        "backgroundImageStrechMode": "fill"
            },
            {
                "guid": "{c6eaf9f4-32a7-5fdc-b5cf-066e8a4b1e40}",
                "hidden": false,
                "name": "Ubuntu-18.04",
                "source": "Windows.Terminal.Wsl",
        "backgroundImage": "C:\\Users\\skksky\\Pictures\\wallpaper\\kabigon.jpg",
        "backgroundImageOpacity": 0.75,
        "backgroundImageStrechMode": "fill",
        "startingDirectory" : "//wsl$/Ubuntu-18.04/home/skksky",
        "colorScheme": "Solarized"
            },
            {
                "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
                "hidden": false,
                "name": "Azure Cloud Shell",
                "source": "Windows.Terminal.Azure",
        "backgroundImage": "C:\\Users\\skksky\\Pictures\\wallpaper\\kabigon.jpg",
        "backgroundImageOpacity": 0.75,
        "backgroundImageStrechMode": "fill"
            }
        ]
    },

    // Add custom color schemes to this array
    "schemes": [],

    // Add any keybinding overrides to this array.
    // To unbind a default keybinding, set the command to "unbound"
    "keybindings": [
    { "command":"newTab", "keys": ["Ctrl+t"]},
    { "command": "copy", "keys": ["ctrl+shift+c"] },
    { "command": "paste", "keys": ["ctrl+shift+v"] }
    ]

}