9
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Angular + VSCode でデバッグ開始したときに ng serve する

Last updated at Posted at 2018-07-12

Angular + VSCode でのWebアプリ開発、普通は

  1. ng serve する
  2. (launch.json で) Chrome 起動して http://localhost:4200/ を開く

としますが、 ng serve を忘れたりシェルのウィンドウどこいった?ってなったりして面倒なので VSCode の「デバッグ開始(F5)」 一発で ng serve -> Chrome 起動する方法を考えてみました。

.vscode/tasks.json

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "ng-serve",
            "type": "shell",
            "isBackground": true,
            "command": "ng serve",
            "problemMatcher": {
                "owner": "custom",
                "pattern": {
                    "regexp": "^$"
                },
                "background": {
                    "activeOnStart": true,
                    "beginsPattern": "^.*Angular Live Development Server.*$",
                    "endsPattern": "^.*Compiled successfully.*$"
                }
            }
        },
        {
            "label": "ng-kill",
            "type": "shell",
            "command": "killall ng"
        }
    ]
}

ng-serveng-kill という2つのタスクを定義します。

ng-serveng serve を実行するものですが、フォアグラウンドで実行すると、listen状態で待ち続ける(=次の処理であるChrome起動が行われない)になるので、"isBackground": true にします。すると今度は「タスクの終了」を示すものがなくなってしまうので、"problemMatcher": { } 内の "endsPattern": "^.*Compiled successfully.*$" として、 「ng serve が正常に実施されてこのメッセージが出力されたらタスク終了とみなす」という定義をします。

ng-kill は、 killall ng として ng という名前のプロセスを kill しているだけです。VSCode の機能で「任意のタスクを終了させるタスク」を作る方法がわからなかったのでこうなりました:sweat: (macOS では動いたけど Windows では動きそうにないな…)

.vscode/launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "chrome",
            "request": "launch",
            "name": "Debug with Chrome",
            "url": "http://localhost:4200",
            "webRoot": "${workspaceFolder}",
            "preLaunchTask": "ng-serve",
            "postDebugTask": "ng-kill"
        }
    ]
}

こちらは通常の「Chromeを起動させる」 launch.json に preLaunchTaskpostDebugTask を追加しただけです。

これで デバッグ開始(F5) をすると、ng serve が実行されて、待受開始になったら Chrome が起動します。
また、デバッグを停止させると killall ng が実行されて ng serve も停止します。

作ってはみたものの、実行の度に ng serve されるのはそれなりに時間がかかって嫌だし、これは常駐させておくものだからデバッグ終了で止めない方がいいかもなーと思います。

GitHub の VSCode プロジェクトでは「一度作ったタスクを使い回す」設定のPRが立っていて、これが加わると便利になりそうだなと思います。

参考

9
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?