Windows TerminalでWSLとGit Bashのターミナルを統合してみた(+ 設定項目簡易まとめ)
ツール・サービス
Windows, Windows Terminal
Windows で複数のターミナルを立ち上げていると、散らかったり、切り替えが手間だったりしますよね。
これらを統合するべく、Windows Terminal を使ってみました。
Windows Terminal とは?#
Windows ターミナルの概要と、それによってコマンド ライン ワークフローを改善する方法について説明します。
 Microsoft が提供している Windows 向けのターミナルアプリケーションです。
コマンドラインインターフェイスを持つ任意のアプリケーションを、この Windows Terminal 内で実行できます。
つまり、これまではターミナルごとに別々で立ち上げていたのが、Windows Terminal で一元管理できるようになります。
それぞれのターミナルウィンドウを探す手間も省けて楽です。
ターミナルそれぞれでテーマや配色、フォント、背景などの設定が可能です。
そのほか、タブの中でさらにウィンドウ分割したり、ショートカットのキーバインディング設定も行うことができるようになっています。
自分の場合は、主に WSL と Git Bash を使用していたので、今回統合することにしました。
以下、導入・設定手順の備忘録と、おおよそどんな設定ができるのかを書いています。
Windows Terminal をより詳細に知りたい場合は、こちらの Zenn 本で詳しく解説されています。
導入#
ダウンロード#
Microsft Store で Windows Terminal で検索。
正式リリース版とプレビュー版とあるのでお好みで。
今回、自分は正式リリース版を使用することにしました。
(プレビュー版でしか使えない設定もありますが、プレビュー版はあくまで開発中のものであるため、予期しない動作をする可能性があることに注意です)
「入手」でダウンロード。
起動#
起動すると Windows PowerShell タブがデフォルトとして立ち上がります。
他の各種ターミナルを立ち上げるには、タブ右の ∨ から選択します。
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 です。
日本語化#
上記の設定追加で 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…この設定を変更すると、新しいターミナル インスタンスを開始する必要があることに注意。
プロファイルの設定#
defaultsとlistに分かれる。
- 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 の存在を知りつつ別に導入しなくてもいいかなというので、だいぶ期間が過ぎ…。
ただ、実際に導入してみると、素直に「あ、こっちの方がいいや」と思いました(笑)
一元管理できること、設定やキーバインディングをカスタマイズできることで、こんなに感覚変わるもんなんだなぁと。
導入も簡単にできるので、ぜひ活用されてみてください。