🚀 VS Code で で入手しましょう!

変数のリファレンス

Visual Studio Code は、デバッグおよびタスク構成ファイル、および一部の選択された設定で、変数の置換をサポートしています。変数の置換は、${variableName} 構文を使用して launch.json ファイルと tasks.json ファイルの一部のキーと値の文字列内でサポートされています。

事前定義された変数

次の事前定義された変数がサポートされています。

変数 説明
${userHome} ユーザーのホームフォルダーのパス
${workspaceFolder} VS Code で開いているフォルダーのパス
${workspaceFolderBasename} VS Code で開いているフォルダーの名前 (スラッシュ (/) なし)
${file} 現在開いているファイル
${fileWorkspaceFolder} 現在開いているファイルのワークスペースフォルダー
${relativeFile} workspaceFolder を基準とした現在開いているファイル
${relativeFileDirname} workspaceFolder を基準とした現在開いているファイルのディレクトリ名
${fileBasename} 現在開いているファイルのベース名
${fileBasenameNoExtension} 現在開いているファイルのベース名 (ファイル拡張子なし)
${fileExtname} 現在開いているファイルの拡張子
${fileDirname} 現在開いているファイルのフォルダーパス
${fileDirnameBasename} 現在開いているファイルのフォルダー名
${cwd} VS Code の起動時のタスクランナーの現在の作業ディレクトリ
${lineNumber} アクティブファイルで現在選択されている行番号
${columnNumber} アクティブファイルで現在選択されている列番号
${selectedText} アクティブファイルで現在選択されているテキスト
${execPath} 実行中の VS Code 実行可能ファイルへのパス
${defaultBuildTask} 既定のビルドタスクの名前
${pathSeparator} オペレーティングシステムがファイルパス内のコンポーネントを区切るために使用する文字
${/} ${pathSeparator} の短縮形

事前定義された変数の例

次の条件があると仮定します。

  1. エディターで開いている /home/your-username/your-project/folder/file.ext にあるファイル。
  2. ルートワークスペースとして開いているディレクトリ /home/your-username/your-project

これにより、各変数の値は次のようになります。

  • ${userHome}: /home/your-username
  • ${workspaceFolder}: /home/your-username/your-project
  • ${workspaceFolderBasename}: 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
  • ${fileDirnameBasename}: folder
  • ${lineNumber}: カーソルの行番号
  • ${columnNumber}: カーソルの列番号
  • ${selectedText}: コードエディターで選択されたテキスト
  • ${execPath}: Code.exe の場所
  • ${pathSeparator}: macOS または Linux では /、Windows では \
ヒント

tasks.json および launch.json の文字列値内で IntelliSense を使用して、事前定義された変数の完全なリストを取得します。

ワークスペースフォルダーごとにスコープが設定された変数

変数にルートフォルダーの名前 (コロンで区切る) を追加すると、ワークスペースの兄弟ルートフォルダーにアクセスできます。ルートフォルダー名がない場合、変数は使用されているフォルダーと同じフォルダーにスコープが設定されます。

たとえば、フォルダー ServerClient を持つマルチルートワークスペースでは、${workspaceFolder:Client}Client ルートのパスを参照します。

環境変数

${env:Name} 構文を使用して環境変数を参照できます。たとえば、${env:USERNAME}USERNAME 環境変数を参照します。

{
  "type": "node",
  "request": "launch",
  "name": "Launch Program",
  "program": "${workspaceFolder}/app.js",
  "cwd": "${workspaceFolder}",
  "args": ["${env:USERNAME}"]
}

構成変数

VS Code の設定 (構成) を参照するには、${config:Name} 構文を使用します。たとえば、${config:editor.fontSize}editor.fontSize 設定を参照します。

コマンド変数

${command:commandID} 構文を使用して、任意の VS Code コマンドを変数として使用できます。

コマンド変数は、コマンド評価からの (文字列) 結果に置き換えられます。コマンドの実装は、UI なしの単純な計算から、VS Code の拡張機能 API を介して利用可能な UI 機能に基づいた高度な機能まで多岐にわたります。コマンドが文字列以外のものを返す場合、変数の置換は完了しません。コマンド変数は文字列を返す必要があります。

この機能の例は、VS Code の Node.js デバッガー拡張機能にあります。これは、実行中のすべての Node.js プロセスの一覧から単一のプロセスを選択するためのインタラクティブなコマンド extension.pickNodeProcess を提供します。コマンドは、選択されたプロセスのプロセス ID を返します。これにより、次の方法で プロセス ID でアタッチ 起動構成で extension.pickNodeProcess コマンドを使用できます。

{
  "configurations": [
    {
      "type": "node",
      "request": "attach",
      "name": "Attach by Process ID",
      "processId": "${command:extension.pickNodeProcess}"
    }
  ]
}

launch.json 構成でコマンド変数を使用する場合、囲んでいる launch.json 構成は引数を介してコマンドにオブジェクトとして渡されます。これにより、コマンドは、呼び出されたときに特定の launch.json 構成のコンテキストとパラメーターを認識できます。

入力変数

コマンド変数はすでに強力ですが、特定のユースケースに合わせて実行されるコマンドを構成するメカニズムがありません。たとえば、汎用的な "ユーザー入力プロンプト" にプロンプトメッセージまたは既定値を渡すことはできません。

この制限は、入力変数 (構文は ${input:variableID}) で解決されます。variableID は、launch.json および tasks.jsoninputs セクションのエントリを参照し、追加の構成属性が指定されています。入力変数のネストはサポートされていません。

