Windows TerminalでWSLとGit Bashのターミナルを統合してみた(+ 設定項目簡易まとめ)

Windows で複数のターミナルを立ち上げていると、散らかったり、切り替えが手間だったりしますよね。
これらを統合するべく、Windows Terminal を使ってみました。

Windows Terminal とは? #

Microsoft が提供している Windows 向けのターミナルアプリケーションです。
コマンドラインインターフェイスを持つ任意のアプリケーションを、この Windows Terminal 内で実行できます。

つまり、これまではターミナルごとに別々で立ち上げていたのが、Windows Terminal で一元管理できるようになります。
それぞれのターミナルウィンドウを探す手間も省けて楽です。

Windows Terminalのウィンドウ

ターミナルそれぞれでテーマや配色、フォント、背景などの設定が可能です。
そのほか、タブの中でさらにウィンドウ分割したり、ショートカットのキーバインディング設定も行うことができるようになっています。

自分の場合は、主に WSL と Git Bash を使用していたので、今回統合することにしました。
以下、導入・設定手順の備忘録と、おおよそどんな設定ができるのかを書いています。

Windows Terminal をより詳細に知りたい場合は、こちらの Zenn 本で詳しく解説されています。

導入 #

ダウンロード #

Microsft Store で Windows Terminal で検索。

正式リリース版とプレビュー版とあるのでお好みで。
今回、自分は正式リリース版を使用することにしました。
(プレビュー版でしか使えない設定もありますが、プレビュー版はあくまで開発中のものであるため、予期しない動作をする可能性があることに注意です)

「入手」でダウンロード。
Microsoft StoreのWindows Terminal画面

起動 #

起動すると Windows PowerShell タブがデフォルトとして立ち上がります。

他の各種ターミナルを立ち上げるには、タブ右の ∨ から選択します。
Windows Terminalのターミナル(プロファイル)一覧を表示した状態の画面

Git Bash の追加 #

Windows Terminal の初期設定では

  • Windows PowerShell
  • コマンドプロンプト
  • Ubuntu
  • Azore Cloud Shell

しかないので、ここに Git Bash を追加します。

タブ右の ∨から「設定」を選択すると、設定ファイルを開くことができ、初期では以下のような内容になっています。

// This file was initially generated by Windows Terminal 1.3.2651.0
// It should still be usable in newer versions, but newer versions might have additional
// settings, help text, or changes that you will not see unless you clear this file
// and let us generate a new one for you.

// 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}",

  // You can add more global application settings here.
  // To learn more about global settings, visit https://aka.ms/terminal-global-settings

  // If enabled, selections are automatically copied to your clipboard.
  "copyOnSelect": false,

  // If enabled, formatted data is also copied to your clipboard
  "copyFormatting": false,

  // A profile specifies a command to execute paired with information about how it should look and feel.
  // Each one of them will appear in the 'New Tab' dropdown,
  //   and can be invoked from the commandline with `wt.exe -p xxx`
  // To learn more about profiles, visit https://aka.ms/terminal-profile-settings
  "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": "コマンド プロンプト",
        "commandline": "cmd.exe",
        "hidden": false
      },
      {
        "guid": "{2c4de342-38b7-51cf-b940-2309a097f518}",
        "hidden": false,
        "name": "Ubuntu",
        "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.
  // To learn more about color schemes, visit https://aka.ms/terminal-color-schemes
  "schemes": [],

  // Add custom actions and keybindings to this array.
  // To unbind a key combination from your defaults.json, set the command to "unbound".
  // To learn more about actions and keybindings, visit https://aka.ms/terminal-keybindings
  "actions":
  [
    // Copy and paste are bound to Ctrl+Shift+C and Ctrl+Shift+V in your defaults.json.
    // These two lines additionally bind them to Ctrl+C and Ctrl+V.
    // To learn more about selection, visit https://aka.ms/terminal-selection
    { "command": {"action": "copy", "singleLine": false }, "keys": "ctrl+c" },
    { "command": "paste", "keys": "ctrl+v" },

    // Press Ctrl+Shift+F to open the search box
    { "command": "find", "keys": "ctrl+shift+f" },

    // Press Alt+Shift+D to open a new pane.
    // - "split": "auto" makes this pane open in the direction that provides the most surface area.
    // - "splitMode": "duplicate" makes the new pane use the focused pane's profile.
    // To learn more about panes, visit https://aka.ms/terminal-panes
    { "command": { "action": "splitPane", "split": "auto", "splitMode": "duplicate" }, "keys": "alt+shift+d" }
  ]
}

ここに Git Bash の設定を追加することで、Git Bash も使えるようにしていきます。

