Visual Studio Code / settings.json / tasks.json

# settings.json とは

**settings.json** とは、Visual Studio Code（VSCode）のカスタマイズが可能な設定情報を管理するためのJSON形式のファイルを指す。

https://code.visualstudio.com/docs/getstarted/settings

実体がJSONファイルなので、チーム開発時にGit管理するなどして設定を共有することもできる。

settings.json には、VSCode全体に対して適用される [User settings](#user-settings) と、特定のworkspace（プロジェクト）に対してのみ適用される [Workspace settings](#workspace-settings) が存在する（[Multi-root workspaces](#multi-root-workspaces)でのみ適用される [Folder settings](#各folder-に対する設定) というものもある）。

## User settings

VSCode全体に対して適用される。

### 設定の変更

設定値を変更する方法には、

- [JSONファイルを直接エディタから編集する方法](#jsonファイルを直接編集する場合)
- [VSCodeのGUIから編集する方法](#guiから編集する場合)

がある。

### JSONファイルを直接編集する場合

`settings.json` は以下のパスに配置されている。

| OS | settings.json の配置 |
|:-|:-|
| Windows | `%APPDATA%\Code\User\settings.json` |
| macOS | `$HOME/Library/Application\ Support/Code/User/settings.json`<br>（※`Application\ Support` は `Application Support` ディレクトリのこと） |
| Linux | `$HOME/.config/Code/User/settings.json`  |

![settings-json-in-editor.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/f03d1b99-2fac-f834-192d-73b466a1ce9c.png)

![settins_json_user.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/67299fae-bc31-3d9a-58f3-25bfef3ba96e.png)

JSON のキーは **setting ID** と呼ばれ、[GUIから編集する場合](#guiから編集する場合)にも取得することができる。



### GUIから編集する場合

画面左下の設定ボタンから「Settings」を選択する。

![settings_json_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/9dcbfd0c-9766-b3de-4686-3bb4a142cbb2.png)

左側の「User」タブを選択する。

![settins_json_user.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/8b948880-e291-a195-e383-de0c5c58f0d9.png)

歯車アイコンをクリック先から [`settings.json`](#jsonファイルを直接編集する場合) の setting ID を取得することができる。

![settings_json_id.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/8f49aa4a-9f23-67b3-182c-dd5325848f7f.png)


## Workspace settings

特定のプロジェクトに対して適用される。[User settings](#user-settings)よりも優先度が高いため、User settings による設定値をプロジェクトごとに異なる値で上書きできる（一部上書きできない項目もある）。

### 設定の変更

設定値を変更する方法には、[JSONファイルを直接エディタから編集する方法](#jsonファイルを直接編集する場合-1)と[VSCodeのGUIから編集する方法](#guiから編集する場合-1)がある。

### JSONファイルを直接編集する場合

プロジェクトフォルダ直下の `.json/settings.json` を編集する。

[User settings](#user-settings)の`settings.json`はプロジェクトフォルダ内に含まれるため、プロジェクトと一緒にGitによるバージョン管理をすることができる。

### GUIから編集する場合

画面左下の設定ボタンから「Settings」を選択する。

![settings_json_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/9dcbfd0c-9766-b3de-4686-3bb4a142cbb2.png)

右側の「Workspace」タブを選択する。

![settings_json_workspace.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/9daafc53-4981-c8b6-3bdb-6e381b3424a2.png)

歯車アイコンをクリック先から各設定項目の [`settings.json`](#jsonファイルを直接編集する場合-1) の setting ID を取得することができる。

![settings_json_id_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/bc0cb0f8-b52f-64da-7725-003dfefd7a7a.png)

# tasks.json とは

**tasks.json** とは、VSCodeで**タスク**を定義するためのJSONファイルを指す。

タスクとは開発中に頻繁に行うビルド、テスト、スクリプト実行などの作業を指す。

タスクを定義することで、頻繁に実行するコマンドなどに任意の名前をつけて簡単に実行することができるようになる。

https://code.visualstudio.com/docs/editor/tasks

## tasks.json の作成

「Terminal」から「Configure Tasks」を選択する。

![tasks_json_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/ad143caf-846d-838a-5ac8-9fe2f9a0672d.png)

「Create tasks.json file from template」を選択する。

![tasks_json_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/26017637-a4c5-bdde-ced2-f5e99ff4eb40.png)

「Others」を選択する。

![tasks_json_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/6d2ac2b1-f299-98c7-20a1-407d9efd5275.png)

プロジェクトのルートフォルダに `.vscode/tasks.json` が作成される。

![tasks_json_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/67786cbc-18b1-8e8f-ffe0-caa70ac075ff.png)


## 配置場所

tasks.json は[workspace](#workspace)内の `.vscode` フォルダ内に保存される。

![tasks_json_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/67786cbc-18b1-8e8f-ffe0-caa70ac075ff.png)

## 設定項目

タスクは `tasks` キーに対してオブジェクトの配列として設定する。各タスクには以下のキーを設定することができる。

設定項目は「コントロール（`ctrl`）　+　スペース（`space`）」キーにてIntelliSenseとして表示させることができる。

![tasks-intellisense.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/80d45dbf-26bc-4267-83c2-56427435d6b5.png)

| 設定項目 | 説明 |
|:-:|:-|
| `label` | タスクの名前|
| `type` | `shell` : シェルコマンド<br>`process` : プロセス |
| [`command`](#command) | 実行したいコマンド |
| `args` | コマンドに渡す引数 |
| `group` | タスクのグループ名。`test`や`build`などがあり、グループ化したタスクはコマンドパレットからまとめて実行することができる。 |
| `windows` / `linux` / `osx` | コマンドが実行される環境ごとの固有の設定 |
| [`presentation`](#presentation) | 実行方法と実行結果の出力方法 |
| [`options`](#options) | コマンドの実行環境に関わる設定  |

```json:タスクの例
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "my script",
      "type": "shell",
      "command": "echo",
      "args": ["hello", "world"],
    }
  ]
}
```

### `command`

実行したいコマンドが複数ある場合、スクリプトファイルを作成して、そのスクリプトファイルを　`command` に指定する。

```json:スクリプトファイルを実行させる
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "my script",
      "type": "shell",
      "command": "./scripts/myscript.sh",
    }
  ]
}
```

### `presentation`

| `presentation` | 各設定値 |
|:-:|:-|
| `reveal` | `always` : タスク実行のたびにターミナルを表示する<br>`silent` : タスクが実行されてもターミナルを表示しない（ただし、エラー発生時は表示する）<br>`never` : タスクが実行されてもターミナルを表示しない（エラー発生時も表示しない） |
| `focus` | `true` : タスク実行後にターミナルにフォーカス移動する<br>`false` : フォーカスを移動しない |
| `panel` | `shared` : 実行結果を表示するターミナルを他のタスクと共有する<br>`dedicated` : 実行結果を表示するターミナルを、タスクが同じであれば共有し、異なるタスクであれば共有しない<br>`new` : 実行結果を実行の度に新しいターミナルを起動して表示する |
| `close` | `true` : タスク実行後にターミナルを閉じる<br>`false` : ターミナルを閉じない |
| `clear` | `true` : タスクを実行する前にターミナルをクリアする<br>`false` : ターミナルをクリアしない |

```json:presentationの例
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "my task",
      "type": "shell",
      "command": "echo Hello",
      "presentation": {
        "reveal": "always",
        "focus": true,
        "panel": "shared",
        "clear": true
      }
    }
  ]
}
```

### `options`

| `options` | 各設定値 |
|:-:|:-|
| `cwd` | タスクを実行するディレクトリのパス（[workspace](#workspace)のパスを`$workspaceFolder`として使用できる） |
| `env` | タスク実行時の環境変数を定義できる（上書きも可能） |
| `shell` | タスクを実行するシェルに関わる設定<br>`executable` : 使用するシェルのパス<br>`args` : シェルに渡す引数 |
| `windows` / `linux` / `osx` | コマンドが実行される環境ごとの固有の設定 |

```json:optionの例
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "my task",
      "type": "shell",
      "command": "echo",
      "args": ["Hello ${MY_VAR}"],
      "options": {
        "cwd": "${workspaceFolder}/scripts", 
        "env": {
          "MY_VAR": "world"
        }
      }
    }
  ]
}
```

## タスクの実行

「Terminal」から「Run Task」を選択する。

![tasks_json_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/4088aa87-d1f2-6ebf-df82-3d3c0495af01.png)

設定したタスク名を選択する。

![tasks_json_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/dd4411df-a9fc-2a76-1b71-2b1d6c17213d.png)

# workspace

VSCode上で開いた特定のフォルダーをプロジェクトとして管理するための機能。

[settings.json](#settingsjson-とは)や[tasks.json](#tasksjson-とは)、VSCodeの拡張機能のような設定情報をプロジェクトごとに異なる値で保持することができる。

https://code.visualstudio.com/docs/editor/workspaces

## Single-folder workspaces

VSCodeからフォルダを開くと、既に Single-folder workspaces として扱われている。

そのため開いたフォルダを workspace として、workspace に対する設定を編集することができる。

「Settings」を選択する。

![vscode_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/2c238302-caa2-300d-12a2-776cb2e3fba3.png)

「Workspace」に対する設定ができる。

![vscode_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/7b65ee78-7398-f2e9-7d73-c816bc85eb13.png)


## Multi-root workspaces

複数のフォルダを一つの workspace として扱うことができる機能。

https://code.visualstudio.com/docs/editor/multi-root-workspaces

Multi-root workspaces に対する設定は、[settings.json](#settingsjson-とは)ではなく拡張子が 
 `.code-workspace`（`ワークスペース名.code-workspace`） のファイルに保存される。

2つのフォルダ `project-1` と `project-2` がある状態。

 ![vscode_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/bc97b012-48f6-8229-5fdc-04bd2a1615b7.png)

「Save Workspace As」を選択する。

![vscode_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/3e6ae012-c438-38f6-805f-531b0a90197b.png)

`ワークスペース名.code-workspace` があることを確認する

![vscode_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/dcc2b6c3-a4b5-319e-7b90-93475ab7844c.png)

Multi-root workspaces に含まれる各フォルダには `name` キーによって表示名をつけることができる。

![vscode_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/1b6734ee-9c5c-0f23-101b-ca3e360bfef9.png)

### Multi-root workspaces に対する設定

Multi-root workspaces に対する設定は `ワークスペース名.code-workspace` の `settings` キーに保存される。

![vscode_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/b2997382-cbdb-087a-a60d-735d14e59582.png)

![vscode_7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/98dded94-459b-c930-0350-35db514512c5.png)

### 各Folder に対する設定

Multi-root workspaces では、Single-folder workspaces の [User settings](#user-settings)、[Workspace settings](#workspace-settings) に加えて **Folder settings** という概念が追加される。

Folder settings は各Folder に対する設定のことで、それぞれのフォルダ内の `.vscode/settings.json` に保存される。

優先順位は Folder settings > Workspace settings > User settings となる。

各Folder に対する設定では、設定を行う対象の Folder を選択することができる。

「hello」を選択する。

![vscode_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/f96e898a-a453-2143-245b-37266ea12b83.png)

変更した設定情報は、対象Folder の `.vscode/settings.json` に保存される。

![vscode_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/6ab644ce-fb84-ec24-7b86-7e6e5adc89a2.png)

![vscoder_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1069520/9eec8cc7-5e6d-188e-e5c2-b2293eb9b2da.png)