次の例は、入力変数を使用する tasks.json の全体的な構造を示しています。

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "task name",
      "command": "${input:variableID}"
      // ...
    }
  ],
  "inputs": [
    {
      "id": "variableID",
      "type": "type of input variable"
      // type specific configuration attributes
    }
  ]
}

現在、VS Code は 3 種類の入力変数をサポートしています。

  • promptString: 文字列をユーザーから取得するための入力ボックスを表示します。
  • pickString: ユーザーがいくつかのオプションから選択できるように、クイックピックドロップダウンを表示します。
  • command: 任意のコマンドを実行します。

各タイプには、追加の構成属性が必要です。

promptString:

  • description: クイック入力に表示され、入力のコンテキストを提供します。
  • default: ユーザーが何も入力しない場合に使用される既定値。
  • password: true に設定すると、入力された値が表示されないパスワードプロンプトで入力します。

pickString:

  • description: クイックピックに表示され、入力のコンテキストを提供します。
  • options: ユーザーが選択できるオプションの配列。
  • default: ユーザーが何も入力しない場合に使用される既定値。オプション値のいずれかである必要があります。

オプションには、文字列値またはラベルと値の両方を持つオブジェクトを指定できます。ドロップダウンには label: value が表示されます。

command:

  • command: 変数補間時にコマンドを実行します。
  • args: コマンドの実装に渡されるオプションのオプションバッグ。

以下は、Angular CLI を使用した inputs の使用例を示す tasks.json の例です。

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "ng g",
      "type": "shell",
      "command": "ng",
      "args": ["g", "${input:componentType}", "${input:componentName}"]
    }
  ],
  "inputs": [
    {
      "type": "pickString",
      "id": "componentType",
      "description": "What type of component do you want to create?",
      "options": [
        "component",
        "directive",
        "pipe",
        "service",
        "class",
        "guard",
        "interface",
        "enum"
      ],
      "default": "component"
    },
    {
      "type": "promptString",
      "id": "componentName",
      "description": "Name your component.",
      "default": "my-new-component"
    }
  ]
}

例の実行

Inputs Example

次の例は、特定のフォルダーにあるすべてのテストケースの一覧からユーザーがテストケースを選択できるようにするデバッグ構成で、タイプ command のユーザー入力変数をどのように使用するかを示しています。一部の拡張機能が、構成可能な場所にあるすべてのテストケースを見つけ、それらの 1 つを選択するためのピッカー UI を表示する extension.mochaSupport.testPicker コマンドを提供することを前提としています。コマンド入力の引数は、コマンド自体によって定義されます。

{
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Run specific test",
      "program": "${workspaceFolder}/${input:pickTest}"
    }
  ],
  "inputs": [
    {
      "id": "pickTest",
      "type": "command",
      "command": "extension.mochaSupport.testPicker",
      "args": {
        "testFolder": "/out/tests"
      }
    }
  ]
}

コマンド入力はタスクでも使用できます。この例では、組み込みのタスク終了コマンドが使用されています。すべてのタスクを終了する引数を受け入れることができます。

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Terminate All Tasks",
      "command": "echo ${input:terminate}",
      "type": "shell",
      "problemMatcher": []
    }
  ],
  "inputs": [
    {
      "id": "terminate",
      "type": "command",
      "command": "workbench.action.tasks.terminate",
      "args": "terminateAll"
    }
  ]
}

よくある質問

デバッグ構成またはタスクでの変数置換の詳細

デバッグ構成またはタスクでの変数置換は、2 パス処理です。

  • 最初のパスでは、すべての変数が文字列の結果に評価されます。変数が複数回出現する場合、評価されるのは 1 回だけです。
  • 2 番目のパスでは、すべての変数が最初のパスからの結果に置き換えられます。

この結果として、変数の評価 (たとえば、拡張機能に実装されたコマンドベースの変数) は、デバッグ構成またはタスク内の他の置換された変数にアクセスできません。元の変数のみが表示されます。これは、変数が相互に依存できないことを意味します (これにより、分離が保証され、置換が評価順序に対して堅牢になります)。

ユーザー設定とワークスペース設定で変数の置換はサポートされていますか?

事前定義された変数は、ターミナルの cwdenvshellshellArgs 値など、settings.json ファイルの一部の設定キーでサポートされています。window.title などの一部の設定には、独自変数が存在します。

  "window.title": "${dirty}${activeEditorShort}${separator}${rootName}${separator}${appName}"

設定固有の変数については、設定エディター (⌘, (Windows、Linux Ctrl+,)) のコメントを参照してください。

${workspaceRoot} がドキュメント化されていないのはなぜですか?

変数 ${workspaceRoot} は、マルチルートワークスペースのサポートとの整合性を高めるために、${workspaceFolder} に置き換えられました。

tasks.json の変数が解決されないのはなぜですか?

tasks.json のすべての値が変数の置換をサポートしているわけではありません。具体的には、commandargs、および options のみが変数の置換をサポートしています。inputs セクションの入力変数は、入力変数のネストがサポートされていないため、解決されません。

変数の実際の値を知るにはどうすればよいですか?

変数の実行時の値を確認する簡単な方法の 1 つは、変数の値をコンソールに出力する VS Code タスクを作成することです。たとえば、${workspaceFolder} の解決された値を確認するには、tasks.json で次の簡単な 'echo' タスクを作成して実行できます (ターミナル > タスクの実行)。

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "echo",
      "type": "shell",
      "command": "echo ${workspaceFolder}"
    }
  ]
}