guid の取得 #

Windows PowerShell 上で以下のコマンドを実行して guid を取得します。
表示された guid は設定の追記で使用するので控えておきましょう。

[guid]::NewGuid()

設定の追記 #

profiles.list の配列に以下を追記(設定値はあくまで例です)
guid は先ほど取得したものに置き換えてください。

{
  "guid" : "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}",
  "acrylicOpacity" : 0.7,
  "commandline" : "C:\\Program Files\\Git\\bin\\bash.exe --login -i",
  "cursorColor" : "#FFFFFF",
  "fontFace" : "consolas",
  "fontSize" : 14,
  "icon" : "C:\\Program Files\\Git\\mingw64\\share\\git\\git-for-windows.ico",
  "name" : "Git Bash",
  "padding" : "0, 0, 0, 0",
  "startingDirectory" : "%USERPROFILE%",
  "useAcrylic" : true
}

それぞれの設定項目の意味としては、こういったものになっています。
(設定については下記も参照)

  • guid:プロファイルを特定するための一意の識別子
  • acrylicOpacity:アクリル背景の不透明度(useAcrylic と合わせて設定)
  • commandline:このプロファイルで使用される実行ファイル(ちなみに今回の場合は、--login -i までつけないと、ファイル・ディレクトリの色がつかない)
  • cursorColor:カーソルの色
  • fontFace:フォントの種類
  • fontSize:フォントの大きさ
  • icon:タブとドロップダウンメニュー表示のアイコン
  • name:ドロップダウンメニューに表示されるプロファイル名
  • padding:ウィンドウ内のテキストの周囲の余白
  • startingDirectory:シェルが読み込まれるときに開始されるディレクトリ位置
  • useAcrylic:ウィンドウ背景に透過性のあるアクリル背景を表示するか

これでターミナルの一覧に Git Bash が追加されていれば OK です。

Windows Terminalのターミナル(プロファイル)一覧にGit Bashが追加された画面

日本語化 #

上記の設定追加で Git Bash が使えるようになりましたが、そのままでは日本語文字が文字化けしてしまうため、ロケールの設定を追加します。

~/.bash_profile に以下を追記

export LANG=ja_JP.UTF-8

再読み込みして設定を反映

source ~/.bash_profile

これで日本語文字のファイル・ディレクトリ名など、文字化けしていなければOK。

あとは、ご自分が扱いやすいように設定をカスタマイズして、快適な環境にしましょう。

設定について #

最後に、おおよそどんな設定項目があるかを書いておきます。
より詳細に知りたい方は、ぜひ公式ドキュメントを読んでみてください。

補足として、公式ドキュメントには「プレビュー版のみしか使用できない」と記述がある設定のなかには、正式リリース版でも一部使用できるものがありました。

グローバル設定 #

※少々見づらいですが、横に長いテーブルなのでスクロールしてご覧ください🙇‍♂️

プロパティ名 内容 必須どうか デフォルト値
defaultProfile 起動時や、プロファイルを指定せずにタブ追加した場合に開かれるプロファイル 必須 GUID またはプロファイル名を表す文字列 PowerShell の GUID
disabledProfileSources 動的プロファイルを無効にする
ここに指定したプロファイルはリストに追加されない
オプション "Windows.Terminal.Wsl"、
"Windows.Terminal.Azure"、
"Windows.Terminal.PowershellCore"
(配列内)
[]
theme アプリケーションのテーマ
system は Windows と同じテーマ
オプション "system"、"dark"、"light" "system"
alwaysShowTabs 常にタブを表示するかどうか
※1
オプション true、false true
tabWidthMode タブ幅設定
equal...均等
titleLength...タイトルの長さ
compact...非アクティブタブをアイコン幅、アクティブタブをタイトル幅
オプション "equal"、"titleLength"、"compact" "equal"
confirmCloseAllTabs 複数のタブを開いているウィンドウを閉じようとする時に、確認ポップアップを表示するか オプション true、false true
startOnUserLogin スタートアップ時に Windows Terminal を起動するかどうか オプション true、false false
launchMode 起動時にターミナルを最大化して全画面表示するか、ウィンドウ内に表示するか オプション "default"、"maximized"、"fullscreen" "default"
initialPosition 起動時の、ウィンドウの左上隅のピクセル位置 オプション ","、"#,#"、"#,"、",#" ","
initialCols 起動時にウィンドウに表示される列数
launchModeが maximized に設定されていると、このプロパティは無視される
オプション 整数 120
initialRows 起動時にウィンドウに表示される行数
launchModeが maximized に設定されていると、このプロパティは無視される
オプション 整数 30
showTabsInTitlebar タブをタイトルバー内に移動するかどうか
※1
オプション true、false true
showTerminalTitleInTitlebar 選択されているタブのタイトルをタイトル バーに表示するかどうか
※1
オプション true、false true
copyOnSelect テキスト範囲選択と同時にコピーするかどうか オプション true、false false
copyFormatting テキストコピー時に書式設定もコピーするかどうか オプション true、false false
wordDelimiters ダブルクリックの選択で使用される単語の区切り記号 オプション 文字列としての文字 /\()""'-:|.;<>~!@#$%^&*|+=[]{}~?│
rowsToScroll マウス ホイールで一度にスクロールする行の数 オプション 整数 "system"
snapToGridOnResize ウィンドウサイズ変更時に、最も近い文字境界にスナップするかどうか オプション true、false true
experimental.rendering.forceFullRepaint 画面の再描画
true の場合、ターミナルでは各フレームの画面全体を再描画
false の場合、フレーム間の画面の更新のみが表示
オプション true、false false
experimental.rendering.software ソフトウェアレンダリング
true の場合、ターミナルでは、ハードウェア レンダラーの代わりに ソフトウェア レンダラー (WARP) を使用
オプション true、false false

