ターミナルプロファイル
ターミナルプロファイルは、実行可能パス、引数、その他のカスタマイズで構成されるプラットフォーム固有のシェル設定です。デフォルトでは、いくつかのプロファイルが自動的に検出され、カスタマイズしたり追加したりできます。
プロファイルの例
{
"terminal.integrated.profiles.windows": {
"Custom Init": {
"path": "pwsh.exe",
"args": [
"-noexit",
"-file",
"${env:APPDATA}\\PowerShell\\custom-init.ps1"
]
}
},
"terminal.integrated.defaultProfile.windows": "Custom Init"
}
上記の例でAPPDATA環境変数を使用しているように、ターミナルプロファイルで変数を使用できます。変数リファレンストピックで利用可能な変数のリストを確認できます。
Terminal: Select Default Profileコマンドを実行してデフォルトプロファイルを構成します。このコマンドは、新しいターミナルドロップダウンからもアクセスできます。

デフォルトのターミナルプロファイルシェルは、LinuxおよびmacOSでは$SHELL、WindowsではPowerShellにデフォルト設定されます。VS Codeは、ほとんどの標準シェルを自動的に検出し、デフォルトとして設定できます。
プロファイルの構成
新しいプロファイルを作成するには、Terminal: Select Default Profileコマンドを実行し、ベースにするシェルの右側にある構成ボタンをアクティブにします。これにより、settings.jsonファイルで手動で調整できる新しいエントリが設定に追加されます。
プロファイルは、pathまたはsource、および一連のオプション引数を使用して作成できます。sourceはWindowsでのみ利用可能で、VS CodeがPowerShellまたはGit Bashのインストールを検出するために使用できます。あるいは、シェル実行可能ファイルに直接指定するpathを使用することもできます。以下に、いくつかのプロファイル設定例を示します。
{
"terminal.integrated.profiles.windows": {
"PowerShell -NoProfile": {
"source": "PowerShell",
"args": ["-NoProfile"]
}
},
"terminal.integrated.profiles.linux": {
"zsh (login)": {
"path": "zsh",
"args": ["-l"]
}
}
}
プロファイルでサポートされるその他の引数には、次のものがあります。
overrideName: 実行中のプログラムを検出する動的なターミナルタイトルを静的なプロファイル名に置き換えるかどうかを示すブール値。env: 環境変数とその値を定義するマップ。変数をnullに設定すると、環境から削除されます。これは、terminal.integrated.env.<platform>設定を使用してすべてのプロファイルに対して構成できます。icon: プロファイルに使用するアイコンID。color: アイコンのスタイルを設定するテーマカラーID。
ヒント: path、args、およびenvはすべて、変数の解決をサポートしています。
デフォルトプロファイルは、terminal.integrated.defaultProfile.*設定を使用して手動で定義できます。これは、既存のプロファイルの名前に設定する必要があります。
{
"terminal.integrated.profiles.windows": {
"my-pwsh": {
"source": "PowerShell",
"args": ["-NoProfile"]
}
},
"terminal.integrated.defaultProfile.windows": "my-pwsh"
}
ヒント: 統合ターミナルシェルはVS Codeの権限で実行されます。管理者権限または異なる権限でシェルコマンドを実行する必要がある場合は、ターミナル内で
runas.exeなどのプラットフォームユーティリティを使用してください。
組み込みプロファイルの削除
組み込みプロファイルを削除し、新しいターミナルドロップダウンに表示されないようにするには、プロファイルの名前をnullに設定します。たとえば、WindowsでGit Bashプロファイルを削除するには、この設定を使用します。
{
"terminal.integrated.profiles.windows": {
"Git Bash": null
}
}
タスク/デバッグプロファイルの構成
デフォルトでは、タスク/デバッグ機能はデフォルトプロファイルを使用します。デフォルトに重いPowerShellスタートアップスクリプトやPOSIX非互換シェルがある場合など、これは理想的ではないかもしれません。デバッグ/タスク機能でのみ使用されるプロファイルを構成するには、terminal.integrated.automationProfile.<platform>設定を使用します。
{
"terminal.integrated.defaultProfile.osx": "fish",
// Use a fully POSIX-compatible shell and avoid running a complex ~/.config/fish/config.fish
// for tasks and debug
"terminal.integrated.automationProfile.osx": {
"path": "/bin/sh"
}
}
プロファイル固有のキーボードショートカット
専用のキーボードショートカットを介して特定のプロファイルでターミナルを起動するには、workbench.action.terminal.newWithProfileコマンドを使用します。このコマンドは、プロファイル名とオプションの場所を引数として取ります。たとえば、Ctrl+Shift+Tをzshプロファイルでターミナルを開くようにバインドするには、次の手順を実行します。
{
"key": "ctrl+shift+t",
"command": "workbench.action.terminal.newWithProfile",
"args": {
"profileName": "zsh",
"location": "editor"
}
}
安全でないプロファイルの検出
特定のシェルは、Windows環境で別のユーザーが書き込み可能なパスなど、デフォルトで安全でないパスにインストールされます。VS Codeはこれらを検出しますが、Terminal: Select Default Profileコマンドを介して明示的に構成されるまで、適切なプロファイルとして公開しません。安全でないプロファイルを構成する場合、追加される前に警告が表示されます。

