Visual Studio Codeで自動的に複数のターミナルを起動しコマンドを実行させる方法

## はじめに
プロジェクトを起動するたび、同じ作業を行なっていませんか？
私の場合、起動→名前の変更→コマンドの実行を4回も行っています。
今回はTerminals Managerを使用して、この作業を0にした方法を紹介します。

## 導入方法

### Terminals Managerをインストールする
どちらかを選んでください
- Visual Studio Codeの拡張機能タブから
    - [参考: Visual Studio Codeのダウンロードと拡張機能](https://qiita.com/mumucochimu/items/2d57bd4d463d091c550e#%E6%8B%A1%E5%BC%B5%E6%A9%9F%E8%83%BD%E3%81%AE%E5%85%A5%E3%82%8C%E6%96%B9)
- 緑のInstallボタンから
    - [Terminals Manager - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=fabiospampinato.vscode-terminals)

### 設定ファイルを開く
1. メニューバーからコマンドパレットを選択
    1. [参考: Visual Studio Code キーボード ショートカット - すべてのコマンドの表示](https://qiita.com/oruponu/items/ae9c720d4522c1606daf#%E4%B8%80%E8%88%AC)
2. Terminals: Edit Configurationtを入力と選択
    2. .vscodeフォルダとterminals.jsonが作成されます

### 設定ファイルを記入する
terminalsにHashを追加することで、複数設定できます。

#### 例:自動的に２つのコンソールを起動し片方で rails console を起動する

```jsonc
{
  "autorun": true,
  "terminals": [
    {
      "name": "git",
      "icon": "logo-github",
      "description": "This is a git ",
      "command": "",
      "onlyMultiple": true,
      "focus": true
    },
    {
      "name": "rails c",
      "description": "This is a rails console",
      "icon": "ruby",
      "onlyMultiple": true,
      "commands": [
        "rails console"
      ],
      "open": true
    }
  ]
}

```

#### 例:自動的に1つのコンソールを起動し、後からTerminals: Run Singleを使用してrails cを起動する

```jsonc
{
  "autorun": true,
  "terminals": [
    {
      "name": "git",
      "icon": "logo-github",
      "description": "This is a git ",
      "command": "",
      "onlyMultiple": true,
      "focus": true
    },
    {
      "name": "rails c",
      "description": "This is a rails console",
      "icon": "ruby",
      "onlySingle": true,
      "commands": [
        "rails console"
      ],
      "open": true
    }
  ]
}

```

## terminals.jsに設定できるもの

- 詳しい設定内容は[こちら](https://marketplace.visualstudio.com/items?itemName=fabiospampinato.vscode-terminals)を確認してください

```jsonc
"autorun": true // 起動時またはプロジェクトがワークスペースに追加されたときに自動的にターミナルを起動する
"autokill": true // ワークスペースを削除したときに自動的にターミナルを終了する
"env": { "name": "value" } // 全てのターミナルに適用されるグローバル環境変数
```

### terminals

- [icon](https://primer.style/octicons/)
- [color](https://code.visualstudio.com/api/references/theme-color) 


```jsonc
"name": "hoge"// 名前
"description": "hode is hoge" // 説明
"icon": "hoge" //アイコン
"color": "terminal.hoge" // 色

"cwd": "/Users/hoge/hoge" // 実行したいディレクトリのパスがプロジェクトのパスと違う場合
"command": "echo hoge" // 実行したいコマンド１つの場合
"commands": [ // 実行したいコマンドが複数ある場合
  "echo hoge",
  "echo hoge 2"
]

"target": "hoge"// インスタンスでコマンドを実行する
"persistent": "hoge" // 閉じてもプロセスを実行し続ける
"substitution": false // 変数置換を無効にする
"recycle": false // 常に新しいターミナルを作成する
"open": true // コマンドを実行した後にターミナルを開く
"focus": true // コマンド実行後にターミナルを開き、ターミナルですぐに入力できるようにする
"execute": false // 最後のコマンドを実行せず入力したままにする

"onlySingle": true // 自動的に実行しない [Terminals: Run]で表示されない
"onlyMultiple": true // [Terminals: Run Single]で表示されない
"onlyAPI": true // 自動的に実行しない [Terminals: Run Single]で表示されない

"shellPath": "/bin/bash" // shellの実行ファイルへのパス
"shellArgs": ["--hoge"] // shellの実行ファイルに渡す引数
"env": { "name": "value" } // ターミナルで適用する環境変数
"envInherit": false // グローバル環境変数を継承しない
```

## コマンドパレットで実行できるコマンド
```
Terminals: Edit Configuration // terminals.jsonを開く
Terminals: Kill // 全てのターミナルを終了させる
Terminals: Run // onlyMultipleを設定しているものを起動する
Terminals: Run Single // onlySingleを設定しているものを個別に起動させる
```

## Terminals Managerの設定
```jsonc
"terminals.invertCommandsAndDescription": false // quickpickで表示されるターミナルのコマンドとdescriptionを反転させる
"terminals.showCommands": false // コマンドをquickpickに表示する
"terminals.showDescriptions": true // descriptionをquickpick表示する
"terminals.sortTerminals": false //  ターミナルをアルファベット順に並べ替える
"terminals.env": {} // 全てのターミナルに適用されるグローバル環境変数
"terminals.multiplexer": "screen" // ターミナルに使用したいマルチプレクサ "screen", "tmux"を使用できます
```

## 詳しく知りたいかたはこちら
https://marketplace.visualstudio.com/items?itemName=fabiospampinato.vscode-terminals

## おわりに
苦ではないけれど自動化できると楽だな..と思う作業を解消することで、
気持ちが少し楽になりました:ok_woman_tone1:
それでは良き開発ライフを！