※1…この設定を変更すると、新しいターミナル インスタンスを開始する必要があることに注意

プロファイルの設定 #

defaultslistに分かれる。

  • defaults:プロファイル共通の設定
  • list:プロファイルそれぞれの設定

※少々見づらいですが、横に長いテーブルなのでスクロールしてご覧ください🙇‍♂️

プロパティ名 内容 必須かどうか デフォルト値
guid プロファイルを特定するための一意の識別子 必須 レジストリ形式の GUID を表す文字列:
"{00000000-0000-0000-0000-000000000000}"
commandline プロファイルで使用される実行可能ファイル オプション 実行可能ファイル名を表す文字列 "cmd.exe"
source プロファイルを生成したプロファイル ジェネレーターの名前 オプション 文字列
startingDirectory シェルが読み込まれるときに開始されるディレクトリ位置 オプション フォルダーの場所を表す文字列 "%USERPROFILE%"
name ドロップダウンメニューに表示されるプロファイル名 必須 文字列
icon タブとドロップダウン メニュー内に表示されるアイコン オプション ファイルの場所を表す文字列
hidden ドロップダウンメニューからプロファイルを非表示にするかどうか オプション true、false false
tabTitle >カスタムタブのタイトル
起動時にシェルに渡すタイトルとしてnameが置き換えられる
オプション 文字列
suppressApplicationTitle シェルからのタイトルの変更を抑制
true の場合、tabTitleによってタブの既定のタイトルがオーバーライドされ、
アプリケーションからのタイトルの変更メッセージはすべて抑制される
オプション true、false
fontFace フォントの種類
指定値が見つからないか無効である場合は、Consolas へのフォールバックが施行される
オプション フォント名を表す文字列 "Cascadia Mono"
fontSize フォントの大きさ オプション 整数 12
fontWeight フォントの太さ オプション "normal"、"thin"、"extra-light"、"light"、
"semi-light"、"medium"、
"semi-bold"、"bold"、
"extra-bold"、"black"、"extra-black"、
OpenType フォントの太さの数値表記に対応する整数
"normal"
padding ウィンドウ内のテキストの周囲の余白 オプション 次の形式の値を表す文字列:
"#"、"#, #"、"#, #, #, #"
"8, 8, 8, 8"
antialiasingMode レンダラーでテキストをアンチエイリアシングする方法を制御
※1
オプション "grayscale"、"cleartype"、"aliased" "grayscale"
cursorShape カーソルの種類
"bar" ( ┃ )
"vintage" ( ▃ )
"underscore" ( ▁ )、
"filledBox" ( █ )、
"emptyBox" ( ▯ )
オプション "bar"、"vintage"、"underscore"、
"filledBox"、"emptyBox"
"bar"
cursorColor カーソルの色 オプション 色を表す 16 進形式の文字列: "#rgb" または "#rrggbb"
cursorHeight 下部からのカーソルの高さの割合
cursorShape が "vintage" に設定されている場合にのみ機能
オプション 25 から 100 までの整数
altGrAliasing AltGr エイリアシング
ctrl+alt を AltGr のエイリアスとして扱うかどうか
オプション true、false true
colorScheme プロファイルで使用される配色の指定
既定の配色だけでなく、独自の配色も指定可能
オプション 配色の名前を表す文字列 "Campbell"
foreground プロファイルの前景色
(配色で設定された foreground がオーバーライドされる)
オプション 色を表す 16 進形式の文字列: "#rgb" または "#rrggbb"
background プロファイルの背景色
(配色で設定されたbackgroundがオーバーライドされる)
オプション 色を表す 16 進形式の文字列: "#rgb" または "#rrggbb"
selectionBackground プロファイル内の選択範囲の背景色
(配色で設定されたselectionBackgroundがオーバーライドされる)
オプション 色を表す 16 進形式の文字列: "#rgb" または "#rrggbb"
useAcrylic ウィンドウ背景に透過性のあるアクリル背景を表示するかどうか(フォーカスしているウィンドウのみに適用) オプション true、false false
acrylicOpacity アクリル背景の不透明度 オプション 0 - 1 の浮動小数点値の数値 0.5
backgroundImage ウィンドウの背景に描画する画像 オプション ファイルの場所を表す文字列
backgroundImageStretchMode 背景画像のストレッチモード オプション "none"、"fill"、
"uniform"、"uniformToFill"
"uniformToFill"
backgroundImageAlignment ウィンドウ境界への背景画像の配置方法 オプション "center"、"left"、"top"、
"right"、"bottom"、"topLeft"、
"topRight"、"bottomLeft"、"bottomRight"
"center"
backgroundImageOpacity 背景画像の透明度 オプション 0 - 1 の浮動小数点値の数値 1.0
scrollbarState スクロールバーを表示するかどうか オプション "visible"、"hidden"
snapOnInput 入力時に入力行まで自動スクロールするかどうか オプション true、false true
historySize ウィンドウに表示されているよりも上の行にスクロールして戻すことができる行の数 オプション 整数 9001
closeOnExit 終了時のプロファイルの閉じ方
"graceful" or true...exit が入力されたとき、またはプロセスが正常に終了したときに、プロファイルを閉じる
"always"...常にプロファイルを閉じる
"never" or false...プロファイルを閉じない
オプション "graceful"、"always"、"never"、
true、false
"graceful"
experimental.retroTerminalEffect レトロターミナル効果
古い CRT ディスプレイ形式でするかどうか(試験的な機能で存続保証なし)
オプション true、false false