Cmder
Cmder自体はターミナルですが、次のプロファイルでVS CodeでCmderシェルを使用できます。
{
"terminal.integrated.profiles.windows": {
"cmder": {
"path": "C:\\WINDOWS\\System32\\cmd.exe",
"args": ["/K", "C:\\cmder\\vendor\\bin\\vscode_init.cmd"]
}
},
"terminal.integrated.defaultProfile.windows": "cmder"
}
このプロファイルは、CMDER_ROOT環境変数が設定されていると自動的に検出されます。C:\cmderにインストールされている場合、安全でないプロファイルとしても検出されます。詳細については、CmderのWikiを参照してください。
Cygwin
Cygwin自体はターミナルですが、次のプロファイルでVS CodeでCygwinシェルを使用できます。
{
"terminal.integrated.profiles.windows": {
"Cygwin": {
"path": "C:\\cygwin64\\bin\\bash.exe",
"args": ["--login"]
}
},
"terminal.integrated.defaultProfile.windows": "Cygwin"
}
このプロファイルは、デフォルトパスC:\cygwinまたはC:\cygwin64にインストールされている場合、安全でないプロファイルとして自動的に検出されます。
Git Bash
VS Codeがgit-bash.exe(ターミナル)ではなくbash.exe(シェル)を使用する場合のGit Bashの制限は、履歴がシェルセッション間で保持されないことです。これを回避するには、~/.bashrcまたは~/.bash_profileファイルに以下を追加します。
export PROMPT_COMMAND='history -a'
これにより、プロンプトが表示されるたびにシェルがhistory -aを呼び出し、セッションの現在のセッションコマンドをバックアップ履歴ファイルにフラッシュします。
MSYS2
MSYS2のbashシェルは、次のプロファイルで構成できます。
{
"terminal.integrated.profiles.windows": {
"bash (MSYS2)": {
"path": "C:\\msys64\\usr\\bin\\bash.exe",
"args": ["--login", "-i"],
"env": { "CHERE_INVOKING": "1" }
}
}
}
CHERE_INVOKING環境変数は、ログイン初期化スクリプトに作業ディレクトリを保持するよう指示するために使用され、$HOMEで開かないようにします。
このプロファイルは、デフォルトパスC:\\msys64にインストールされている場合、安全でないプロファイルとして自動的に検出されます。
Windows PowerShell
PowerShell 6以降がインストールされている場合、Windows PowerShellはデフォルトではプロファイルリストに含まれません。Windows PowerShellをプロファイルとして追加するには、新しいターミナルドロップダウンでSelect Default Profileオプションを選択し、Windows PowerShell項目を選択します。これにより、プロファイルが構成され、デフォルトとして設定されます。
WSL
ローカルマシンでVS Codeを実行している場合、Windows Subsystem for Linuxシェルは自動的に検出されるはずです。設定によっては、多くのディストリビューションがインストールされている場合、これが邪魔になることがあります。WSLプロファイルをより細かく制御するには、自動検出をterminal.integrated.useWslProfiles設定で無効にすることができます。以下は、WSLシェルを手動で構成する方法の例です。
{
"terminal.integrated.profiles.windows": {
"Debian (WSL)": {
"path": "C:\\WINDOWS\\System32\\wsl.exe",
"args": [
"-d",
"Debian"
]
}
}
}
よくある質問
ターミナルの$PATH環境変数に重複したパスがあるのはなぜですか?また、macOSではなぜ逆になっているのですか?
これは、VS Codeの環境を使用してターミナルが起動する方法が原因でmacOSで発生する可能性があります。VS Codeが初めて起動するときに、「開発環境」をソースするために、構成されたシェルをログインシェルとして起動し、~/.profile/~/.bash_profile/~/.zprofileスクリプトを実行します。ターミナルが起動すると、これもログインシェルとして実行され、標準パスが先頭に置かれ(例:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin)、シェル環境が再初期化されます。
より理解を深めるために、オペレーティングシステムの組み込みターミナル内で内部ログインシェルを起動することで、何が起こっているかをシミュレートできます。
# Add /test to the beginning of $PATH
export PATH=/test:$PATH
# Echo $PATH, /test should be at the beginning
echo $PATH
# Run bash as a login shell
bash -l
# Echo $PATH, the values should be jumbled
echo $PATH
残念ながら、Linuxとは異なり、スタンドアロンのmacOSターミナルは、ユーザーがシステムにログインしてもmacOSがログインシェルを実行しないため、デフォルトですべてログインシェルとして実行されます。これにより、非ログインシェルで実行されるべきrcスクリプトにエイリアスを配置すべきなのに、プロファイルスクリプトでエイリアスを初期化するような「悪い習慣」が助長されます。
これには2つの直接的な修正方法があります。1つ目は、"terminal.integrated.inheritEnv": falseを設定することです。これにより、いくつかの重要な環境変数(HOME、SHELL、TMPDIRなど)を除き、ターミナルの環境からほとんどの環境変数が削除されます。
もう1つの修正方法は、ターミナルプロファイルを作成し、そのargsを[]に設定することで、ターミナルでログインシェルを実行しないようにすることです。この修正を選択する場合、プロファイルスクリプト内のエイリアスを~/.bashrc/~/.zshrcファイルに移動するようにしてください。エイリアスは設定されたシェルにのみ適用されるためです。