Windows Terminalで理想のターミナル環境が出来てしまった

6 min read読了の目安(約6200字

動機

普段WSL2のターミナルやTeratermのターミナルを使っており、環境を整備するより動かすことを優先し色々な不満を我慢していたのですが、この度限界を迎え整備することにしました。
調べているうちにWindows Terminalに行き着きました。

本記事は、主にWindowsを使って開発している方に向けたものです。また、同じことを実現する代替手段について調べきることなく書いています。

やりたいこと

これまで私が抱えていた不満と、やれば出来そうだけど…という要件一覧がこちら。

  • 表示文字サイズ・フォント変更が面倒(マクロを作れば出来そう)
  • WSLデフォルトの背景色ではパス表示が見づらい(.bashrcをいじれば出来そう)
  • WSLのターミナルを分割する(tmuxで出来そう)
  • 同じターミナルアプリ内でWSLとリモートログインするホストを並行して扱う(これもtmuxで出来そう)
  • Unicode・UTF-8表示で遊べない
  • 以上の操作を【マウス操作無し】で行いたい

大概調べれば出来そうだと思うものの、面倒に思っていました。
環境を汚しそう/移植を考えるのが面倒と二の足を踏んでいたのですが、
Windows Terminalであっさり解決出来て結構感動したので勢いそのままに記事にした次第です。

Windows Terminalの準備

インストール

アプリが取得出来ていない場合、Windows Storeよりアプリを取得します。

https://www.microsoft.com/ja-jp/p/windows-terminal/9n0dx20hk701

アプリの起動は、Store画面またはファイル名を指定して実行より「wt.exe」で起動出来ます。

基本的な動作

Windows Terminalはカスタマイズせずとも、色々な操作がデフォルトで行えます。
代表的な操作を表にまとめました。

操作 コマンド・ショートカット 備考
ターミナル起動 wt.exe 起動時に開くターミナルはdefaultProfileで変更可能(後述)
設定ファイルを開く Ctrl + , OSの規定アプリにてsetting.jsonを開く
新しいタブを開く Ctrl + Shift + T
タブの水平分割(新規作成) Shift + Alt + "-"
タブの垂直分割(新規作成) Shift + Alt + "+"
分割したタブの移動 Alt + 矢印キー
全画面表示/元画面サイズ表示 Alt + Enter
コマンドパレットを開く Ctrl + Shift + P

ショートカットに割り当てるキーは、後述するアクション部分でカスタマイズ可能です。

設定について

設定項目は全てsettings.jsonに記載します。

設定箇所 概要
グローバル設定 ウインドウ自体の設定。ルートに記載。
プロファイル設定 ターミナルの設定。"profiles"ブロックの下に記載。
カラースキーム設定 配色の設定。"schemes"ブロックの下に記載。(本記事では省略)
アクション設定 ショートカットの設定。"actions"ブロックの下に記載。

公式のドキュメントが割と読みやすく、かつイメージ付きで整備されているため、必要なものまで探し求めるのはそこまで難しくありません。

今後も適時更新が見込まれるアプリのため、何か設定を調べる場合は公式ドキュメントを当たってみましょう。

https://docs.microsoft.com/ja-jp/windows/terminal/

Windows Terminalの設定ファイルはjson形式で管理されており、アプリを開いた状態で「Ctrl + ,」で開くことが出来ます。(OSで規定の開き方でsettings.jsonを開く)

グローバル設定

デフォルトでWSLのターミナルを開く

デフォルトではPowerShellを開く設定になっていますが、これはdefaultProfile項目の値で制御出来ます。

https://docs.microsoft.com/ja-jp/windows/terminal/customize-settings/global-settings

settings.jsonのprofiles内にprofileのlistがあり、WSLに対応するguidを設定するとデフォルトでWSLターミナルを開くようになります。

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

プロファイル設定

共通設定(背景色・フォント設定)

背景色・フォント設定はここで行います。
json形式なので、最後の項目のカンマの外し忘れに注意して下さい。

 "profiles":
        {
                "defaults":
                {
                        // [[background color]]
                        "background":"#222222",

                        // [[font]]
                        "fontSize":14,
                        "fontFace":"Myrica M"
                },

https://docs.microsoft.com/ja-jp/windows/terminal/customize-settings/profile-settings#color-settings
https://docs.microsoft.com/ja-jp/windows/terminal/customize-settings/profile-settings#text-settings

jsonを更新したら保存し、Windows Terminalへ変更が反映されていることを確認しましょう。

list設定(接続先追加)

list内にローカルのターミナルが表示されますが、接続先を増やすことが出来ます。
設定前に、コマンドプロンプトでsshと入力してコマンドが使える状態であることを確認しておきましょう。使えない場合、コマンドのインストールやパス設定が必要です。

 "list":
                [
                        {
                                // Make changes here to the powershell.exe profile.
                                "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
                                "name": "Windows PowerShell",
                                "commandline": "powershell.exe",
                                "hidden": false
                        },
                        {
			       (中略)
                        },
                        {
				"name":"VPS",
                                "commandline": "ssh username@serverURL",
                                "icon": "C:\\Path\\to\\icon",
                                "hidden": false
                        },
			{
				"name":"VPS2",
                                "commandline": "ssh -i C:\\Path\\to\\SSH\\Certificate username@serverURL",
                                "icon": "C:\\Path\\to\\icon",
                                "hidden": false
                        },
                ],

iconでは、Windows Terminal上で表示するアイコン画像を定義します。
また、commandlineでSSH接続のコマンドを定義します。

私は証明書認証をするために-iオプションで証明書のパスの指定をしたのですが、アクセス権の範囲が広すぎてエラーになる場合があります。
Linux環境ではエラーメッセージに従いchmodを行うのですが、Windows環境ではそれに相当するアクセス制御リストの設定を行いましょう。

https://docs.microsoft.com/ja-jp/windows/terminal/customize-settings/profile-settings#dropdown-settings

参考(証明書のアクセス制御リスト設定)

アクション設定(ショートカット設定)

本記事ではカスタマイズを最小限に留めたいのですが、個人的にどうしても必要な設定を2つ記載します。

paste(貼り付け:ctrl+shift+v)

vimには矩形選択を行うショートカットctrl+vがあるのですが、Windows Terminalのデフォルト設定だとテキスト貼り付けで上書きされてしまいます。
このため、ターミナルに対する貼り付けについてはShiftを加えたctrl+shift+vに修正します。

openNewTabDropdown(新規タブのメニュー:ctrl+Enter)

下記画像のタブメニューの+ボタンを押すとdefaultProfileで定義したターミナルが新しいタブに開かれるのですが、違う接続先を開きたい場合は図の赤枠の部分を選択します。

便利でよく使うのですが、マウス操作をしたくないがためにコマンド呼出を行います。
コマンドパレット(Ctrl + Shift + P)を呼び出し、openNewと入れて出てくるメニューでEnterを押すと、マウス押下時と同じ操作に相当します。

私の環境では、動いているAutoHotKey辺りが邪魔しているせいか、Ctrl + Shift + Enterが上手く動作しませんでした。また、仮に動いたとしても2キーで割り当てたいためCtrl+Enterで動くように設定しました。

        "actions":
        [
                { "command": "paste", "keys": "ctrl+shift+v" },
                (略)
                { "command": { "action": "openNewTabDropdown"}, "keys": "ctrl+enter" }
        ]

その他の設定

その他、設定して便利だった項目をピックアップしました。

copyOnSelect

カーソルで選択するだけでコピー

https://docs.microsoft.com/ja-jp/windows/terminal/customize-settings/global-settings#selection-settings

useAcrylic / acrylicOpacity

背景を透明にする

https://docs.microsoft.com/ja-jp/windows/terminal/customize-settings/profile-settings#acrylic-settings

cursorShape

カーソルのカスタマイズ

https://docs.microsoft.com/ja-jp/windows/terminal/customize-settings/profile-settings#cursor-settings

で、どうなったのか

要件 対応方法
表示文字サイズ・フォント変更 jsonにて設定
背景色設定 jsonにて設定(.bashrcの設定不要)
ターミナル分割 デフォルトのショートカットで可能
WSL・リモートログインホストを同時に扱う 接続先追加で対応
Unicode・UTF-8表示で遊べない 遊べる(Unicode・UTF-8対応)
マウス操作無しでの操作 jsonにて設定(openNewTabDropdownを割り当て)

全部出来た!!

ろくに調べていなかったというのもありますが、WSLのターミナルでの不満について長らく目を瞑っていました。そしたら気づいたらデフォルトでも使いやすく、カスタマイズも便利なターミナルアプリが公式から出ているではありませんか。

使い方を知って半日程度で、(今のところ)理想的な環境が出来上がるとは思ってもいませんでした。
枯れた技術に安定を求めるだけでなく、新機能のリリースもある程度追わないといけないですね。。