※1…この設定を変更すると、新しいターミナル インスタンスを開始する必要があることに注意

配色設定 #

元から用意されている配色については、公式ドキュメントをご参照ください。

独自の配色については、設定ファイルのschemes配列で定義でき、形式としては以下のようになっています。

ここで定義した配色のnameをプロファイル設定のcolorSchemeで指定する感じです。

{
  "name" : "Campbell",

  "cursorColor": "#FFFFFF",
  "selectionBackground": "#FFFFFF",

  "background" : "#0C0C0C",
  "foreground" : "#CCCCCC",

  "black" : "#0C0C0C",
  "blue" : "#0037DA",
  "cyan" : "#3A96DD",
  "green" : "#13A10E",
  "purple" : "#881798",
  "red" : "#C50F1F",
  "white" : "#CCCCCC",
  "yellow" : "#C19C00",
  "brightBlack" : "#767676",
  "brightBlue" : "#3B78FF",
  "brightCyan" : "#61D6D6",
  "brightGreen" : "#16C60C",
  "brightPurple" : "#B4009E",
  "brightRed" : "#E74856",
  "brightWhite" : "#F2F2F2",
  "brightYellow" : "#F9F1A5"
},

アクション設定 #

設定ファイルのactionsで、コマンドに対するショートカットのキーバインディング設定を行えます。

構文としては、引数があるかどうかで以下の2通りです。

{ "command": { "action": "commandName", "argument": "value" }, "keys": "modifiers+key" }
{ "command": "commandName", "keys": "modifiers+key" }

// 例
{ "command": {"action": "copy", "singleLine": false }, "keys": "ctrl+c" }
{ "command": "paste", "keys": "ctrl+v" }

コマンドの種類やデフォルトキー、設定できるキーの種類などに関しては、公式ドキュメントをご参照ください。

ちなみにコマンドパレットを開く(Ctrl + Shift + P)ことで、コマンド一覧と割り当てられているキーの確認ができます。


冒頭に書いた通り、自分は元々 WSL と Git Bash くらいしかターミナルを使っておらず、実はそこまで不便を感じていたわけではありませんでした。
なので Windows Terminal の存在を知っても別に導入しなくてもいいかなと思い、だいぶ期間が過ぎ…。

ただ、実際に導入してみると、素直に「あ、こっちの方がいいや」と思いました(笑)
一元管理できること、設定やキーバインディングをカスタマイズできることで、こんなに感覚変わるもんなんだなぁと。

導入も簡単にできるので、ぜひ活用されてみてください。

参考リンクまとめ #