13
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Visual Studio Code の統合ターミナルで MSYS2 の bash を選択できるようにする

Last updated at Posted at 2021-04-17

要約

Visual Studio Code 1.55 では統合ターミナルを起動する際にプロファイルを選択できるようになりました。この記事では MSYS2 の bash を起動するためのプロファイルの設定方法を紹介します。(追記: 1.56 で環境変数の設定もできるようになりましたので、記事の一部を修正しています。修正後の記事では 1.57.0 の環境を基にしています)

設定するには、次のようなプロパティ terminal.integrated.profiles.windows を settings.json に追加します。詳細は後で解説しますが、"PowerShell", "Command Prompt", "Git Bash" がデフォルト設定からコピーした部分で、"MSYS2 Bash" が追加した設定になります。

settings.json
	// ターミナルのドロップダウンを使用して新しいターミナルを作成するときに表示する Windows プロファイル。除外する場合は null に設定し、検出された既定の構成を使用する場合は `source` プロパティを使用します。または、`path` とオプションの `args`. を設定します
	"terminal.integrated.profiles.windows": {
		"PowerShell": {
			"source": "PowerShell"
		},
		"Command Prompt": {
			"path": [
				"${env:windir}\\Sysnative\\cmd.exe",
				"${env:windir}\\System32\\cmd.exe"
			],
			"args": []
		},
		"Git Bash": {
			"source": "Git Bash"
		},
		"MSYS2 Bash": {
			"path": [
				"C:\\msys64\\usr\\bin\\bash.exe"
			],
			"args": [
				"--login"
			],
			"env": {
				"MSYSTEM": "MINGW64",
				"CHERE_INVOKING": "1"
			}
		},

はじめに

最近の VSCode (March 2021, Version 1.55 以降) では統合ターミナルを起動する際にプロファイルを選択できるようになりました。Windows では PowerShell, Command Prompt, Git Bash などが使用できるようになっています (Git Bash を使用するには Windows 用の Git がインストールされている必要があります)。

MSYS2 Bash を起動するための設定を統合ターミナルのプロファイルに追加すると、統合ターミナルで MSYS2 を使用できるようになります。また、用途に応じて複数のプロファイルをドロップダウンメニューで切り替えることが可能です。

下図は、VSCode 1.57.0 における統合ターミナルのドロップダウンメニューです。

image.png

設定

terminal.integrated.profiles.windows

Windows 用の統合ターミナルのプロファイルは terminal.integrated.profiles.windows で設定されています。VSCode 1.57.0 の規定の設定 (defaultSettings.json) では該当箇所は下記のようになっています。

defaultSettings.json
	// ターミナルのドロップダウンを使用して新しいターミナルを作成するときに表示する Windows プロファイル。除外する場合は null に設定し、検出された既定の構成を使用する場合は `source` プロパティを使用します。または、`path` とオプションの `args`. を設定します
	"terminal.integrated.profiles.windows": {
		"PowerShell": {
			"source": "PowerShell",
			"icon": "terminal-powershell"
		},
		"Command Prompt": {
			"path": [
				"${env:windir}\\Sysnative\\cmd.exe",
				"${env:windir}\\System32\\cmd.exe"
			],
			"args": [],
			"icon": "terminal-cmd"
		},
		"Git Bash": {
			"source": "Git Bash"
		}
	},

ここで "PowerShell", "Command Prompt", "Git Bash" が各プロファイルのキーであり、ドロップダウンメニューの項目名の元になります。

プロファイルの内容を見ると、source が設定されている場合と、pathargs が設定されている場合の2通りがあることがわかります。設定ファイルのコメントにあるように、source は VSCode が検出する規定の設定を使用する場合、path は実行するファイルを直接指定する場合に設定します。

MSYS2 Bash の設定を追加する

terminal.integrated.profiles.windows にプロファイルを追加する

規定の設定 (defaultSettings.json) の該当箇所を基本設定 (settings.json) の方にコピーして、MSYS2 bash を実行するのに必要な情報を追加します。

本来であれば、terminal.integrated.profiles.windows に "MSYS2 Bash" を追加して、pathargs を設定するだけでよいはずでした。

例えば次のように設定すると、統合ターミナルのドロップダウンメニューに "new MSYS Bash" が追加されます。path で指定した実行ファイルが存在しないときはメニューに追加されません。表示されないときは path の指定内容が正しいかどうか確認してください。

不完全な設定
        "MSYS2 Bash": {
            "path": [
                "C:\\msys64\\usr\\bin\\bash.exe"
            ],
            "args": []
        }

MSYS2 実行環境が設定されるようにする

前節の設定で起動した MSYS2 bash は正しく動作しません。正しい動作に必要な環境変数の設定が不足しているためです。

Visual Studio Code 15.1の統合シェルをMSYS2のbashにする」によれば、MSYS2 bash を実行する際に環境変数 MSYSTEM, CHERE_INVOKING を設定し、bash の引数に --login を指定する必要があります。

引数の方はプロファイルの args に指定すればよいのですが、環境変数を指定することができません。プロファイルの属性に env のようなものはなさそうです1

ここでは bash の代わりに MSYS2 の env を呼び出すことにしました。MSYS2 の bash が使用できる環境であればたいていは env も使用できるでしょう。他にはラッパーのバッチファイルを自前で用意したり、.bashrc の中でなんとかする方法もあるかと思います。

前述したように、VSCode 1.56 以降で env が追加され、プロファイル毎に追加の環境変数の設定を行うことが可能となっているので、env を使用します。

設定内容は次のようになります。コマンドパスや環境変数 MSYSTEM の値などは使用する環境に合わせて読み替えてください。

必要な環境変数とコマンドライン引数を設定
        "MSYS2 Bash": {
            "path": [
                "C:\\msys64\\usr\\bin\\bash.exe"
            ],
            "args": [
                "--login"
            ],
            "env": {
                "MSYSTEM=MINGW64",
                "CHERE_INVOKING=1"
            }
        },

唐突に "overrideName": true という記述が現れました。

path で指定したコマンド名が bash でなく env になったので、実行中の統合ターミナルの表示も "env" となってしまいます。overrideNametrue にすると、コマンド名 "env" の代わりにプロファイルの名前 "MSYS2 Bash" が表示されるようになります。

まとめ

プロパティ terminal.integrated.profiles.windows を settings.json に追加します。

settings.json
	// ターミナルのドロップダウンを使用して新しいターミナルを作成するときに表示する Windows プロファイル。除外する場合は null に設定し、検出された既定の構成を使用する場合は `source` プロパティを使用します。または、`path` とオプションの `args`. を設定します
	"terminal.integrated.profiles.windows": {
		"PowerShell": {
			"source": "PowerShell"
		},
		"Command Prompt": {
			"path": [
				"${env:windir}\\Sysnative\\cmd.exe",
				"${env:windir}\\System32\\cmd.exe"
			],
			"args": []
		},
		"Git Bash": {
			"source": "Git Bash"
		},
		"MSYS2 Bash": {
			"path": [
				"C:\\msys64\\usr\\bin\\bash.exe"
			],
			"args": [
				"--login"
			],
			"env": {
				"MSYSTEM": "MINGW64",
				"CHERE_INVOKING": "1"
			}
		},

参考

  1. コメント欄で insider の VSCode には env サポートが追加されているとの情報をいただきました。env が使用できるとより自然に記述することができますね。~~stable に来るのが楽しみです。~~リリースされたので本文を修正しました。

13
11
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?