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

ツール・サービス

Windows, Windows Terminal


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 に以下を追記.

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

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

プロファイルの設定#

defaultslistに分かれる。

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

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

プロパティ名内容必須かどうかデフォルト値
guidプロファイルを特定するための一意の識別子必須レジストリ形式の GUID を表す文字列:
“{00000000-0000-0000-0000-000000000000}”
commandlineプロファイルで使用される実行可能ファイルオプション実行可能ファイル名を表す文字列“cmd.exe”
sourceプロファイルを生成したプロファイル ジェネレーターの名前オプション文字列
startingDirectoryシェルが読み込まれるときに開始されるディレクトリ位置オプションフォルダーの場所を表す文字列“%USERPROFILE%”
nameドロップダウンメニューに表示されるプロファイル名必須文字列
iconタブとドロップダウン メニュー内に表示されるアイコンオプションファイルの場所を表す文字列
hiddenドロップダウンメニューからプロファイルを非表示にするかどうかオプションtrue、falsefalse
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 までの整数
altGrAliasingAltGr エイリアシング
ctrl+alt を AltGr のエイリアスとして扱うかどうか
オプションtrue、falsetrue
colorSchemeプロファイルで使用される配色の指定
既定の配色だけでなく、独自の配色も指定可能
オプション配色の名前を表す文字列“Campbell”
foregroundプロファイルの前景色
(配色で設定された foreground がオーバーライドされる)
オプション色を表す 16 進形式の文字列: “#rgb” または “#rrggbb”
backgroundプロファイルの背景色
(配色で設定されたbackgroundがオーバーライドされる)
オプション色を表す 16 進形式の文字列: “#rgb” または “#rrggbb”
selectionBackgroundプロファイル内の選択範囲の背景色
(配色で設定されたselectionBackgroundがオーバーライドされる)
オプション色を表す 16 進形式の文字列: “#rgb” または “#rrggbb”
useAcrylicウィンドウ背景に透過性のあるアクリル背景を表示するかどうか(フォーカスしているウィンドウのみに適用)オプションtrue、falsefalse
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、falsetrue
historySizeウィンドウに表示されているよりも上の行にスクロールして戻すことができる行の数オプション整数9001
closeOnExit終了時のプロファイルの閉じ方
“graceful” or true…exit が入力されたとき、またはプロセスが正常に終了したときに、プロファイルを閉じる
“always”…常にプロファイルを閉じる
“never” or false…プロファイルを閉じない
オプション“graceful”、“always”、“never”、
true、false
“graceful”
experimental.retroTerminalEffectレトロターミナル効果
古い CRT ディスプレイ形式でするかどうか(試験的な機能で存続保証なし)
オプションtrue、falsefalse

※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 の存在を知りつつ別に導入しなくてもいいかなというので、だいぶ期間が過ぎ…。

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

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

参考リンクまとめ#