ターミナルプロファイル
ターミナルプロファイルは、実行可能ファイルのパス、引数、その他のカスタマイズ設定で構成される、プラットフォーム固有のシェル設定です。デフォルトでいくつかのプロファイルが自動的に検出され、これらをカスタマイズしたり追加したりすることができます。
プロファイルの例
{
"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 環境変数のように、ターミナルプロファイル内で変数を使用できます。利用可能な変数のリストは、「Variables Reference(変数リファレンス)」トピックに記載されています。
デフォルトプロファイルを構成するには、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) シェルは自動的に検出されます。セットアップによっては、多数のディストリビューションがインストールされている場合にこれが煩わしくなることがあります。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 ファイルに移動していることを確認してください。