VSCode の標準機能の Tasks を使って、テストランナーなどの実行環境を整えた。
実際の tasks.json
はこんな感じだ。なお、これは Rails アプリを Docker 上で開発している場合のもの。
{
"version": "2.0.0",
"tasks": [
{
"label": "rspec: run active example",
"type": "shell",
"command": "docker-compose exec app bin/rspec ${relativeFile}:${lineNumber}",
"group": "test",
"presentation": {
"showReuseMessage": false,
"focus": true
},
"problemMatcher": []
},
{
"label": "rubocop: inspect active file",
"type": "shell",
"command": "docker-compose exec app bin/rubocop -D ${relativeFile}",
"presentation": {
"showReuseMessage": false,
"focus": true
},
"problemMatcher": []
}
]
}
1つ目は、アクティブな spec ファイルのパスとカーソル行数を指定して app コンテナ上で rspec を実行するタスク。2つ目は、アクティブなファイルに対して app コンテナ上で rubocop を実行するタスク。
もし Docker でないなら、例えば1つ目のタスクは、
"command": "bin/rspec ${relativeFile}:${lineNumber}"
シンプルにこれだけで良い。
${relativeFile}
は 変数 (Variable substitution) というもので、アクティブなファイルのパスなど、いろいろな値を動的に埋め込むためのもの。これを使うと大抵のことはできる。
定義したタスクを実行する場合は、コマンドパレットで Tasks: Run Task
を選択後、定義したタスクを選択するだけ。実行内容と結果はターミナルに表示される。
手順が面倒?それなら、タスクごとにショートカットキーを割り当てる こともできる。
ちなみに、2つ目の rubocop タスクはほとんど使わない。rubocop を実行する場合は、
{
"label": "rubocop: inspect changed files to master",
"type": "shell",
"command": "git diff --name-only origin/master | xargs docker-compose exec -T app bin/rubocop -aD",
}
大抵はこのタスクを使っている。これは、master との差分ファイルに対して rubocop を実行するタスクだ。便利。