この記事はgpt-5.1によって生成されました。

概要

VS Code のタスク実行では、デフォルトで複数タスクが同じターミナル(shell)を共有します。
タスク実行のたびに新しい shell を使いたい場合や、同じタスクでも毎回新しいパネルを開きたい場合は、tasks.json"presentation" 設定で制御します。


基本設定

tasks.json 内でタスクごと、または全体のデフォルトに対して "presentation" を指定します。

"presentation": {
  "reveal": "always",        // または "silent" など
  "panel": "new"             // ← ここがポイント
}

"panel" の値と意味

  • "shared"
    • デフォルト
    • 複数のタスクが同じターミナルを共有する(shell を使い回す)
  • "dedicated"
    • タスクごとに専用ターミナルを 1 つ割り当てる
    • 同じタスクを再実行した場合は、同じ専用ターミナルを再利用する
  • "new"
    • タスク実行のたびに新しいターミナルを作成する
    • 同じタスクであっても毎回新しいパネル(ターミナル)が開く
    • 毎回新しい shell を起動し、使い回さない

「毎回必ず新しい shell で実行したい」「同一タスク実行でも毎回新しいパネルが欲しい」場合は "panel": "new" を指定します。


タスク単位での設定例

実行のたびに新しい shell を使うタスク

(同一タスクでも新規パネルを開く)

// .vscode/tasks.json
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "run script",
      "type": "shell",
      "command": "echo hello && sleep 3",
      "presentation": {
        "reveal": "always",
        "panel": "new"      // 同じタスクを何度実行しても毎回新しいターミナル
      }
    }
  ]
}

この設定では、"run script" タスクを実行するたびに、
同じタスク名であっても毎回新しいターミナル(shell)が開かれます。

同じタスク用に専用ターミナルを使う場合

"presentation": {
  "reveal": "always",
  "panel": "dedicated"
}
  • タスクごとに 1 つ専用ターミナルを持つ
  • 同じタスクを再実行するときは同じターミナルを再利用
  • 異なるタスク同士はターミナルを共有しない

すべてのタスクに対するデフォルト設定

毎回タスクごとに "presentation" を書きたくない場合は、tasks.json のトップレベルの "options" でデフォルトを指定できます。

// .vscode/tasks.json
{
  "version": "2.0.0",
  "options": {
    "presentation": {
      "panel": "new"   // ここで全タスク共通のデフォルトを指定
    }
  },
  "tasks": [
    {
      "label": "build",
      "type": "shell",
      "command": "npm run build"
    },
    {
      "label": "test",
      "type": "shell",
      "command": "npm test"
    }
  ]
}

ここで "panel": "new" を設定しておくと、個々のタスクで "presentation" を上書きしない限り、
すべてのタスクが実行のたびに新しいターミナル(shell)で起動されます。


まとめ

  • タスク実行ごとに新しい shell を使いたい
    "panel": "new"
    同一タスクでも毎回新しいパネルが開く

  • タスクごとに専用ターミナルを使いたい(同じタスクは同じパネルを再利用)
    "panel": "dedicated"

  • 複数タスクでターミナルを共有してもよい
    "panel": "shared"(デフォルト)

tasks.json"presentation" 設定で、VS Code のタスク実行時の shell の使われ方を細かく制御できます。