特集
» 2017年09月01日 05時00分 公開

特集:Visual Studio Codeデバッグ入門:第3回 Visual Studio CodeでC#コードをデバッグするための構成ファイル設定の基本 (2/3)

[かわさきしんじ,Insider.NET編集部]

tasks.jsonファイル

 自動生成されたtasks.jsonファイルの内容は次のようになっている。

自動生成されたtasks.jsonファイルの内容 自動生成された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"
    }
  ]
}


書き換えたtasks.jsonファイル

 このようにすると、[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": [
    {
      …… 省略 ……
    }
  ]
}


runner属性を"terminal"に設定

 これにより、タスクの実行がターミナルで行われ、その出力も[ターミナル]パネルに表示されるようになる(ただし、VS Codeの再起動が必要になる)。以下にこの切り替えを行い、デバッグ実行を行った際のビルド出力を示す。

[ターミナル]パネルでタスクが実行されるようになり、文字化け問題も回避できた [ターミナル]パネルでタスクが実行されるようになり、文字化け問題も回避できた

 次に、このbuildタスクを呼び出しているlaunch.jsonファイルについて見てみよう。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。