自動生成されたtasks.jsonファイルの内容は次のようになっている。
tasks.jsonファイルには、VS Code内から自動的に(あるいはコマンドパレットなどを使用して)行いたい処理を「タスク」として記述しておく。ここでは、"build"という名前のタスクが1つだけ定義されている。簡単に上記の要素をまとめておこう。
属性 | 説明 |
---|---|
version | バージョン |
command | 実行するコマンド |
isShellCommand | シェルコマンドかどうか |
args | コマンドに与える引数 |
tasks | 個別のタスクの設定 |
tasks.taskName | タスク名(この設定では、上のcommand属性に指定されたコマンドにタスク名が渡されるようになっている。つまり、実際には「dotnet build」コマンドが実行される) |
tasks.args | そのタスクでコマンドに与える引数 |
tasks.isBuildCommand | これがデフォルトのビルドコマンドか |
tasks.problemMatcher | プロブレムマッチャーの指定 |
tasks.jsonファイルでの設定内容 |
tasks属性の上で定義されているのは、tasks.jsonファイルで定義される1つ以上のタスク全体に関する設定となる。version属性はその名の通りなので置いておくとして、command属性では実行されるコマンドが指定されている。isShellCommand属性はこれがシェルコマンドであり、シェル(コマンドプロンプト、Bashなど)で実行する必要があるかを指定するものだ(省略時のデフォルト値はfalseとなっている。dotnetコマンドについてはtrueでもfalseでも構わない)。args属性にはdotnetコマンドに与える引数を列挙していく。
次にtasks属性の設定属性だが、tasksName属性の値(ここでは"build")はその名の通り、タスク名となる。自動生成されるlaunch.jsonファイル内でこの名前が参照されるようになっている。また、タスク名である「build」はデフォルトでtasks属性の上でcommand属性に指定されているdotnetコマンドに追加の引数として渡される。これにより、buildタスクが呼び出されたときには「dotnet build」コマンドが実行されるようになっている。余談だが、タスク名をコマンドに与えないようにするには、suppressTaskName属性にfalseを指定する。
このようにして実行されることになった「dotnet build」コマンドに与える引数を指定するのがargs属性だ。ここでは、プロジェクトディレクトリ(${workspaceRoot})直下のConsoleApp.csprojファイルが与えられている。isBuildCommand属性はこれがデフォルトのビルドコマンドかどうかを指定するものだ。problemMatcher属性はビルドにエラーが発生した場合に、その出力から問題点を検出する際に使用する「プロブレムマッチャー」を指定する。ここではC#のコードなので、"$msCompile"が指定されている。
「dotnet clean」コマンドと「dotnet run」コマンドをtasks.jsonファイルに追加すると次のようになる。
{
"version": "0.1.0",
"command": "dotnet",
"isShellCommand": true,
"args": [],
"echoCommand": true,
"tasks": [
{
"taskName": "build",
"args": [
"${workspaceRoot}/ConsoleApp.csproj"
],
"isBuildCommand": true,
"problemMatcher": "$msCompile"
},
{
"taskName": "clean"
},
{
"taskName": "run"
}
]
}
このようにすると、[Ctrl]+[P]キー(macOSでは[Command]+[P]キー)を押して(「>」がない状態の)コマンドパレットを表示して、「task build」「task run」「task clean」などとコマンドを入力することで、指定したタスクを実行できるようになる。なお、上のtasks.jsonファイルではechoCommand属性をtrueに設定しているが、こうすることで実行するコマンドが[出力]パネルにエコーバックされるようになる。tasks.jsonファイルでタスクを構成する際には、実際にどんなコマンドが実行されることになるのかを確認できるので活用しよう。
tasks.jsonファイルの概要はここまでとして、[出力]パネルで文字化けする問題を回避する方法について述べておこう。これにはtasks.jsonファイルでrunner属性を"terminal"に設定してやればよい。
{
"version": "0.1.0",
…… 省略 ……
"echoCommand": true,
"runner": "terminal",
"tasks": [
{
…… 省略 ……
}
]
}
これにより、タスクの実行がターミナルで行われ、その出力も[ターミナル]パネルに表示されるようになる(ただし、VS Codeの再起動が必要になる)。以下にこの切り替えを行い、デバッグ実行を行った際のビルド出力を示す。
次に、このbuildタスクを呼び出しているlaunch.jsonファイルについて見てみよう。
Copyright© Digital Advantage Corp. All Rights Reserved.