VS Codeのエージェントモードを拡張するには、を試してください!

ターミナルプロファイル

ターミナルプロファイルは、実行可能ファイルのパス、引数、およびその他のカスタマイズで構成されるプラットフォーム固有のシェル構成です。既定では、いくつかのプロファイルが自動的に検出され、カスタマイズしたり追加したりできます。

プロファイルの例

{
  "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] (ターミナル: 既定のプロファイルの選択) コマンドを実行して、既定のプロファイルを構成します。このコマンドは、新しいターミナルのドロップダウンからもアクセスできます。

Select Default Profile is located at the bottom of the dropdown menu attached to the new terminal button

既定のターミナルプロファイルのシェルは、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] (ターミナル: 既定のプロファイルの選択) コマンドを介して明示的に構成されるまで、適切なプロファイルとして公開しません。安全でないプロファイルを構成する際には、追加される前に警告が表示されます。

Shells with unsafe paths like c:\msys64 will show a warning before you can use the detected 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) が先頭に置かれ、シェル環境が再初期化されます。

より深く理解するために、OS の組み込みターミナル内で内部ログインシェルを起動することで、何が起こっているかをシミュレートできます。

# 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 ファイルに移動させる必要があります。エイリアスは設定されたシェルにのみ適用されるためです。