VS Codeの機能紹介 その7 (変数の参照)

VS Code VS Code/Extension

VS Codeの使えそうな機能を何回かに分けて記事に整理していく。
今回は、変数の参照について深堀り。

環境

  • Windows 11 Home 23H2
  • Visual Studio Code 1.91

変数の参照

VS Codeは、launch.jsonやtasks.jsonからの変数の参照をサポートしている。
変数には以下の種類があり、これらはデバッグやタスク実行時に評価、置換される。

  • 定義済み変数…VS Codeに事前定義されている変数
  • 環境変数…マシンの環境変数
  • VS Codeの設定変数…VS Codeのユーザ、ワークスペース、フォルダーなどの設定に使用する変数
  • コマンド変数…VS Codeで実行可能なコマンドを表す変数
  • 入力変数…ユーザが入力、選択した値を表す変数

定義済み変数の一部と環境変数を覚えておけば、ほとんどのケースはカバーできると思われる (たぶん)

定義済み変数

VS Codeで事前定義されている変数を、以下を前提とした例を含めて一覧にまとめる (よく使われそうなものだけ、青下線で示している)

  • ワークスペース /home/your-username/your-project を開いている
  • ファイル /home/your-username/your-project/folder/file.ext 開いている
定義済み変数説明
${userHome}ユーザのホームフォルダのパス/home/your-username
${workspaceFolder}VS Codeで開いているフォルダのパス/home/your-username/your-project
${workspaceFolderBasename}VS Codeで開いているフォルダ名your-project
${file}現在開いているファイル/home/your-username/your-project/folder/file.ext
${fileWorkspaceFolder}現在開いているファイルのワークスペースフォルダ/home/your-username/your-project
${relativeFile}現在開いているファイルのワークスペースフォルダから見た相対パスfolder/file.ext
${relativeFileDirname}現在開いているファイルのフォルダのワークスペースフォルダから見た相対パスfolder
${fileBasename}現在開いているファイルのベース名file.ext
${fileBasenameNoExtension}現在開いているファイルの拡張子無しベース名file
${fileExtname}現在開いているファイルの拡張子.ext
${fileDirname}現在開いているファイルのフォルダのパス/home/your-username/your-project/folder
${lineNumber}現在開いているファイルのカーソル位置の行数
${selectedText}現在開いているファイルの選択テキスト
${execPath}VS Codeの実行ファイル(Code.exe)のパス
${pathSeparator}OSが使用するファイルパスのセパレータWindows: \
Mac: /
Linux: /
${/}${pathSeparator}の省略形上に同じ

ルートフォルダ名をコロン(“:”)付きで変数に追加すると、兄弟ルートを表すことができる。

例.
以下のような複数ルートのワークスペースの場合、
  /home/your-username/your-project-c/Client
  /home/your-username/your-project-s/Server
次のように表すことができる。

${workspaceFolder:Client} -> /home/your-username/your-project-c/Client
${workspaceFolder:Server} -> /home/your-username/your-project-s/Server

環境変数

環境変数を参照するには、以下の構文を使用する。

${env:<変数名>}

例. ユーザ名を参照

${env:USERNAME}

VS Codeの設定変数

VS Codeの設定変数を参照するには、以下の構文を使用する。

${config:<設定変数>}

例. エディタのフォントサイズを参照

${config:editor.fontSize}

コマンド変数

コマンド変数として参照するには、以下の構文を使用する。
コマンドIDで指定したコマンドの実行結果が、変数と置き換わる。

${command:<コマンドID>}

例. Node.jsのプロセスIDを参照

${command:extension.pickNodeProcess}

入力変数

ユーザの入力値を、入力変数として参照するには、launch.jsonやtasks.jsonにinput属性を定義し、以下の構文を使用する。

${input:<入力値>}

inputs属性

入力変数の属性は下表の通り。

属性説明
id変数ID
${input:<変数ID>}として参照できる
type以下の入力種別から1つを指定する。
promptString: 値を入力
pickString: 候補から値を選択
command: コマンド実行
指定したtypeに応じて、追加属性を指定する必要あり (各リンク先参照)

promptStringの追加属性

入力ボックスを表示し、ユーザに値を入力させる。

属性説明
description入力に関する情報
defaultユーザが何も入力しなかった場合のデフォルト値
passwordパスワードのように入力値を非表示にする
true: 表示しない、false: 表示する

pickStringの追加属性

ドロップダウンを表示し、ユーザに値を選択させる。

属性説明
description入力に関する情報
options選択可能な候補の配列。
{ label, value } 形式で定義すると、labelを表示する
defaultユーザが何も入力しなかった場合のデフォルト値。optionsで指定した要素の1つである必要がある

commandの追加属性

属性説明
command実行するコマンド
argsコマンドに渡す引数

例. inputs属性を使って、Angular CLIを使用する

// tasks.json
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "ng g",
      "type": "shell",
      // 実行コマンド
      // ng g ${input:componentType} ${input:componentName}
      "command": "ng",
      "args": ["g", "${input:componentType}", "${input:componentName}"]
    }
  ],

  "inputs": [
    {
      // 1. componentType変数を、
      // 2. ユーザがoptionsの候補から選択可能な形式で定義する
      // 3. 省略した場合は、defaultの値が適用される
      // 4. 入力値の説明は、description参照
      "id": "componentType",
      "type": "pickString",
      "description": "What type of component do you want to create?",
      "options": [
        "component",
        "directive",
        "pipe",
        "service",
        "class",
        "guard",
        "interface",
        "enum"
      ],
      "default": "component"
    },
    {
      // 1. componentName
      // 2. ユーザが入力可能な形式で定義する
      // 3. 省略した場合は、defaultの値が適用される
      // 4. 入力値の説明は、description参照
      "id": "componentName",
      "type": "promptString",
      "description": "Name your component.",
      "default": "my-new-component"
    }
  ]
}

各変数の値の確認方法

各変数の値を確認するには、以下のようなecho コマンドを実行するタスクを作成して、実行すれば良い。

例. ${workspaceFolder}の値を確認する

// tasks.json
{
  "version": "2.0.0",
  "tasks": [
    {
      // 1. "echo"タスクにて、
      // 2. shellを利用して、
      // 3. echoコマンドを実行し、値を表示する
      "label": "echo",
      "type": "shell",
      "command": "echo ${workspaceFolder}"
    }
  ]
}

参考

Variables reference
Visual Studio Code variable substitution reference

タイトルとURLをコピーしました