Visual Studio CodeのTasksは、毎回打っているコマンドを「思い出す作業」から外してくれる
開発をしていると、同じコマンドを何度も入力します。
- Railsサーバーを起動する
- テストを実行する
- RuboCopを回す
- フロントエンドのビルドを確認する
1回ずつは小さな手間です。
ただ、毎回ターミナル履歴を探したり、オプションを打ち間違えたりしていると、地味に集中が切れます。
そこで使いやすいのが、Visual Studio Codeの tasks.json です。
この記事では、VS CodeのTasksを使って、よく使うコマンドを安全に登録する方法を整理します。この記事のコード例と説明は、Visual Studio Code の公式TasksドキュメントとTasks schemaを、2026年9月1日に確認した内容を前提にしています。
- Integrate with External Tools via Tasks - Visual Studio Code
- Schema for tasks.json - Visual Studio Code
- Keyboard shortcuts for Visual Studio Code
tasks.jsonは、コマンドをワークスペースに残すための設定ファイル
VS CodeのTasksは、ビルド、テスト、lint、スクリプト実行のような外部ツールを、VS Code内から呼び出すための仕組みです。
ワークスペース固有のタスクは、基本的に .vscode/tasks.json に書きます。
たとえば、Railsサーバーを起動するだけなら、次のように登録できます。
{
"version": "2.0.0",
"tasks": [
{
"label": "Railsサーバーを起動",
"type": "shell",
"command": "bin/rails",
"args": ["server"],
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"reveal": "always"
},
"problemMatcher": []
}
]
}
ここで最低限見るのは、次の4つです。
-
label: VS Code上に表示されるタスク名 -
type:shellならシェル経由、processならプロセスとして実行 -
command: 実行するコマンド -
args: コマンドに渡す引数
以前の自分は、command に長い文字列をそのまま入れがちでした。
それでも動くケースはあります。
ただ、引数に空白や記号が入ると、シェルの解釈に依存して分かりにくくなります。単純なコマンドなら、command と args を分けて書くほうが、後から読み返したときに意図が残りやすいです。
よく使う確認コマンドから登録すると失敗しにくい
最初から複雑な自動化を作ろうとすると、tasks.json自体の管理が面倒になります。
まずは、普段よく打つ確認コマンドを1つだけ登録するくらいで十分です。
{
"version": "2.0.0",
"tasks": [
{
"label": "RuboCopを実行",
"type": "shell",
"command": "bundle",
"args": ["exec", "rubocop"],
"group": "test",
"presentation": {
"reveal": "always",
"panel": "shared"
},
"problemMatcher": []
}
]
}
このくらいの小ささだと、登録する意味が分かりやすいです。
「このプロジェクトでは、品質確認の最初に何を回すのか」がファイルとして残ります。
未来の自分や次に入った人が、READMEを探し回らなくても、VS CodeのTasksから同じ確認を始められます。
入力を短縮するというより、作業の入口を揃える効果が大きいと感じています。
ショートカットに割り当てると、さらに呼び出しやすくなる
VS Codeでは、登録したタスクをキーボードショートカットから呼び出すこともできます。
keybindings.json に、たとえば次のように書きます。
{
"key": "ctrl+alt+r",
"command": "workbench.action.tasks.runTask",
"args": "RuboCopを実行"
}
WindowsやLinuxでは Ctrl+Shift+B、macOSでは Shift+Command+B でデフォルトのビルドタスクも呼び出せます。
ただ、ショートカットは増やしすぎると逆に覚えられません。
自分なら、毎日使うものだけに絞ります。
ショートカット全般の整理は、VSCodeのショートカットキーは、文章編集でも活用できる でも書いています。Tasksも同じで、「よく使う操作だけを身体に寄せる」くらいがちょうどよいです。
dependsOnを使うと、複数タスクをまとめられる
Tasksでは、dependsOn を使って複数のタスクをまとめられます。
たとえば、lintとテストをまとめて実行したいときは、次のように書けます。
{
"version": "2.0.0",
"tasks": [
{
"label": "RuboCopを実行",
"type": "shell",
"command": "bundle",
"args": ["exec", "rubocop"],
"problemMatcher": []
},
{
"label": "Railsテストを実行",
"type": "shell",
"command": "bin/rails",
"args": ["test"],
"problemMatcher": []
},
{
"label": "品質確認をまとめて実行",
"dependsOn": ["RuboCopを実行", "Railsテストを実行"],
"dependsOrder": "sequence",
"problemMatcher": []
}
]
}
ここで気をつけたいのは、dependsOn に複数タスクを書いた場合、順序指定がなければ並列で実行されることです。
順番が重要な確認なら、dependsOrder を sequence にします。
一方で、互いに依存していないlintと型チェックなら、並列のままでもよいかもしれません。
この判断を明示できるのも、tasks.jsonの良いところです。
危ないコマンドを登録しない基準も決めておく
便利になるほど、危ないコマンドも簡単に実行できてしまいます。
だから、自分はtasks.jsonに登録するコマンドを、少し安全側に倒したいです。
たとえば、削除系の rm -rf、データベースを作り直す db:reset、クラウドやKubernetesの delete 系操作は、何も考えずにショートカット化しないほうがよいです。
これらは、ローカルでもデータ削除や環境破壊につながります。
本番環境の資格情報を使うコマンド、課金、公開、送信、削除、権限変更を起こすコマンドも、tasks.jsonに気軽に置かないほうが安全です。
どうしても登録するなら、タスク名に影響範囲を入れる、presentation.reveal を always にする、READMEに前提を書く、確認用のdry-runを別タスクにする、などの工夫が必要です。
Tasksは「速くする道具」ですが、速く危険な操作をするための道具にはしたくありません。
使い続けるコツは、作業の意図をlabelに残すこと
自分も、Railsの起動、lint、テスト、ちょっとした確認コマンドをtasks.jsonに寄せることがあります。
使っていて便利なのは、コマンドを忘れても呼び出せることだけではありません。
label を見るだけで、何のための作業なのか思い出せることです。
{
"label": "DB状態を確認してからテストを実行",
"type": "shell",
"command": "bin/rails",
"args": ["test"],
"problemMatcher": []
}
ラベルが「test」だけだと、未来の自分には少し不親切です。
「何を確認したいのか」「どの場面で使うのか」まで名前に残しておくと、タスク一覧が小さな運用メモになります。
まとめ
VS Codeの tasks.json は、よく使うコマンドを登録して呼び出せる便利な仕組みです。
ただ、自分にとって大事なのは、単に入力を短くすることではありません。
- よく使う確認手順をファイルに残す
-
commandとargsを分けて、意図を読みやすくする -
dependsOnとdependsOrderで実行順序を明示する - 危ないコマンドを気軽にショートカット化しない
-
labelに作業の目的を残す
このあたりを意識すると、tasks.jsonはただの時短設定ではなく、プロジェクトの小さな作業手順書になります。
まずは、毎日1回は打っている安全な確認コマンドを1つだけ登録するところから始めるとよさそうです。